You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by st...@apache.org on 2016/04/21 15:51:14 UTC

[1/8] ambari git commit: AMBARI-15915. SQL constraints: Inline constraints and name them in CREATE table. (Balazs Bence Sari via stoader)

Repository: ambari
Updated Branches:
  refs/heads/trunk a24262182 -> 346dfe7eb


http://git-wip-us.apache.org/repos/asf/ambari/blob/346dfe7e/ambari-server/src/test/java/org/apache/ambari/server/orm/db/DDLTests.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/db/DDLTests.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/db/DDLTests.java
new file mode 100644
index 0000000..779c937
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/db/DDLTests.java
@@ -0,0 +1,277 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.orm.db;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+
+
+/**
+ * Test to check the sanity and conisistence of DDL scripts for different SQL dialects.
+ * (e.g. no unnamed constraints, the same tables with the same columns and constraints must exist)
+ */
+public class DDLTests {
+  private static final Logger LOG = LoggerFactory.getLogger(DDLTestUtils.class);
+
+  private static final int EXPECTED_ALTER_TABLE_COUNT = 1;
+
+  @Test
+  public void testVerifyDerby() throws Exception {
+    verifyDDL("Derby");
+  }
+
+  @Test
+  public void testVerifyPostgres() throws Exception {
+    verifyDDL("Postgres");
+  }
+
+  @Test
+  public void testVerifyPostgresEmbedded() throws Exception {
+    verifyDDL("Postgres-EMBEDDED");
+  }
+
+  @Test
+  public void testVerifyMySQL() throws Exception {
+    verifyDDL("MySQL");
+  }
+
+  @Test
+  public void testVerifyOracle() throws Exception {
+    verifyDDL("Oracle");
+  }
+
+  @Test
+  public void testVerifySqlAnywhere() throws Exception {
+    verifyDDL("SQLAnywhere");
+  }
+
+  @Test
+  public void testVerifyMsSqlServer() throws Exception {
+    verifyDDL("SQLServer");
+  }
+
+  /**
+   * To verify if DDL have certain characteristics:
+   * <ul>
+   *   <li>There are no unnamed constraints</li>
+   *   <li>Alter tables are only used in exceptional cases</li>
+   *   <li>Table and constraint name lenghts doesn't exceed 30 (a restriction imposed by Oracle)</li>
+   * </ul>
+   *
+   */
+  private void verifyDDL(String dbType) throws Exception {
+    LOG.info("Checking DDL for {}", dbType);
+    DDL ddl = DDLTestUtils.getDdl(dbType);
+    printDDLMetrics(ddl);
+
+    // check for unwanted alter tables
+    Assert.assertEquals("Expected count of alter tables mismatch. Please include all constraint definitions in " +
+            "the create table statement, only use alter table in exceptional cases, such as to work around a circular " +
+            "FK dependency. Would another such case occur, please document it in the DDL's and adjust the " +
+            "EXPECTED_ALTER_TABLE_COUNT in this test.",
+        EXPECTED_ALTER_TABLE_COUNT,
+        ddl.alterTables.size());
+
+    // check for too long table/constraint names
+    for (String tableName: ddl.tableNames()) {
+      Assert.assertTrue("Table name exceeds the 30 character limit: " + tableName, tableName.length() <= 30);
+    }
+    for (Table table: ddl.tables.values()) {
+      Assert.assertTrue("PK name exceeds the 30 character limit: " + table.primaryKey,
+          !table.primaryKey.isPresent() || table.primaryKey.get().name().length() <= 30);
+      for (Constraint constr: Sets.union(table.foreignKeys, table.uniqueConstraints)) {
+        Assert.assertTrue("Constraint name exceeds the 30 character limit: " + constr, constr.name().length() <= 30);
+      }
+    }
+    // check for unnamed PK's (skip quartz tables)
+    for (Table table: ddl.tables.values()) {
+      Assert.assertFalse("Unnamed PK exists for table: " + table.name,
+          !table.name.startsWith("qrtz") && table.primaryKey.isPresent() && table.primaryKey.get().name().equals("<default>"));
+      for (Constraint constr: Sets.union(table.foreignKeys, table.uniqueConstraints)) {
+        Assert.assertTrue("Constraint name exceeds the 30 character limit: " + constr, constr.name().length() <= 30);
+      }
+    }
+
+  }
+
+  @Test
+  public void testComparePostgresEmbedded() throws Exception {
+    compareAgainstPostgres("Postgres-EMBEDDED");
+  }
+
+  @Test
+  public void testCompareDerby() throws Exception {
+    compareAgainstPostgres("Derby");
+  }
+
+  @Test
+  public void testCompareOracle() throws Exception {
+    compareAgainstPostgres("Oracle");
+  }
+
+  @Test
+  public void testCompareMySQL() throws Exception {
+    compareAgainstPostgres("MySQL");
+  }
+
+  @Test
+  public void testCompareSQLAnywhere() throws Exception {
+    compareAgainstPostgres("SQLAnywhere");
+  }
+
+  @Test
+  public void testCompareSQLServer() throws Exception {
+    compareAgainstPostgres("SQLServer");
+  }
+
+  static void compareAgainstPostgres(String dbType) throws Exception {
+    LOG.info("Comparing {} against Postgres", dbType);
+    DDL postgres = DDLTestUtils.getDdl("Postgres");
+    DDL other = DDLTestUtils.getDdl(dbType);
+    List<String> diffs = compareDdls(postgres, other);
+    if (diffs.isEmpty()) {
+      LOG.info("Compare OK.");
+    }
+    else {
+      LOG.info("{} differences found:", diffs.size());
+      for (String diff: diffs) { LOG.info(diff); }
+      Assert.fail("Found " + diffs.size() + " differences when comparing " + other + " against Postgres.");
+    }
+  }
+
+  static void printDDLMetrics(DDL ddl) {
+    LOG.info("DDL metrics for {}", ddl.dbType);
+    int colCount = 0;
+    int pkCount = 0;
+    int fkCount = 0;
+    int uqCount = 0;
+    for (Table t: ddl.tables.values()) {
+      colCount += t.columns.size();
+      if (t.primaryKey.isPresent()) pkCount ++;
+      fkCount += t.foreignKeys.size();
+      uqCount += t.uniqueConstraints.size();
+    }
+    LOG.info("Found {} tables", ddl.tables.size());
+    List<String> tableNames = new ArrayList<>();
+    tableNames.addAll(ddl.tableNames());
+    Collections.sort(tableNames);
+    LOG.info("Table names: {}", Joiner.on(',').join(tableNames));
+    LOG.info("Total number of Columns: {}", colCount);
+    LOG.info("Total number of PK's: {}", pkCount);
+    LOG.info("Total number of FK's: {}", fkCount);
+    LOG.info("Total number of UQ's: {}", uqCount);
+    LOG.info("Number of Alter table statements: {}", ddl.alterTables.size());
+
+  }
+
+  static List<String> compareDdls(DDL base, DDL other) {
+    List<String> diffs = new ArrayList<>();
+
+    if (!base.tableNames().equals(other.tableNames())) {
+      Set<String> missingTables = Sets.difference(base.tableNames(), other.tableNames());
+      if (!missingTables.isEmpty()) {
+        diffs.add("Missing tables: " + Joiner.on(", ").join(missingTables));
+      }
+
+      Set<String> extraTables = Sets.difference(other.tableNames(), base.tableNames());
+      if (!extraTables.isEmpty()) {
+        diffs.add("Extra tables: " + Joiner.on(", ").join(extraTables));
+      }
+    }
+
+    Set<String> commonTables = Sets.intersection(base.tableNames(), other.tableNames());
+    for (String tableName: commonTables) {
+      Table baseTable = base.tables.get(tableName);
+      Table otherTable = other.tables.get(tableName);
+      diffs.addAll(
+          compareSets(String.format("Comparing columns of table %s.", tableName), baseTable.columns, otherTable.columns));
+      diffs.addAll(
+          DDLTests.<FKConstraintContent>compareConstraints(tableName, "FK", baseTable.foreignKeys, otherTable.foreignKeys, false));
+      diffs.addAll(
+          DDLTests.<Set<String>>compareConstraints(tableName, "UQ", baseTable.uniqueConstraints, otherTable.uniqueConstraints, false));
+      boolean comparePKName = !tableName.contains("qrtz"); // we are more lenient with quartz tables
+      diffs.addAll(
+          DDLTests.<Set<String>>compareConstraints(tableName, "PK", toSet(baseTable.primaryKey), toSet(otherTable.primaryKey), comparePKName));
+    }
+
+    return diffs;
+  }
+
+  static <T> Set<T> toSet(Optional<T> arg) {
+    return arg.isPresent() ? ImmutableSet.of(arg.get()) : ImmutableSet.<T>of();
+  }
+
+  static <ContentType> List<String> compareSets(String message, Set<ContentType> base, Set<ContentType> other) {
+    List<String> diffs = new ArrayList<>(2);
+    Set<ContentType> missingItems = Sets.difference(base, other);
+    if (!missingItems.isEmpty()) {
+      diffs.add(message + " Missing items: " + Joiner.on(", ").join(missingItems));
+    }
+    Set<ContentType> extraItems = Sets.difference(other, base);
+    if (!extraItems.isEmpty()) {
+      diffs.add(message + " Extra items: " + Joiner.on(", ").join(extraItems));
+    }
+    return diffs;
+  }
+
+
+  static <ContentType> List<String> compareConstraints(String tableName,
+                                             String constraintType,
+                                             Set<? extends Constraint<ContentType>> base,
+                                             Set<? extends Constraint<ContentType>> other,
+                                             boolean compareConstraintNames) {
+    List<String> diffs = new ArrayList<>();
+    Map<ContentType, Constraint<ContentType>> baseByContent = Maps.newHashMap();
+    Map<ContentType, Constraint<ContentType>> otherByContent = Maps.newHashMap();
+    for (Constraint<ContentType> c: base) {
+      baseByContent.put(c.content(), c);
+    }
+    for (Constraint<ContentType> c: other) {
+      otherByContent.put(c.content(), c);
+    }
+    diffs.addAll(compareSets(String.format("Comparing %ss of table %s.", constraintType, tableName),
+        baseByContent.keySet(),
+        otherByContent.keySet()));
+
+    Set<ContentType> common = Sets.intersection(baseByContent.keySet(), otherByContent.keySet());
+    for (ContentType constrContent : common) {
+      Constraint b = baseByContent.get(constrContent);
+      Constraint o = otherByContent.get(constrContent);
+      if (!b.name().equals(o.name())) {
+        if (compareConstraintNames) {
+          diffs.add(String.format("Constraint name mismatch for table %s: %s vs. %s", tableName, b, o));
+        }
+        else {
+          LOG.info("Ignoring constraint name mismatch for table {}: {} vs. {}", tableName, b, o);
+        }
+      }
+    }
+
+    return diffs;
+  }
+
+}


[4/8] ambari git commit: AMBARI-15915. SQL constraints: Inline constraints and name them in CREATE table. (Balazs Bence Sari via stoader)

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/346dfe7e/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
index 71d4813..4584d5e 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
@@ -32,10 +32,26 @@ CREATE TABLE ambari.stack(
   stack_id BIGINT NOT NULL,
   stack_name VARCHAR(255) NOT NULL,
   stack_version VARCHAR(255) NOT NULL,
-  PRIMARY KEY (stack_id)
+  CONSTRAINT PK_stack PRIMARY KEY (stack_id),
+  CONSTRAINT unq_stack UNIQUE (stack_name, stack_version)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.stack TO :username;
 
+CREATE TABLE ambari.adminresourcetype (
+  resource_type_id INTEGER NOT NULL,
+  resource_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminresourcetype PRIMARY KEY (resource_type_id)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.adminresourcetype TO :username;
+
+CREATE TABLE ambari.adminresource (
+  resource_id BIGINT NOT NULL,
+  resource_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminresource PRIMARY KEY (resource_id),
+  CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES ambari.adminresourcetype(resource_type_id)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.adminresource TO :username;
+
 CREATE TABLE ambari.clusters (
   cluster_id BIGINT NOT NULL,
   resource_id BIGINT NOT NULL,
@@ -46,7 +62,9 @@ CREATE TABLE ambari.clusters (
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   desired_cluster_state VARCHAR(255) NOT NULL,
   desired_stack_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id)
+  CONSTRAINT PK_clusters PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES ambari.stack(stack_id),
+  CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES ambari.adminresource(resource_id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.clusters TO :username;
 
@@ -60,7 +78,11 @@ CREATE TABLE ambari.clusterconfig (
   config_data TEXT NOT NULL,
   config_attributes TEXT,
   create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY (config_id)
+  CONSTRAINT PK_clusterconfig PRIMARY KEY (config_id),
+  CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id),
+  CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES ambari.stack(stack_id),
+  CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag),
+  CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.clusterconfig TO :username;
 
@@ -71,7 +93,9 @@ CREATE TABLE ambari.clusterconfigmapping (
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (cluster_id, type_name, create_timestamp));
+  CONSTRAINT PK_clusterconfigmapping PRIMARY KEY (cluster_id, type_name, create_timestamp),
+  CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.clusterconfigmapping TO :username;
 
 CREATE TABLE ambari.serviceconfig (
@@ -84,37 +108,89 @@ CREATE TABLE ambari.serviceconfig (
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   group_id BIGINT,
   note TEXT,
-  PRIMARY KEY (service_config_id)
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES ambari.stack(stack_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.serviceconfig TO :username;
 
+CREATE TABLE ambari.hosts (
+  host_id BIGINT NOT NULL,
+  host_name VARCHAR(255) NOT NULL,
+  cpu_count INTEGER NOT NULL,
+  ph_cpu_count INTEGER,
+  cpu_info VARCHAR(255) NOT NULL,
+  discovery_status VARCHAR(2000) NOT NULL,
+  host_attributes VARCHAR(20000) NOT NULL,
+  ipv4 VARCHAR(255),
+  ipv6 VARCHAR(255),
+  public_host_name VARCHAR(255),
+  last_registration_time BIGINT NOT NULL,
+  os_arch VARCHAR(255) NOT NULL,
+  os_info VARCHAR(1000) NOT NULL,
+  os_type VARCHAR(255) NOT NULL,
+  rack_info VARCHAR(255) NOT NULL,
+  total_mem BIGINT NOT NULL,
+  CONSTRAINT PK_hosts PRIMARY KEY (host_id),
+  CONSTRAINT UQ_hosts_host_name UNIQUE (host_name)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.hosts TO :username;
+
 CREATE TABLE ambari.serviceconfighosts (
   service_config_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(service_config_id, host_id));
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES ambari.serviceconfig(service_config_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.serviceconfighosts TO :username;
 
 CREATE TABLE ambari.serviceconfigmapping (
   service_config_id BIGINT NOT NULL,
   config_id BIGINT NOT NULL,
-  PRIMARY KEY(service_config_id, config_id));
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES ambari.clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES ambari.serviceconfig(service_config_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.serviceconfigmapping TO :username;
 
 CREATE TABLE ambari.clusterservices (
   service_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
   service_enabled INTEGER NOT NULL,
-  PRIMARY KEY (service_name, cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.clusterservices TO :username;
 
 CREATE TABLE ambari.clusterstate (
   cluster_id BIGINT NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
   current_stack_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id)
+  CONSTRAINT PK_clusterstate PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id),
+  CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES ambari.stack(stack_id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.clusterstate TO :username;
 
+CREATE TABLE ambari.repo_version (
+  repo_version_id BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  version VARCHAR(255) NOT NULL,
+  display_name VARCHAR(128) NOT NULL,
+  repositories TEXT NOT NULL,
+  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  version_url VARCHAR(1024),
+  version_xml TEXT,
+  version_xsd VARCHAR(512),
+  parent_id BIGINT,
+  CONSTRAINT PK_repo_version PRIMARY KEY (repo_version_id),
+  CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES ambari.stack(stack_id),
+  CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
+  CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.repo_version TO :username;
+
 CREATE TABLE ambari.cluster_version (
   id BIGINT NOT NULL,
   repo_version_id BIGINT NOT NULL,
@@ -123,9 +199,28 @@ CREATE TABLE ambari.cluster_version (
   start_time BIGINT NOT NULL,
   end_time BIGINT,
   user_name VARCHAR(32),
-  PRIMARY KEY (id));
+  CONSTRAINT PK_cluster_version PRIMARY KEY (id),
+  CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id),
+  CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES ambari.repo_version (repo_version_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.cluster_version TO :username;
 
+CREATE TABLE ambari.servicecomponentdesiredstate (
+  id BIGINT NOT NULL,
+  component_name VARCHAR(255) NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  desired_stack_id BIGINT NOT NULL,
+  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
+  desired_state VARCHAR(255) NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
+  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
+  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
+  CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES ambari.stack(stack_id),
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES ambari.clusterservices (service_name, cluster_id)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.servicecomponentdesiredstate TO :username;
+
 CREATE TABLE ambari.hostcomponentdesiredstate (
   cluster_id BIGINT NOT NULL,
   component_name VARCHAR(255) NOT NULL,
@@ -137,7 +232,10 @@ CREATE TABLE ambari.hostcomponentdesiredstate (
   maintenance_state VARCHAR(32) NOT NULL,
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
   restart_required SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY (cluster_id, component_name, host_id, service_name)
+  CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (cluster_id, component_name, host_id, service_name),
+  CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id),
+  CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES ambari.stack(stack_id),
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES ambari.servicecomponentdesiredstate (component_name, service_name, cluster_id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.hostcomponentdesiredstate TO :username;
 
@@ -152,31 +250,14 @@ CREATE TABLE ambari.hostcomponentstate (
   service_name VARCHAR(255) NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id)
+  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id),
+  CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES ambari.stack(stack_id),
+  CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id),
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES ambari.servicecomponentdesiredstate (component_name, service_name, cluster_id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.hostcomponentstate TO :username;
 CREATE INDEX idx_host_component_state on ambari.hostcomponentstate(host_id, component_name, service_name, cluster_id);
 
-CREATE TABLE ambari.hosts (
-  host_id BIGINT NOT NULL,
-  host_name VARCHAR(255) NOT NULL,
-  cpu_count INTEGER NOT NULL,
-  ph_cpu_count INTEGER,
-  cpu_info VARCHAR(255) NOT NULL,
-  discovery_status VARCHAR(2000) NOT NULL,
-  host_attributes VARCHAR(20000) NOT NULL,
-  ipv4 VARCHAR(255),
-  ipv6 VARCHAR(255),
-  public_host_name VARCHAR(255),
-  last_registration_time BIGINT NOT NULL,
-  os_arch VARCHAR(255) NOT NULL,
-  os_info VARCHAR(1000) NOT NULL,
-  os_type VARCHAR(255) NOT NULL,
-  rack_info VARCHAR(255) NOT NULL,
-  total_mem BIGINT NOT NULL,
-  PRIMARY KEY (host_id));
-GRANT ALL PRIVILEGES ON TABLE ambari.hosts TO :username;
-
 CREATE TABLE ambari.hoststate (
   agent_version VARCHAR(255) NOT NULL,
   available_mem BIGINT NOT NULL,
@@ -185,7 +266,9 @@ CREATE TABLE ambari.hoststate (
   host_id BIGINT NOT NULL,
   time_in_state BIGINT NOT NULL,
   maintenance_state VARCHAR(512),
-  PRIMARY KEY (host_id));
+  CONSTRAINT PK_hoststate PRIMARY KEY (host_id),
+  CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.hoststate TO :username;
 
 CREATE TABLE ambari.host_version (
@@ -193,22 +276,11 @@ CREATE TABLE ambari.host_version (
   repo_version_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
   state VARCHAR(32) NOT NULL,
-  PRIMARY KEY (id));
-GRANT ALL PRIVILEGES ON TABLE ambari.host_version TO :username;
-
-CREATE TABLE ambari.servicecomponentdesiredstate (
-  id BIGINT NOT NULL,
-  component_name VARCHAR(255) NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  desired_stack_id BIGINT NOT NULL,
-  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
-  desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id)
+  CONSTRAINT PK_host_version PRIMARY KEY (id),
+  CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id),
+  CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES ambari.repo_version (repo_version_id)
 );
-GRANT ALL PRIVILEGES ON TABLE ambari.servicecomponentdesiredstate TO :username;
+GRANT ALL PRIVILEGES ON TABLE ambari.host_version TO :username;
 
 CREATE TABLE ambari.servicedesiredstate (
   cluster_id BIGINT NOT NULL,
@@ -218,10 +290,27 @@ CREATE TABLE ambari.servicedesiredstate (
   service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL,
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  PRIMARY KEY (cluster_id, service_name)
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES ambari.stack(stack_id),
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES ambari.clusterservices (service_name, cluster_id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.servicedesiredstate TO :username;
 
+CREATE TABLE ambari.adminprincipaltype (
+  principal_type_id INTEGER NOT NULL,
+  principal_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminprincipaltype PRIMARY KEY (principal_type_id)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.adminprincipaltype TO :username;
+
+CREATE TABLE ambari.adminprincipal (
+  principal_id BIGINT NOT NULL,
+  principal_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminprincipal PRIMARY KEY (principal_id),
+  CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES ambari.adminprincipaltype(principal_type_id)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.adminprincipal TO :username;
+
 CREATE TABLE ambari.users (
   user_id INTEGER,
   principal_id BIGINT NOT NULL,
@@ -232,7 +321,10 @@ CREATE TABLE ambari.users (
   user_password VARCHAR(255),
   active INTEGER NOT NULL DEFAULT 1,
   active_widget_layouts VARCHAR(1024) DEFAULT NULL,
-  PRIMARY KEY (user_id));
+  CONSTRAINT PK_users PRIMARY KEY (user_id),
+  CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES ambari.adminprincipal(principal_id),
+  CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.users TO :username;
 
 CREATE TABLE ambari.groups (
@@ -240,23 +332,80 @@ CREATE TABLE ambari.groups (
   principal_id BIGINT NOT NULL,
   group_name VARCHAR(255) NOT NULL,
   ldap_group INTEGER NOT NULL DEFAULT 0,
-  PRIMARY KEY (group_id),
-  UNIQUE (ldap_group, group_name));
+  CONSTRAINT PK_groups PRIMARY KEY (group_id),
+  UNIQUE (ldap_group, group_name),
+  CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES ambari.adminprincipal(principal_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.groups TO :username;
 
 CREATE TABLE ambari.members (
   member_id INTEGER,
   group_id INTEGER NOT NULL,
   user_id INTEGER NOT NULL,
-  PRIMARY KEY (member_id),
-  UNIQUE(group_id, user_id));
+  CONSTRAINT PK_members PRIMARY KEY (member_id),
+  UNIQUE(group_id, user_id),
+  CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES ambari.groups (group_id),
+  CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES ambari.users (user_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.members TO :username;
 
-CREATE TABLE ambari.execution_command (
-  command BYTEA,
-  task_id BIGINT NOT NULL,
-  PRIMARY KEY (task_id));
-GRANT ALL PRIVILEGES ON TABLE ambari.execution_command TO :username;
+CREATE TABLE ambari.requestschedule (
+  schedule_id bigint,
+  cluster_id bigint NOT NULL,
+  description varchar(255),
+  status varchar(255),
+  batch_separation_seconds smallint,
+  batch_toleration_limit smallint,
+  create_user varchar(255),
+  create_timestamp bigint,
+  update_user varchar(255),
+  update_timestamp bigint,
+  minutes varchar(10),
+  hours varchar(10),
+  days_of_month varchar(10),
+  month varchar(10),
+  day_of_week varchar(10),
+  yearToSchedule varchar(10),
+  startTime varchar(50),
+  endTime varchar(50),
+  last_execution_status varchar(255),
+  CONSTRAINT PK_requestschedule PRIMARY KEY (schedule_id)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.requestschedule TO :username;
+
+CREATE TABLE ambari.request (
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT,
+  command_name VARCHAR(255),
+  create_time BIGINT NOT NULL,
+  end_time BIGINT NOT NULL,
+  exclusive_execution SMALLINT NOT NULL DEFAULT 0,
+  inputs BYTEA,
+  request_context VARCHAR(255),
+  request_type VARCHAR(255),
+  request_schedule_id BIGINT,
+  start_time BIGINT NOT NULL,
+  status VARCHAR(255),
+  CONSTRAINT PK_request PRIMARY KEY (request_id),
+  CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES ambari.requestschedule (schedule_id)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.request TO :username;
+
+CREATE TABLE ambari.stage (
+  stage_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  skippable SMALLINT DEFAULT 0 NOT NULL,
+  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
+  log_info VARCHAR(255) NOT NULL,
+  request_context VARCHAR(255),
+  cluster_host_info BYTEA NOT NULL,
+  command_params BYTEA,
+  host_params BYTEA,
+  CONSTRAINT PK_stage PRIMARY KEY (stage_id, request_id),
+  CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES ambari.request (request_id)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.stage TO :username;
 
 CREATE TABLE ambari.host_role_command (
   task_id BIGINT NOT NULL,
@@ -282,54 +431,39 @@ CREATE TABLE ambari.host_role_command (
   role_command VARCHAR(255),
   command_detail VARCHAR(255),
   custom_command_name VARCHAR(255),
-  PRIMARY KEY (task_id));
+  CONSTRAINT PK_host_role_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id),
+  CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES ambari.stage (stage_id, request_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.host_role_command TO :username;
 
+CREATE TABLE ambari.execution_command (
+  command BYTEA,
+  task_id BIGINT NOT NULL,
+  CONSTRAINT PK_execution_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES ambari.host_role_command (task_id)
+);
+GRANT ALL PRIVILEGES ON TABLE ambari.execution_command TO :username;
+
 CREATE TABLE ambari.role_success_criteria (
   role VARCHAR(255) NOT NULL,
   request_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   success_factor FLOAT NOT NULL,
-  PRIMARY KEY (role, request_id, stage_id));
+  CONSTRAINT PK_role_success_criteria PRIMARY KEY (role, request_id, stage_id),
+  CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES ambari.stage (stage_id, request_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.role_success_criteria TO :username;
 
-CREATE TABLE ambari.stage (
-  stage_id BIGINT NOT NULL,
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  skippable SMALLINT DEFAULT 0 NOT NULL,
-  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
-  log_info VARCHAR(255) NOT NULL,
-  request_context VARCHAR(255),
-  cluster_host_info BYTEA NOT NULL,
-  command_params BYTEA,
-  host_params BYTEA,
-  PRIMARY KEY (stage_id, request_id));
-GRANT ALL PRIVILEGES ON TABLE ambari.stage TO :username;
-
-CREATE TABLE ambari.request (
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT,
-  command_name VARCHAR(255),
-  create_time BIGINT NOT NULL,
-  end_time BIGINT NOT NULL,
-  exclusive_execution SMALLINT NOT NULL DEFAULT 0,
-  inputs BYTEA,
-  request_context VARCHAR(255),
-  request_type VARCHAR(255),
-  request_schedule_id BIGINT,
-  start_time BIGINT NOT NULL,
-  status VARCHAR(255),
-  PRIMARY KEY (request_id));
-GRANT ALL PRIVILEGES ON TABLE ambari.request TO :username;
-
 CREATE TABLE ambari.requestresourcefilter (
   filter_id BIGINT NOT NULL,
   request_id BIGINT NOT NULL,
   service_name VARCHAR(255),
   component_name VARCHAR(255),
   hosts BYTEA,
-  PRIMARY KEY (filter_id));
+  CONSTRAINT PK_requestresourcefilter PRIMARY KEY (filter_id),
+  CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES ambari.request (request_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.requestresourcefilter TO :username;
 
 CREATE TABLE ambari.requestoperationlevel (
@@ -340,19 +474,25 @@ CREATE TABLE ambari.requestoperationlevel (
   service_name VARCHAR(255),
   host_component_name VARCHAR(255),
   host_id BIGINT NULL,      -- unlike most host_id columns, this one allows NULLs because the request can be at the service level
-  PRIMARY KEY (operation_level_id));
+  CONSTRAINT PK_requestoperationlevel PRIMARY KEY (operation_level_id),
+  CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES ambari.request (request_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.requestoperationlevel TO :username;
 
 CREATE TABLE ambari.ClusterHostMapping (
   cluster_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id, host_id));
+  CONSTRAINT PK_ClusterHostMapping PRIMARY KEY (cluster_id, host_id),
+  CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id),
+  CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.ClusterHostMapping TO :username;
 
 CREATE TABLE ambari.key_value_store (
   "key" VARCHAR(255),
   "value" VARCHAR,
-  PRIMARY KEY ("key"));
+  CONSTRAINT PK_key_value_store PRIMARY KEY ("key")
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.key_value_store TO :username;
 
 CREATE TABLE ambari.hostconfigmapping (
@@ -364,18 +504,24 @@ CREATE TABLE ambari.hostconfigmapping (
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (cluster_id, host_id, type_name, create_timestamp));
+  CONSTRAINT PK_hostconfigmapping PRIMARY KEY (cluster_id, host_id, type_name, create_timestamp),
+  CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.hostconfigmapping TO :username;
 
 CREATE TABLE ambari.metainfo (
   "metainfo_key" VARCHAR(255),
   "metainfo_value" VARCHAR,
-  PRIMARY KEY ("metainfo_key"));
+  CONSTRAINT PK_metainfo PRIMARY KEY ("metainfo_key")
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.metainfo TO :username;
 
 CREATE TABLE ambari.ambari_sequences (
-  sequence_name VARCHAR(255) PRIMARY KEY,
-  sequence_value BIGINT NOT NULL);
+  sequence_name VARCHAR(255),
+  sequence_value BIGINT NOT NULL,
+  CONSTRAINT pk_ambari_sequences PRIMARY KEY (sequence_name)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.ambari_sequences TO :username;
 
 CREATE TABLE ambari.configgroup (
@@ -386,7 +532,9 @@ CREATE TABLE ambari.configgroup (
   description VARCHAR(1024),
   create_timestamp BIGINT NOT NULL,
   service_name VARCHAR(255),
-  PRIMARY KEY(group_id));
+  CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.configgroup TO :username;
 
 CREATE TABLE ambari.confgroupclusterconfigmapping (
@@ -396,38 +544,21 @@ CREATE TABLE ambari.confgroupclusterconfigmapping (
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) DEFAULT '_db',
   create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY(config_group_id, cluster_id, config_type));
+  CONSTRAINT PK_confgroupclustercfgmapping PRIMARY KEY (config_group_id, cluster_id, config_type),
+  CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES ambari.configgroup (group_id),
+  CONSTRAINT FK_confg FOREIGN KEY (version_tag, config_type, cluster_id) REFERENCES ambari.clusterconfig (version_tag, type_name, cluster_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.confgroupclusterconfigmapping TO :username;
 
 CREATE TABLE ambari.configgrouphostmapping (
   config_group_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(config_group_id, host_id));
+  CONSTRAINT PK_configgrouphostmapping PRIMARY KEY (config_group_id, host_id),
+  CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES ambari.configgroup (group_id),
+  CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.configgrouphostmapping TO :username;
 
-CREATE TABLE ambari.requestschedule (
-  schedule_id bigint,
-  cluster_id bigint NOT NULL,
-  description varchar(255),
-  status varchar(255),
-  batch_separation_seconds smallint,
-  batch_toleration_limit smallint,
-  create_user varchar(255),
-  create_timestamp bigint,
-  update_user varchar(255),
-  update_timestamp bigint,
-  minutes varchar(10),
-  hours varchar(10),
-  days_of_month varchar(10),
-  month varchar(10),
-  day_of_week varchar(10),
-  yearToSchedule varchar(10),
-  startTime varchar(50),
-  endTime varchar(50),
-  last_execution_status varchar(255),
-  PRIMARY KEY(schedule_id));
-GRANT ALL PRIVILEGES ON TABLE ambari.requestschedule TO :username;
-
 CREATE TABLE ambari.requestschedulebatchrequest (
   schedule_id bigint,
   batch_id bigint,
@@ -438,7 +569,9 @@ CREATE TABLE ambari.requestschedulebatchrequest (
   request_status varchar(255),
   return_code smallint,
   return_message varchar(20000),
-  PRIMARY KEY(schedule_id, batch_id));
+  CONSTRAINT PK_requestschedulebatchrequest PRIMARY KEY (schedule_id, batch_id),
+  CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES ambari.requestschedule (schedule_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.requestschedulebatchrequest TO :username;
 
 CREATE TABLE ambari.blueprint (
@@ -446,28 +579,31 @@ CREATE TABLE ambari.blueprint (
   stack_id BIGINT NOT NULL,
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_descriptor_reference VARCHAR(255),
-  PRIMARY KEY(blueprint_name)
-);
+  CONSTRAINT PK_blueprint PRIMARY KEY (blueprint_name),
+  CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES ambari.stack(stack_id));
 
 CREATE TABLE ambari.hostgroup (
   blueprint_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   cardinality VARCHAR(255) NOT NULL,
-  PRIMARY KEY(blueprint_name, name));
+  CONSTRAINT PK_hostgroup PRIMARY KEY (blueprint_name, name),
+  CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES ambari.blueprint(blueprint_name));
 
 CREATE TABLE ambari.hostgroup_component (
   blueprint_name VARCHAR(255) NOT NULL,
   hostgroup_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   provision_action VARCHAR(255),
-  PRIMARY KEY(blueprint_name, hostgroup_name, name));
+  CONSTRAINT PK_hostgroup_component PRIMARY KEY (blueprint_name, hostgroup_name, name),
+  CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES ambari.hostgroup (blueprint_name, name));
 
 CREATE TABLE ambari.blueprint_configuration (
   blueprint_name varchar(255) NOT NULL,
   type_name varchar(255) NOT NULL,
   config_data TEXT NOT NULL,
   config_attributes TEXT,
-  PRIMARY KEY(blueprint_name, type_name));
+  CONSTRAINT PK_blueprint_configuration PRIMARY KEY (blueprint_name, type_name),
+  CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES ambari.blueprint(blueprint_name));
 
 CREATE TABLE ambari.blueprint_setting (
   id BIGINT NOT NULL,
@@ -484,8 +620,9 @@ CREATE TABLE ambari.hostgroup_configuration (
   type_name VARCHAR(255) NOT NULL,
   config_data TEXT NOT NULL,
   config_attributes TEXT,
-  PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
-
+  CONSTRAINT PK_hostgroup_configuration PRIMARY KEY (blueprint_name, hostgroup_name, type_name),
+  CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES ambari.hostgroup (blueprint_name, name)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.blueprint TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.hostgroup TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.hostgroup_component TO :username;
@@ -505,16 +642,8 @@ CREATE TABLE ambari.viewmain (
   archive VARCHAR(255),
   mask VARCHAR(255),
   system_view SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY(view_name));
-
-CREATE TABLE ambari.viewinstancedata (
-  view_instance_id BIGINT,
-  view_name VARCHAR(255) NOT NULL,
-  view_instance_name VARCHAR(255) NOT NULL,
-  name VARCHAR(255) NOT NULL,
-  user_name VARCHAR(255) NOT NULL,
-  value VARCHAR(2000),
-  PRIMARY KEY(view_instance_id, name, user_name));
+  CONSTRAINT PK_viewmain PRIMARY KEY (view_name),
+  CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES ambari.adminresourcetype(resource_type_id));
 
 CREATE TABLE ambari.viewinstance (
   view_instance_id BIGINT,
@@ -530,14 +659,29 @@ CREATE TABLE ambari.viewinstance (
   alter_names SMALLINT NOT NULL DEFAULT 1,
   cluster_handle VARCHAR(255),
   short_url VARCHAR (255),
-  PRIMARY KEY(view_instance_id));
+  CONSTRAINT PK_viewinstance PRIMARY KEY (view_instance_id),
+  CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES ambari.viewmain(view_name),
+  CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES ambari.adminresource(resource_id),
+  CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name),
+  CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name));
+
+CREATE TABLE ambari.viewinstancedata (
+  view_instance_id BIGINT,
+  view_name VARCHAR(255) NOT NULL,
+  view_instance_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) NOT NULL,
+  value VARCHAR(2000),
+  CONSTRAINT PK_viewinstancedata PRIMARY KEY (view_instance_id, name, user_name),
+  CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES ambari.viewinstance(view_instance_id, view_name, name));
 
 CREATE TABLE ambari.viewinstanceproperty (
   view_name VARCHAR(255) NOT NULL,
   view_instance_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   value VARCHAR(2000),
-  PRIMARY KEY(view_name, view_instance_name, name));
+  CONSTRAINT PK_viewinstanceproperty PRIMARY KEY (view_name, view_instance_name, name),
+  CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES ambari.viewinstance(view_name, name));
 
 CREATE TABLE ambari.viewparameter (
   view_name VARCHAR(255) NOT NULL,
@@ -549,7 +693,8 @@ CREATE TABLE ambari.viewparameter (
   cluster_config VARCHAR(255),
   required CHAR(1),
   masked CHAR(1),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewparameter PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES ambari.viewmain(view_name));
 
 CREATE TABLE ambari.viewresource (
   view_name VARCHAR(255) NOT NULL,
@@ -560,7 +705,8 @@ CREATE TABLE ambari.viewresource (
   provider VARCHAR(255),
   service VARCHAR(255),
   resource VARCHAR(255),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewresource PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES ambari.viewmain(view_name));
 
 CREATE TABLE ambari.viewentity (
   id BIGINT NOT NULL,
@@ -568,8 +714,9 @@ CREATE TABLE ambari.viewentity (
   view_instance_name VARCHAR(255) NOT NULL,
   class_name VARCHAR(255) NOT NULL,
   id_property VARCHAR(255),
-  PRIMARY KEY(id));
-
+  CONSTRAINT PK_viewentity PRIMARY KEY (id),
+  CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES ambari.viewinstance(view_name, name)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.viewmain TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.viewinstancedata TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.viewinstance TO :username;
@@ -578,80 +725,49 @@ GRANT ALL PRIVILEGES ON TABLE ambari.viewparameter TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.viewresource TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.viewentity TO :username;
 
-CREATE TABLE ambari.adminresourcetype (
-  resource_type_id INTEGER NOT NULL,
-  resource_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(resource_type_id));
-
-CREATE TABLE ambari.adminresource (
-  resource_id BIGINT NOT NULL,
-  resource_type_id INTEGER NOT NULL,
-  PRIMARY KEY(resource_id));
-
-CREATE TABLE ambari.adminprincipaltype (
-  principal_type_id INTEGER NOT NULL,
-  principal_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(principal_type_id));
-
-CREATE TABLE ambari.adminprincipal (
-  principal_id BIGINT NOT NULL,
-  principal_type_id INTEGER NOT NULL,
-  PRIMARY KEY(principal_id));
-
 CREATE TABLE ambari.adminpermission (
   permission_id BIGINT NOT NULL,
   permission_name VARCHAR(255) NOT NULL,
   resource_type_id INTEGER NOT NULL,
   permission_label VARCHAR(255),
   sort_order SMALLINT NOT NULL DEFAULT 1,
-  PRIMARY KEY(permission_id));
+  CONSTRAINT PK_adminpermission PRIMARY KEY (permission_id),
+  CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES ambari.adminresourcetype(resource_type_id),
+  CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id));
 
 CREATE TABLE ambari.roleauthorization (
   authorization_id VARCHAR(100) NOT NULL,
   authorization_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(authorization_id));
+  CONSTRAINT PK_roleauthorization PRIMARY KEY (authorization_id));
 
 CREATE TABLE ambari.permission_roleauthorization (
   permission_id BIGINT NOT NULL,
   authorization_id VARCHAR(100) NOT NULL,
-  PRIMARY KEY(permission_id, authorization_id));
+  CONSTRAINT PK_permsn_roleauthorization PRIMARY KEY (permission_id, authorization_id),
+  CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES ambari.roleauthorization(authorization_id),
+  CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES ambari.adminpermission(permission_id));
 
 CREATE TABLE ambari.adminprivilege (
   privilege_id BIGINT,
   permission_id BIGINT NOT NULL,
   resource_id BIGINT NOT NULL,
   principal_id BIGINT NOT NULL,
-  PRIMARY KEY(privilege_id));
-
-GRANT ALL PRIVILEGES ON TABLE ambari.adminresourcetype TO :username;
-GRANT ALL PRIVILEGES ON TABLE ambari.adminresource TO :username;
-GRANT ALL PRIVILEGES ON TABLE ambari.adminprincipaltype TO :username;
-GRANT ALL PRIVILEGES ON TABLE ambari.adminprincipal TO :username;
+  CONSTRAINT PK_adminprivilege PRIMARY KEY (privilege_id),
+  CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES ambari.adminpermission(permission_id),
+  CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES ambari.adminprincipal(principal_id),
+  CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES ambari.adminresource(resource_id)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.adminpermission TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.roleauthorization TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.permission_roleauthorization TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.adminprivilege TO :username;
 
-CREATE TABLE ambari.repo_version (
-  repo_version_id BIGINT NOT NULL,
-  stack_id BIGINT NOT NULL,
-  version VARCHAR(255) NOT NULL,
-  display_name VARCHAR(128) NOT NULL,
-  repositories TEXT NOT NULL,
-  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
-  version_url VARCHAR(1024),
-  version_xml TEXT,
-  version_xsd VARCHAR(512),
-  parent_id BIGINT,
-  PRIMARY KEY(repo_version_id)
-);
-GRANT ALL PRIVILEGES ON TABLE ambari.repo_version TO :username;
-
 CREATE TABLE ambari.artifact (
   artifact_name VARCHAR(255) NOT NULL,
   artifact_data TEXT NOT NULL,
   foreign_keys VARCHAR(255) NOT NULL,
-  PRIMARY KEY (artifact_name, foreign_keys));
+  CONSTRAINT PK_artifact PRIMARY KEY (artifact_name, foreign_keys)
+);
 GRANT ALL PRIVILEGES ON TABLE ambari.artifact TO :username;
 
 CREATE TABLE ambari.widget (
@@ -667,7 +783,7 @@ CREATE TABLE ambari.widget (
   widget_values TEXT,
   properties TEXT,
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget PRIMARY KEY (id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.widget TO :username;
 
@@ -679,7 +795,7 @@ CREATE TABLE ambari.widget_layout (
   user_name VARCHAR(255) NOT NULL,
   display_name VARCHAR(255),
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget_layout PRIMARY KEY (id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.widget_layout TO :username;
 
@@ -687,7 +803,9 @@ CREATE TABLE ambari.widget_layout_user_widget (
   widget_layout_id BIGINT NOT NULL,
   widget_id BIGINT NOT NULL,
   widget_order smallint,
-  PRIMARY KEY(widget_layout_id, widget_id)
+  CONSTRAINT PK_widget_layout_user_widget PRIMARY KEY (widget_layout_id, widget_id),
+  CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES ambari.widget(id),
+  CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES ambari.widget_layout(id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.widget_layout_user_widget TO :username;
 
@@ -699,7 +817,8 @@ CREATE TABLE ambari.topology_request (
   cluster_properties TEXT,
   cluster_attributes TEXT,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
+  CONSTRAINT PK_topology_request PRIMARY KEY (id),
+  CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.topology_request TO :username;
 
@@ -709,7 +828,8 @@ CREATE TABLE ambari.topology_hostgroup (
   group_properties TEXT,
   group_attributes TEXT,
   request_id BIGINT NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_topology_hostgroup PRIMARY KEY (id),
+  CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES ambari.topology_request(id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.topology_hostgroup TO :username;
 
@@ -721,7 +841,9 @@ CREATE TABLE ambari.topology_host_info (
   host_count INTEGER,
   predicate VARCHAR(2048),
   rack_info VARCHAR(255),
-  PRIMARY KEY (id)
+  CONSTRAINT PK_topology_host_info PRIMARY KEY (id),
+  CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES ambari.topology_hostgroup(id),
+  CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts(host_id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.topology_host_info TO :username;
 
@@ -729,7 +851,8 @@ CREATE TABLE ambari.topology_logical_request (
   id BIGINT NOT NULL,
   request_id BIGINT NOT NULL,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
+  CONSTRAINT PK_topology_logical_request PRIMARY KEY (id),
+  CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES ambari.topology_request(id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.topology_logical_request TO :username;
 
@@ -739,7 +862,9 @@ CREATE TABLE ambari.topology_host_request (
   group_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   host_name VARCHAR(255),
-  PRIMARY KEY (id)
+  CONSTRAINT PK_topology_host_request PRIMARY KEY (id),
+  CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES ambari.topology_hostgroup(id),
+  CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES ambari.topology_logical_request(id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.topology_host_request TO :username;
 
@@ -747,7 +872,8 @@ CREATE TABLE ambari.topology_host_task (
   id BIGINT NOT NULL,
   host_request_id BIGINT NOT NULL,
   type VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
+  CONSTRAINT PK_topology_host_task PRIMARY KEY (id),
+  CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES ambari.topology_host_request (id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.topology_host_task TO :username;
 
@@ -756,7 +882,9 @@ CREATE TABLE ambari.topology_logical_task (
   host_task_id BIGINT NOT NULL,
   physical_task_id BIGINT,
   component VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
+  CONSTRAINT PK_topology_logical_task PRIMARY KEY (id),
+  CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES ambari.topology_host_task (id),
+  CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES ambari.host_role_command (task_id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.topology_logical_task TO :username;
 
@@ -767,7 +895,7 @@ CREATE TABLE ambari.setting (
   content TEXT NOT NULL,
   updated_by VARCHAR(255) NOT NULL DEFAULT '_db',
   update_timestamp BIGINT NOT NULL,
-  PRIMARY KEY (id)
+  CONSTRAINT PK_setting PRIMARY KEY (id)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.setting TO :username;
 
@@ -785,7 +913,7 @@ CREATE TABLE ambari.upgrade (
   skip_sc_failures SMALLINT DEFAULT 0 NOT NULL,
   downgrade_allowed SMALLINT DEFAULT 1 NOT NULL,
   suspended SMALLINT DEFAULT 0 NOT NULL,
-  PRIMARY KEY (upgrade_id),
+  CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
   FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id),
   FOREIGN KEY (request_id) REFERENCES ambari.request(request_id)
 );
@@ -795,7 +923,7 @@ CREATE TABLE ambari.upgrade_group (
   upgrade_id BIGINT NOT NULL,
   group_name VARCHAR(255) DEFAULT '' NOT NULL,
   group_title VARCHAR(1024) DEFAULT '' NOT NULL,
-  PRIMARY KEY (upgrade_group_id),
+  CONSTRAINT PK_upgrade_group PRIMARY KEY (upgrade_group_id),
   FOREIGN KEY (upgrade_id) REFERENCES ambari.upgrade(upgrade_id)
 );
 
@@ -807,7 +935,7 @@ CREATE TABLE ambari.upgrade_item (
   hosts TEXT,
   tasks TEXT,
   item_text VARCHAR(1024),
-  PRIMARY KEY (upgrade_item_id),
+  CONSTRAINT PK_upgrade_item PRIMARY KEY (upgrade_item_id),
   FOREIGN KEY (upgrade_group_id) REFERENCES ambari.upgrade_group(upgrade_group_id)
 );
 
@@ -835,120 +963,27 @@ CREATE INDEX idx_hrc_request_id ON ambari.host_role_command (request_id);
 CREATE INDEX idx_hrc_status_role ON ambari.host_role_command (status, role);
 CREATE INDEX idx_rsc_request_id ON ambari.role_success_criteria (request_id);
 
---------altering tables by creating unique constraints----------
-ALTER TABLE ambari.users ADD CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type);
-ALTER TABLE ambari.clusterconfig ADD CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag);
-ALTER TABLE ambari.clusterconfig ADD CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version);
-ALTER TABLE ambari.hosts ADD CONSTRAINT UQ_hosts_host_name UNIQUE (host_name);
-ALTER TABLE ambari.viewinstance ADD CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name);
-ALTER TABLE ambari.viewinstance ADD CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name);
-ALTER TABLE ambari.serviceconfig ADD CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version);
-ALTER TABLE ambari.adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id);
-ALTER TABLE ambari.repo_version ADD CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name);
-ALTER TABLE ambari.repo_version ADD CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version);
-ALTER TABLE ambari.stack ADD CONSTRAINT unq_stack UNIQUE (stack_name, stack_version);
-
---------altering tables by creating foreign keys----------
--- Note, Oracle has a limitation of 32 chars in the FK name, and we should use the same FK name in all DB types.
-ALTER TABLE ambari.members ADD CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES ambari.groups (group_id);
-ALTER TABLE ambari.members ADD CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES ambari.users (user_id);
+-------- altering tables by creating foreign keys ----------
+-- #1: This should always be an exceptional case. FK constraints should be inlined in table definitions when possible
+--     (reorder table definitions if necessary).
+-- #2: Oracle has a limitation of 30 chars in the constraint names name, and we should use the same constraint names in all DB types.
 ALTER TABLE ambari.clusters ADD CONSTRAINT FK_clusters_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES ambari.upgrade (upgrade_id);
-ALTER TABLE ambari.clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
-ALTER TABLE ambari.clusterservices ADD CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
-ALTER TABLE ambari.clusterconfigmapping ADD CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
-ALTER TABLE ambari.clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
-ALTER TABLE ambari.cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
-ALTER TABLE ambari.cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES ambari.repo_version (repo_version_id);
-ALTER TABLE ambari.hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id);
-ALTER TABLE ambari.hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES ambari.servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE ambari.hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES ambari.servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE ambari.hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id);
-ALTER TABLE ambari.hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id);
-ALTER TABLE ambari.host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id);
-ALTER TABLE ambari.host_version ADD CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES ambari.repo_version (repo_version_id);
-ALTER TABLE ambari.servicecomponentdesiredstate ADD CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES ambari.clusterservices (service_name, cluster_id);
-ALTER TABLE ambari.servicedesiredstate ADD CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES ambari.clusterservices (service_name, cluster_id);
-ALTER TABLE ambari.execution_command ADD CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES ambari.host_role_command (task_id);
-ALTER TABLE ambari.host_role_command ADD CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES ambari.stage (stage_id, request_id);
-ALTER TABLE ambari.host_role_command ADD CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id);
-ALTER TABLE ambari.role_success_criteria ADD CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES ambari.stage (stage_id, request_id);
-ALTER TABLE ambari.stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES ambari.request (request_id);
-ALTER TABLE ambari.request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES ambari.requestschedule (schedule_id);
-ALTER TABLE ambari.ClusterHostMapping ADD CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
-ALTER TABLE ambari.ClusterHostMapping ADD CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id);
-ALTER TABLE ambari.hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
-ALTER TABLE ambari.hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id);
-ALTER TABLE ambari.configgroup ADD CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
-ALTER TABLE ambari.configgrouphostmapping ADD CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES ambari.configgroup (group_id);
-ALTER TABLE ambari.configgrouphostmapping ADD CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id);
-ALTER TABLE ambari.requestschedulebatchrequest ADD CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES ambari.requestschedule (schedule_id);
-ALTER TABLE ambari.hostgroup ADD CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES ambari.blueprint(blueprint_name);
-ALTER TABLE ambari.hostgroup_component ADD CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES ambari.hostgroup (blueprint_name, name);
-ALTER TABLE ambari.blueprint_configuration ADD CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES ambari.blueprint(blueprint_name);
-ALTER TABLE ambari.hostgroup_configuration ADD CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES ambari.hostgroup (blueprint_name, name);
-ALTER TABLE ambari.requestresourcefilter ADD CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES ambari.request (request_id);
-ALTER TABLE ambari.requestoperationlevel ADD CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES ambari.request (request_id);
-ALTER TABLE ambari.viewparameter ADD CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES ambari.viewmain(view_name);
-ALTER TABLE ambari.viewresource ADD CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES ambari.viewmain(view_name);
-ALTER TABLE ambari.viewinstance ADD CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES ambari.viewmain(view_name);
-ALTER TABLE ambari.viewinstanceproperty ADD CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES ambari.viewinstance(view_name, name);
-ALTER TABLE ambari.viewinstancedata ADD CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES ambari.viewinstance(view_instance_id, view_name, name);
-ALTER TABLE ambari.viewentity ADD CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES ambari.viewinstance(view_name, name);
-ALTER TABLE ambari.confgroupclusterconfigmapping ADD CONSTRAINT FK_confg FOREIGN KEY (version_tag, config_type, cluster_id) REFERENCES ambari.clusterconfig (version_tag, type_name, cluster_id);
-ALTER TABLE ambari.confgroupclusterconfigmapping ADD CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES ambari.configgroup (group_id);
-ALTER TABLE ambari.serviceconfigmapping ADD CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES ambari.serviceconfig(service_config_id);
-ALTER TABLE ambari.serviceconfigmapping ADD CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES ambari.clusterconfig(config_id);
-ALTER TABLE ambari.serviceconfighosts ADD CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES ambari.serviceconfig(service_config_id);
-ALTER TABLE ambari.serviceconfighosts ADD CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts(host_id);
-ALTER TABLE ambari.adminresource ADD CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES ambari.adminresourcetype(resource_type_id);
-ALTER TABLE ambari.adminprincipal ADD CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES ambari.adminprincipaltype(principal_type_id);
-ALTER TABLE ambari.adminpermission ADD CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES ambari.adminresourcetype(resource_type_id);
-ALTER TABLE ambari.permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES ambari.adminpermission(permission_id);
-ALTER TABLE ambari.permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES ambari.roleauthorization(authorization_id);
-ALTER TABLE ambari.adminprivilege ADD CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES ambari.adminpermission(permission_id);
-ALTER TABLE ambari.adminprivilege ADD CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES ambari.adminresource(resource_id);
-ALTER TABLE ambari.viewmain ADD CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES ambari.adminresourcetype(resource_type_id);
-ALTER TABLE ambari.viewinstance ADD CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES ambari.adminresource(resource_id);
-ALTER TABLE ambari.adminprivilege ADD CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES ambari.adminprincipal(principal_id);
-ALTER TABLE ambari.users ADD CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES ambari.adminprincipal(principal_id);
-ALTER TABLE ambari.groups ADD CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES ambari.adminprincipal(principal_id);
-ALTER TABLE ambari.clusters ADD CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES ambari.adminresource(resource_id);
-ALTER TABLE ambari.widget_layout_user_widget ADD CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES ambari.widget_layout(id);
-ALTER TABLE ambari.widget_layout_user_widget ADD CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES ambari.widget(id);
-ALTER TABLE ambari.topology_request ADD CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id);
-ALTER TABLE ambari.topology_hostgroup ADD CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES ambari.topology_request(id);
-ALTER TABLE ambari.topology_host_info ADD CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES ambari.topology_hostgroup(id);
-ALTER TABLE ambari.topology_host_info ADD CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts(host_id);
-ALTER TABLE ambari.topology_logical_request ADD CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES ambari.topology_request(id);
-ALTER TABLE ambari.topology_host_request ADD CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES ambari.topology_logical_request(id);
-ALTER TABLE ambari.topology_host_request ADD CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES ambari.topology_hostgroup(id);
-ALTER TABLE ambari.topology_host_task ADD CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES ambari.topology_host_request (id);
-ALTER TABLE ambari.topology_logical_task ADD CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES ambari.topology_host_task (id);
-ALTER TABLE ambari.topology_logical_task ADD CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES ambari.host_role_command (task_id);
-ALTER TABLE ambari.clusters ADD CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES ambari.stack(stack_id);
-ALTER TABLE ambari.clusterconfig ADD CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES ambari.stack(stack_id);
-ALTER TABLE ambari.serviceconfig ADD CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES ambari.stack(stack_id);
-ALTER TABLE ambari.clusterstate ADD CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES ambari.stack(stack_id);
-ALTER TABLE ambari.hostcomponentdesiredstate ADD CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES ambari.stack(stack_id);
-ALTER TABLE ambari.hostcomponentstate ADD CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES ambari.stack(stack_id);
-ALTER TABLE ambari.servicecomponentdesiredstate ADD CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES ambari.stack(stack_id);
-ALTER TABLE ambari.servicedesiredstate ADD CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES ambari.stack(stack_id);
-ALTER TABLE ambari.blueprint ADD CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES ambari.stack(stack_id);
-ALTER TABLE ambari.repo_version ADD CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES ambari.stack(stack_id);
 
 -- Kerberos
 CREATE TABLE ambari.kerberos_principal (
   principal_name VARCHAR(255) NOT NULL,
   is_service SMALLINT NOT NULL DEFAULT 1,
   cached_keytab_path VARCHAR(255),
-  PRIMARY KEY(principal_name)
+  CONSTRAINT PK_kerberos_principal PRIMARY KEY (principal_name)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.kerberos_principal TO :username;
 
 CREATE TABLE ambari.kerberos_principal_host (
   principal_name VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(principal_name, host_id)
+  CONSTRAINT PK_kerberos_principal_host PRIMARY KEY (principal_name, host_id),
+  CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id),
+  CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES ambari.kerberos_principal (principal_name)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.kerberos_principal_host TO :username;
 
@@ -956,12 +991,10 @@ CREATE TABLE ambari.kerberos_descriptor
 (
    kerberos_descriptor_name   VARCHAR(255) NOT NULL,
    kerberos_descriptor        TEXT NOT NULL,
-   PRIMARY KEY (kerberos_descriptor_name)
+   CONSTRAINT PK_kerberos_descriptor PRIMARY KEY (kerberos_descriptor_name)
 );
 GRANT ALL PRIVILEGES ON TABLE ambari.kerberos_descriptor TO :username;
 
-ALTER TABLE ambari.kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES ambari.hosts (host_id);
-ALTER TABLE ambari.kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES ambari.kerberos_principal (principal_name);
 -- Kerberos (end)
 
 -- Alerting Framework
@@ -983,7 +1016,7 @@ CREATE TABLE ambari.alert_definition (
   ignore_host SMALLINT DEFAULT 0 NOT NULL,
   repeat_tolerance INTEGER DEFAULT 1 NOT NULL,
   repeat_tolerance_enabled SMALLINT DEFAULT 0 NOT NULL,
-  PRIMARY KEY (definition_id),
+  CONSTRAINT PK_alert_definition PRIMARY KEY (definition_id),
   FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id),
   CONSTRAINT uni_alert_def_name UNIQUE(cluster_id,definition_name)
 );
@@ -1000,7 +1033,7 @@ CREATE TABLE ambari.alert_history (
   alert_label VARCHAR(1024),
   alert_state VARCHAR(255) NOT NULL,
   alert_text TEXT,
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_history PRIMARY KEY (alert_id),
   FOREIGN KEY (alert_definition_id) REFERENCES ambari.alert_definition(definition_id),
   FOREIGN KEY (cluster_id) REFERENCES ambari.clusters(cluster_id)
 );
@@ -1015,7 +1048,7 @@ CREATE TABLE ambari.alert_current (
   latest_text TEXT,
   occurrences BIGINT NOT NULL DEFAULT 1,
   firmness VARCHAR(255) NOT NULL DEFAULT 'HARD',
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_current PRIMARY KEY (alert_id),
   FOREIGN KEY (definition_id) REFERENCES ambari.alert_definition(definition_id),
   FOREIGN KEY (history_id) REFERENCES ambari.alert_history(alert_id)
 );
@@ -1026,7 +1059,7 @@ CREATE TABLE ambari.alert_group (
   group_name VARCHAR(255) NOT NULL,
   is_default SMALLINT NOT NULL DEFAULT 0,
   service_name VARCHAR(255),
-  PRIMARY KEY (group_id),
+  CONSTRAINT PK_alert_group PRIMARY KEY (group_id),
   CONSTRAINT uni_alert_group_name UNIQUE(cluster_id,group_name)
 );
 
@@ -1037,7 +1070,7 @@ CREATE TABLE ambari.alert_target (
   properties TEXT,
   description VARCHAR(1024),
   is_global SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY (target_id)
+  CONSTRAINT PK_alert_target PRIMARY KEY (target_id)
 );
 
 CREATE TABLE ambari.alert_target_states (
@@ -1049,7 +1082,7 @@ CREATE TABLE ambari.alert_target_states (
 CREATE TABLE ambari.alert_group_target (
   group_id BIGINT NOT NULL,
   target_id BIGINT NOT NULL,
-  PRIMARY KEY (group_id, target_id),
+  CONSTRAINT PK_alert_group_target PRIMARY KEY (group_id, target_id),
   FOREIGN KEY (group_id) REFERENCES ambari.alert_group(group_id),
   FOREIGN KEY (target_id) REFERENCES ambari.alert_target(target_id)
 );
@@ -1057,7 +1090,7 @@ CREATE TABLE ambari.alert_group_target (
 CREATE TABLE ambari.alert_grouping (
   definition_id BIGINT NOT NULL,
   group_id BIGINT NOT NULL,
-  PRIMARY KEY (group_id, definition_id),
+  CONSTRAINT PK_alert_grouping PRIMARY KEY (group_id, definition_id),
   FOREIGN KEY (definition_id) REFERENCES ambari.alert_definition(definition_id),
   FOREIGN KEY (group_id) REFERENCES ambari.alert_group(group_id)
 );
@@ -1068,7 +1101,7 @@ CREATE TABLE ambari.alert_notice (
   history_id BIGINT NOT NULL,
   notify_state VARCHAR(255) NOT NULL,
   uuid VARCHAR(64) NOT NULL UNIQUE,
-  PRIMARY KEY (notification_id),
+  CONSTRAINT PK_alert_notice PRIMARY KEY (notification_id),
   FOREIGN KEY (target_id) REFERENCES ambari.alert_target(target_id),
   FOREIGN KEY (history_id) REFERENCES ambari.alert_history(alert_id)
 );
@@ -1677,7 +1710,7 @@ CREATE TABLE workflow (
   numJobsTotal     INTEGER, numJobsCompleted INTEGER,
   inputBytes       BIGINT, outputBytes BIGINT,
   duration         BIGINT,
-  PRIMARY KEY (workflowId),
+  CONSTRAINT PK_workflow PRIMARY KEY (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow (workflowId) ON DELETE CASCADE
 );
 GRANT ALL PRIVILEGES ON TABLE workflow TO "mapred";
@@ -1692,7 +1725,7 @@ CREATE TABLE job (
   mapsRuntime  BIGINT, reducesRuntime BIGINT,
   mapCounters  TEXT, reduceCounters TEXT, jobCounters TEXT,
   inputBytes   BIGINT, outputBytes BIGINT,
-  PRIMARY KEY (jobId),
+  CONSTRAINT PK_job PRIMARY KEY (jobId),
   FOREIGN KEY (workflowId) REFERENCES workflow (workflowId) ON DELETE CASCADE
 );
 GRANT ALL PRIVILEGES ON TABLE job TO "mapred";
@@ -1701,7 +1734,7 @@ CREATE TABLE task (
   taskId        TEXT, jobId TEXT, taskType TEXT, splits TEXT,
   startTime     BIGINT, finishTime BIGINT, status TEXT, error TEXT, counters TEXT,
   failedAttempt TEXT,
-  PRIMARY KEY (taskId),
+  CONSTRAINT PK_task PRIMARY KEY (taskId),
   FOREIGN KEY (jobId) REFERENCES job (jobId) ON DELETE CASCADE
 );
 GRANT ALL PRIVILEGES ON TABLE task TO "mapred";
@@ -1713,7 +1746,7 @@ CREATE TABLE taskAttempt (
   locality      TEXT, avataar TEXT,
   status        TEXT, error TEXT, counters TEXT,
   inputBytes    BIGINT, outputBytes BIGINT,
-  PRIMARY KEY (taskAttemptId),
+  CONSTRAINT PK_taskAttempt PRIMARY KEY (taskAttemptId),
   FOREIGN KEY (jobId) REFERENCES job (jobId) ON DELETE CASCADE,
   FOREIGN KEY (taskId) REFERENCES task (taskId) ON DELETE CASCADE
 );


[5/8] ambari git commit: AMBARI-15915. SQL constraints: Inline constraints and name them in CREATE table. (Balazs Bence Sari via stoader)

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/346dfe7e/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index 870a8e8..f18cdec 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -21,8 +21,19 @@ CREATE TABLE stack(
   stack_id BIGINT NOT NULL,
   stack_name VARCHAR(255) NOT NULL,
   stack_version VARCHAR(255) NOT NULL,
-  PRIMARY KEY (stack_id)
-);
+  CONSTRAINT PK_stack PRIMARY KEY (stack_id),
+  CONSTRAINT unq_stack UNIQUE (stack_name, stack_version));
+
+CREATE TABLE adminresourcetype (
+  resource_type_id INTEGER NOT NULL,
+  resource_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminresourcetype PRIMARY KEY (resource_type_id));
+
+CREATE TABLE adminresource (
+  resource_id BIGINT NOT NULL,
+  resource_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminresource PRIMARY KEY (resource_id),
+  CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE clusters (
   cluster_id BIGINT NOT NULL,
@@ -34,8 +45,9 @@ CREATE TABLE clusters (
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   desired_cluster_state VARCHAR(255) NOT NULL,
   desired_stack_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusters PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE clusterconfig (
   config_id BIGINT NOT NULL,
@@ -47,8 +59,11 @@ CREATE TABLE clusterconfig (
   config_data TEXT NOT NULL,
   config_attributes TEXT,
   create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY (config_id)
-);
+  CONSTRAINT PK_clusterconfig PRIMARY KEY (config_id),
+  CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag),
+  CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version));
 
 CREATE TABLE clusterconfigmapping (
   cluster_id BIGINT NOT NULL,
@@ -57,7 +72,8 @@ CREATE TABLE clusterconfigmapping (
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (cluster_id, type_name, create_timestamp));
+  CONSTRAINT PK_clusterconfigmapping PRIMARY KEY (cluster_id, type_name, create_timestamp),
+  CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE serviceconfig (
   service_config_id BIGINT NOT NULL,
@@ -69,31 +85,74 @@ CREATE TABLE serviceconfig (
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   group_id BIGINT,
   note TEXT,
-  PRIMARY KEY (service_config_id)
-);
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version));
+
+CREATE TABLE hosts (
+  host_id BIGINT NOT NULL,
+  host_name VARCHAR(255) NOT NULL,
+  cpu_count INTEGER NOT NULL,
+  ph_cpu_count INTEGER,
+  cpu_info VARCHAR(255) NOT NULL,
+  discovery_status VARCHAR(2000) NOT NULL,
+  host_attributes VARCHAR(20000) NOT NULL,
+  ipv4 VARCHAR(255),
+  ipv6 VARCHAR(255),
+  public_host_name VARCHAR(255),
+  last_registration_time BIGINT NOT NULL,
+  os_arch VARCHAR(255) NOT NULL,
+  os_info VARCHAR(1000) NOT NULL,
+  os_type VARCHAR(255) NOT NULL,
+  rack_info VARCHAR(255) NOT NULL,
+  total_mem BIGINT NOT NULL,
+  CONSTRAINT PK_hosts PRIMARY KEY (host_id),
+  CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
 CREATE TABLE serviceconfighosts (
   service_config_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(service_config_id, host_id));
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE serviceconfigmapping (
   service_config_id BIGINT NOT NULL,
   config_id BIGINT NOT NULL,
-  PRIMARY KEY(service_config_id, config_id));
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE clusterservices (
   service_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
   service_enabled INTEGER NOT NULL,
-  PRIMARY KEY (service_name, cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
   current_stack_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusterstate PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id));
+
+CREATE TABLE repo_version (
+  repo_version_id BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  version VARCHAR(255) NOT NULL,
+  display_name VARCHAR(128) NOT NULL,
+  repositories TEXT NOT NULL,
+  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  version_url VARCHAR(1024),
+  version_xml TEXT,
+  version_xsd VARCHAR(512),
+  parent_id BIGINT,
+  CONSTRAINT PK_repo_version PRIMARY KEY (repo_version_id),
+  CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
+  CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
 
 CREATE TABLE cluster_version (
   id BIGINT NOT NULL,
@@ -103,7 +162,23 @@ CREATE TABLE cluster_version (
   start_time BIGINT NOT NULL,
   end_time BIGINT,
   user_name VARCHAR(32),
-  PRIMARY KEY (id));
+  CONSTRAINT PK_cluster_version PRIMARY KEY (id),
+  CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
+
+CREATE TABLE servicecomponentdesiredstate (
+  id BIGINT NOT NULL,
+  component_name VARCHAR(255) NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  desired_stack_id BIGINT NOT NULL,
+  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
+  desired_state VARCHAR(255) NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
+  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
+  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
+  CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   cluster_id BIGINT NOT NULL,
@@ -116,8 +191,10 @@ CREATE TABLE hostcomponentdesiredstate (
   maintenance_state VARCHAR(32) NOT NULL,
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
   restart_required SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY (cluster_id, component_name, host_id, service_name)
-);
+  CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (cluster_id, component_name, host_id, service_name),
+  CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE TABLE hostcomponentstate (
   id BIGINT NOT NULL,
@@ -130,30 +207,13 @@ CREATE TABLE hostcomponentstate (
   service_name VARCHAR(255) NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id)
-);
+  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id),
+  CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, component_name, service_name, cluster_id);
 
-CREATE TABLE hosts (
-  host_id BIGINT NOT NULL,
-  host_name VARCHAR(255) NOT NULL,
-  cpu_count INTEGER NOT NULL,
-  ph_cpu_count INTEGER,
-  cpu_info VARCHAR(255) NOT NULL,
-  discovery_status VARCHAR(2000) NOT NULL,
-  host_attributes VARCHAR(20000) NOT NULL,
-  ipv4 VARCHAR(255),
-  ipv6 VARCHAR(255),
-  public_host_name VARCHAR(255),
-  last_registration_time BIGINT NOT NULL,
-  os_arch VARCHAR(255) NOT NULL,
-  os_info VARCHAR(1000) NOT NULL,
-  os_type VARCHAR(255) NOT NULL,
-  rack_info VARCHAR(255) NOT NULL,
-  total_mem BIGINT NOT NULL,
-  PRIMARY KEY (host_id));
-
 CREATE TABLE hoststate (
   agent_version VARCHAR(255) NOT NULL,
   available_mem BIGINT NOT NULL,
@@ -162,27 +222,17 @@ CREATE TABLE hoststate (
   host_id BIGINT NOT NULL,
   time_in_state BIGINT NOT NULL,
   maintenance_state VARCHAR(512),
-  PRIMARY KEY (host_id));
+  CONSTRAINT PK_hoststate PRIMARY KEY (host_id),
+  CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE host_version (
   id BIGINT NOT NULL,
   repo_version_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
   state VARCHAR(32) NOT NULL,
-  PRIMARY KEY (id));
-
-CREATE TABLE servicecomponentdesiredstate (
-  id BIGINT NOT NULL,
-  component_name VARCHAR(255) NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  desired_stack_id BIGINT NOT NULL,
-  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
-  desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id)
-);
+  CONSTRAINT PK_host_version PRIMARY KEY (id),
+  CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
 
 CREATE TABLE servicedesiredstate (
   cluster_id BIGINT NOT NULL,
@@ -192,8 +242,20 @@ CREATE TABLE servicedesiredstate (
   service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL,
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  PRIMARY KEY (cluster_id, service_name)
-);
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+
+CREATE TABLE adminprincipaltype (
+  principal_type_id INTEGER NOT NULL,
+  principal_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminprincipaltype PRIMARY KEY (principal_type_id));
+
+CREATE TABLE adminprincipal (
+  principal_id BIGINT NOT NULL,
+  principal_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminprincipal PRIMARY KEY (principal_id),
+  CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id));
 
 CREATE TABLE users (
   user_id INTEGER,
@@ -205,27 +267,79 @@ CREATE TABLE users (
   user_password VARCHAR(255),
   active INTEGER NOT NULL DEFAULT 1,
   active_widget_layouts VARCHAR(1024) DEFAULT NULL,
-  PRIMARY KEY (user_id));
+  CONSTRAINT PK_users PRIMARY KEY (user_id),
+  CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type));
 
 CREATE TABLE groups (
   group_id INTEGER,
   principal_id BIGINT NOT NULL,
   group_name VARCHAR(255) NOT NULL,
   ldap_group INTEGER NOT NULL DEFAULT 0,
-  PRIMARY KEY (group_id),
-  UNIQUE (ldap_group, group_name));
+  CONSTRAINT PK_groups PRIMARY KEY (group_id),
+  UNIQUE (ldap_group, group_name),
+  CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id));
 
 CREATE TABLE members (
   member_id INTEGER,
   group_id INTEGER NOT NULL,
   user_id INTEGER NOT NULL,
-  PRIMARY KEY (member_id),
-  UNIQUE(group_id, user_id));
+  CONSTRAINT PK_members PRIMARY KEY (member_id),
+  UNIQUE(group_id, user_id),
+  CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id),
+  CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id));
 
-CREATE TABLE execution_command (
-  command BYTEA,
-  task_id BIGINT NOT NULL,
-  PRIMARY KEY (task_id));
+CREATE TABLE requestschedule (
+  schedule_id bigint,
+  cluster_id bigint NOT NULL,
+  description varchar(255),
+  status varchar(255),
+  batch_separation_seconds smallint,
+  batch_toleration_limit smallint,
+  create_user varchar(255),
+  create_timestamp bigint,
+  update_user varchar(255),
+  update_timestamp bigint,
+  minutes varchar(10),
+  hours varchar(10),
+  days_of_month varchar(10),
+  month varchar(10),
+  day_of_week varchar(10),
+  yearToSchedule varchar(10),
+  startTime varchar(50),
+  endTime varchar(50),
+  last_execution_status varchar(255),
+  CONSTRAINT PK_requestschedule PRIMARY KEY (schedule_id));
+
+CREATE TABLE request (
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT,
+  command_name VARCHAR(255),
+  create_time BIGINT NOT NULL,
+  end_time BIGINT NOT NULL,
+  exclusive_execution SMALLINT NOT NULL DEFAULT 0,
+  inputs BYTEA,
+  request_context VARCHAR(255),
+  request_type VARCHAR(255),
+  request_schedule_id BIGINT,
+  start_time BIGINT NOT NULL,
+  status VARCHAR(255),
+  CONSTRAINT PK_request PRIMARY KEY (request_id),
+  CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id));
+
+CREATE TABLE stage (
+  stage_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  skippable SMALLINT DEFAULT 0 NOT NULL,
+  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
+  log_info VARCHAR(255) NOT NULL,
+  request_context VARCHAR(255),
+  cluster_host_info BYTEA NOT NULL,
+  command_params BYTEA,
+  host_params BYTEA,
+  CONSTRAINT PK_stage PRIMARY KEY (stage_id, request_id),
+  CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE host_role_command (
   task_id BIGINT NOT NULL,
@@ -251,42 +365,23 @@ CREATE TABLE host_role_command (
   role_command VARCHAR(255),
   command_detail VARCHAR(255),
   custom_command_name VARCHAR(255),
-  PRIMARY KEY (task_id));
+  CONSTRAINT PK_host_role_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
+
+CREATE TABLE execution_command (
+  command BYTEA,
+  task_id BIGINT NOT NULL,
+  CONSTRAINT PK_execution_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE role_success_criteria (
   role VARCHAR(255) NOT NULL,
   request_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   success_factor FLOAT NOT NULL,
-  PRIMARY KEY (role, request_id, stage_id));
-
-CREATE TABLE stage (
-  stage_id BIGINT NOT NULL,
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  skippable SMALLINT DEFAULT 0 NOT NULL,
-  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
-  log_info VARCHAR(255) NOT NULL,
-  request_context VARCHAR(255),
-  cluster_host_info BYTEA NOT NULL,
-  command_params BYTEA,
-  host_params BYTEA,
-  PRIMARY KEY (stage_id, request_id));
-
-CREATE TABLE request (
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT,
-  command_name VARCHAR(255),
-  create_time BIGINT NOT NULL,
-  end_time BIGINT NOT NULL,
-  exclusive_execution SMALLINT NOT NULL DEFAULT 0,
-  inputs BYTEA,
-  request_context VARCHAR(255),
-  request_type VARCHAR(255),
-  request_schedule_id BIGINT,
-  start_time BIGINT NOT NULL,
-  status VARCHAR(255),
-  PRIMARY KEY (request_id));
+  CONSTRAINT PK_role_success_criteria PRIMARY KEY (role, request_id, stage_id),
+  CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
 
 CREATE TABLE requestresourcefilter (
   filter_id BIGINT NOT NULL,
@@ -294,7 +389,8 @@ CREATE TABLE requestresourcefilter (
   service_name VARCHAR(255),
   component_name VARCHAR(255),
   hosts BYTEA,
-  PRIMARY KEY (filter_id));
+  CONSTRAINT PK_requestresourcefilter PRIMARY KEY (filter_id),
+  CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE requestoperationlevel (
   operation_level_id BIGINT NOT NULL,
@@ -304,17 +400,20 @@ CREATE TABLE requestoperationlevel (
   service_name VARCHAR(255),
   host_component_name VARCHAR(255),
   host_id BIGINT NULL,      -- unlike most host_id columns, this one allows NULLs because the request can be at the service level
-  PRIMARY KEY (operation_level_id));
+  CONSTRAINT PK_requestoperationlevel PRIMARY KEY (operation_level_id),
+  CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE ClusterHostMapping (
   cluster_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id, host_id));
+  CONSTRAINT PK_ClusterHostMapping PRIMARY KEY (cluster_id, host_id),
+  CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE key_value_store (
   "key" VARCHAR(255),
   "value" VARCHAR,
-  PRIMARY KEY ("key"));
+  CONSTRAINT PK_key_value_store PRIMARY KEY ("key"));
 
 CREATE TABLE hostconfigmapping (
   cluster_id BIGINT NOT NULL,
@@ -325,16 +424,19 @@ CREATE TABLE hostconfigmapping (
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (cluster_id, host_id, type_name, create_timestamp));
+  CONSTRAINT PK_hostconfigmapping PRIMARY KEY (cluster_id, host_id, type_name, create_timestamp),
+  CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE metainfo (
   "metainfo_key" VARCHAR(255),
   "metainfo_value" VARCHAR,
-  PRIMARY KEY ("metainfo_key"));
+  CONSTRAINT PK_metainfo PRIMARY KEY ("metainfo_key"));
 
 CREATE TABLE ambari_sequences (
-  sequence_name VARCHAR(255) PRIMARY KEY,
-  sequence_value BIGINT NOT NULL);
+  sequence_name VARCHAR(255),
+  sequence_value BIGINT NOT NULL,
+  CONSTRAINT PK_ambari_sequences PRIMARY KEY (sequence_name));
 
 CREATE TABLE configgroup (
   group_id BIGINT,
@@ -344,7 +446,8 @@ CREATE TABLE configgroup (
   description VARCHAR(1024),
   create_timestamp BIGINT NOT NULL,
   service_name VARCHAR(255),
-  PRIMARY KEY(group_id));
+  CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (
   config_group_id BIGINT NOT NULL,
@@ -353,34 +456,16 @@ CREATE TABLE confgroupclusterconfigmapping (
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) DEFAULT '_db',
   create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY(config_group_id, cluster_id, config_type));
+  CONSTRAINT PK_confgroupclustercfgmapping PRIMARY KEY (config_group_id, cluster_id, config_type),
+  CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_confg FOREIGN KEY (version_tag, config_type, cluster_id) REFERENCES clusterconfig (version_tag, type_name, cluster_id));
 
 CREATE TABLE configgrouphostmapping (
   config_group_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(config_group_id, host_id));
-
-CREATE TABLE requestschedule (
-  schedule_id bigint,
-  cluster_id bigint NOT NULL,
-  description varchar(255),
-  status varchar(255),
-  batch_separation_seconds smallint,
-  batch_toleration_limit smallint,
-  create_user varchar(255),
-  create_timestamp bigint,
-  update_user varchar(255),
-  update_timestamp bigint,
-  minutes varchar(10),
-  hours varchar(10),
-  days_of_month varchar(10),
-  month varchar(10),
-  day_of_week varchar(10),
-  yearToSchedule varchar(10),
-  startTime varchar(50),
-  endTime varchar(50),
-  last_execution_status varchar(255),
-  PRIMARY KEY(schedule_id));
+  CONSTRAINT PK_configgrouphostmapping PRIMARY KEY (config_group_id, host_id),
+  CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE requestschedulebatchrequest (
   schedule_id bigint,
@@ -392,35 +477,39 @@ CREATE TABLE requestschedulebatchrequest (
   request_status varchar(255),
   return_code smallint,
   return_message varchar(20000),
-  PRIMARY KEY(schedule_id, batch_id));
+  CONSTRAINT PK_requestschedulebatchrequest PRIMARY KEY (schedule_id, batch_id),
+  CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id));
 
 CREATE TABLE blueprint (
   blueprint_name VARCHAR(255) NOT NULL,
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_descriptor_reference VARCHAR(255),
   stack_id BIGINT NOT NULL,
-  PRIMARY KEY(blueprint_name)
-);
+  CONSTRAINT PK_blueprint PRIMARY KEY (blueprint_name),
+  CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id));
 
 CREATE TABLE hostgroup (
   blueprint_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   cardinality VARCHAR(255) NOT NULL,
-  PRIMARY KEY(blueprint_name, name));
+  CONSTRAINT PK_hostgroup PRIMARY KEY (blueprint_name, name),
+  CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE hostgroup_component (
   blueprint_name VARCHAR(255) NOT NULL,
   hostgroup_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   provision_action VARCHAR(255),
-  PRIMARY KEY(blueprint_name, hostgroup_name, name));
+  CONSTRAINT PK_hostgroup_component PRIMARY KEY (blueprint_name, hostgroup_name, name),
+  CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name));
 
 CREATE TABLE blueprint_configuration (
   blueprint_name varchar(255) NOT NULL,
   type_name varchar(255) NOT NULL,
   config_data TEXT NOT NULL,
   config_attributes TEXT,
-  PRIMARY KEY(blueprint_name, type_name));
+  CONSTRAINT PK_blueprint_configuration PRIMARY KEY (blueprint_name, type_name),
+  CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE blueprint_setting (
   id BIGINT NOT NULL,
@@ -437,7 +526,8 @@ CREATE TABLE hostgroup_configuration (
   type_name VARCHAR(255) NOT NULL,
   config_data TEXT NOT NULL,
   config_attributes TEXT,
-  PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
+  CONSTRAINT PK_hostgroup_configuration PRIMARY KEY (blueprint_name, hostgroup_name, type_name),
+  CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name));
 
 CREATE TABLE viewmain (
   view_name VARCHAR(255) NOT NULL,
@@ -451,16 +541,8 @@ CREATE TABLE viewmain (
   archive VARCHAR(255),
   mask VARCHAR(255),
   system_view SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY(view_name));
-
-CREATE TABLE viewinstancedata (
-  view_instance_id BIGINT,
-  view_name VARCHAR(255) NOT NULL,
-  view_instance_name VARCHAR(255) NOT NULL,
-  name VARCHAR(255) NOT NULL,
-  user_name VARCHAR(255) NOT NULL,
-  value VARCHAR(2000),
-  PRIMARY KEY(view_instance_id, name, user_name));
+  CONSTRAINT PK_viewmain PRIMARY KEY (view_name),
+  CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE viewinstance (
   view_instance_id BIGINT,
@@ -476,14 +558,29 @@ CREATE TABLE viewinstance (
   alter_names SMALLINT NOT NULL DEFAULT 1,
   cluster_handle VARCHAR(255),
   short_url VARCHAR (255),
-  PRIMARY KEY(view_instance_id));
+  CONSTRAINT PK_viewinstance PRIMARY KEY (view_instance_id),
+  CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name),
+  CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id),
+  CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name),
+  CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name));
+
+CREATE TABLE viewinstancedata (
+  view_instance_id BIGINT,
+  view_name VARCHAR(255) NOT NULL,
+  view_instance_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) NOT NULL,
+  value VARCHAR(2000),
+  CONSTRAINT PK_viewinstancedata PRIMARY KEY (view_instance_id, name, user_name),
+  CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name));
 
 CREATE TABLE viewinstanceproperty (
   view_name VARCHAR(255) NOT NULL,
   view_instance_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   value VARCHAR(2000),
-  PRIMARY KEY(view_name, view_instance_name, name));
+  CONSTRAINT PK_viewinstanceproperty PRIMARY KEY (view_name, view_instance_name, name),
+  CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE viewparameter (
   view_name VARCHAR(255) NOT NULL,
@@ -495,7 +592,8 @@ CREATE TABLE viewparameter (
   cluster_config VARCHAR(255),
   required CHAR(1),
   masked CHAR(1),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewparameter PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewresource (
   view_name VARCHAR(255) NOT NULL,
@@ -506,7 +604,8 @@ CREATE TABLE viewresource (
   provider VARCHAR(255),
   service VARCHAR(255),
   resource VARCHAR(255),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewresource PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewentity (
   id BIGINT NOT NULL,
@@ -514,27 +613,8 @@ CREATE TABLE viewentity (
   view_instance_name VARCHAR(255) NOT NULL,
   class_name VARCHAR(255) NOT NULL,
   id_property VARCHAR(255),
-  PRIMARY KEY(id));
-
-CREATE TABLE adminresourcetype (
-  resource_type_id INTEGER NOT NULL,
-  resource_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(resource_type_id));
-
-CREATE TABLE adminresource (
-  resource_id BIGINT NOT NULL,
-  resource_type_id INTEGER NOT NULL,
-  PRIMARY KEY(resource_id));
-
-CREATE TABLE adminprincipaltype (
-  principal_type_id INTEGER NOT NULL,
-  principal_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(principal_type_id));
-
-CREATE TABLE adminprincipal (
-  principal_id BIGINT NOT NULL,
-  principal_type_id INTEGER NOT NULL,
-  PRIMARY KEY(principal_id));
+  CONSTRAINT PK_viewentity PRIMARY KEY (id),
+  CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE adminpermission (
   permission_id BIGINT NOT NULL,
@@ -542,39 +622,31 @@ CREATE TABLE adminpermission (
   resource_type_id INTEGER NOT NULL,
   permission_label VARCHAR(255),
   sort_order SMALLINT NOT NULL DEFAULT 1,
-  PRIMARY KEY(permission_id));
+  CONSTRAINT PK_adminpermission PRIMARY KEY (permission_id),
+  CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id),
+  CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id));
 
 CREATE TABLE roleauthorization (
   authorization_id VARCHAR(100) NOT NULL,
   authorization_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(authorization_id));
+  CONSTRAINT PK_roleauthorization PRIMARY KEY (authorization_id));
 
 CREATE TABLE permission_roleauthorization (
   permission_id BIGINT NOT NULL,
   authorization_id VARCHAR(100) NOT NULL,
-  PRIMARY KEY(permission_id, authorization_id));
+  CONSTRAINT PK_permsn_roleauthorization PRIMARY KEY (permission_id, authorization_id),
+  CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id),
+  CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id));
 
 CREATE TABLE adminprivilege (
   privilege_id BIGINT,
   permission_id BIGINT NOT NULL,
   resource_id BIGINT NOT NULL,
   principal_id BIGINT NOT NULL,
-  PRIMARY KEY(privilege_id));
-
-
-CREATE TABLE repo_version (
-  repo_version_id BIGINT NOT NULL,
-  stack_id BIGINT NOT NULL,
-  version VARCHAR(255) NOT NULL,
-  display_name VARCHAR(128) NOT NULL,
-  repositories TEXT NOT NULL,
-  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
-  version_url VARCHAR(1024),
-  version_xml TEXT,
-  version_xsd VARCHAR(512),
-  parent_id BIGINT,
-  PRIMARY KEY(repo_version_id)
-);
+  CONSTRAINT PK_adminprivilege PRIMARY KEY (privilege_id),
+  CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id),
+  CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE widget (
   id BIGINT NOT NULL,
@@ -589,7 +661,7 @@ CREATE TABLE widget (
   widget_values TEXT,
   properties TEXT,
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout (
@@ -600,21 +672,22 @@ CREATE TABLE widget_layout (
   user_name VARCHAR(255) NOT NULL,
   display_name VARCHAR(255),
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget_layout PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout_user_widget (
   widget_layout_id BIGINT NOT NULL,
   widget_id BIGINT NOT NULL,
   widget_order smallint,
-  PRIMARY KEY(widget_layout_id, widget_id)
-);
+  CONSTRAINT PK_widget_layout_user_widget PRIMARY KEY (widget_layout_id, widget_id),
+  CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id),
+  CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id));
 
 CREATE TABLE artifact (
   artifact_name VARCHAR(255) NOT NULL,
   artifact_data TEXT NOT NULL,
   foreign_keys VARCHAR(255) NOT NULL,
-  PRIMARY KEY (artifact_name, foreign_keys));
+  CONSTRAINT PK_artifact PRIMARY KEY (artifact_name, foreign_keys));
 
 CREATE TABLE topology_request (
   id BIGINT NOT NULL,
@@ -624,8 +697,8 @@ CREATE TABLE topology_request (
   cluster_properties TEXT,
   cluster_attributes TEXT,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_request PRIMARY KEY (id),
+  CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id));
 
 CREATE TABLE topology_hostgroup (
   id BIGINT NOT NULL,
@@ -633,8 +706,8 @@ CREATE TABLE topology_hostgroup (
   group_properties TEXT,
   group_attributes TEXT,
   request_id BIGINT NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_hostgroup PRIMARY KEY (id),
+  CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_info (
   id BIGINT NOT NULL,
@@ -644,15 +717,16 @@ CREATE TABLE topology_host_info (
   host_count INTEGER,
   predicate VARCHAR(2048),
   rack_info VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_info PRIMARY KEY (id),
+  CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id));
 
 CREATE TABLE topology_logical_request (
   id BIGINT NOT NULL,
   request_id BIGINT NOT NULL,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_request PRIMARY KEY (id),
+  CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_request (
   id BIGINT NOT NULL,
@@ -660,23 +734,25 @@ CREATE TABLE topology_host_request (
   group_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   host_name VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_request PRIMARY KEY (id),
+  CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id));
 
 CREATE TABLE topology_host_task (
   id BIGINT NOT NULL,
   host_request_id BIGINT NOT NULL,
   type VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_task PRIMARY KEY (id),
+  CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id));
 
 CREATE TABLE topology_logical_task (
   id BIGINT NOT NULL,
   host_task_id BIGINT NOT NULL,
   physical_task_id BIGINT,
   component VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_task PRIMARY KEY (id),
+  CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id),
+  CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE setting (
   id BIGINT NOT NULL,
@@ -685,8 +761,7 @@ CREATE TABLE setting (
   content TEXT NOT NULL,
   updated_by VARCHAR(255) NOT NULL DEFAULT '_db',
   update_timestamp BIGINT NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_setting PRIMARY KEY (id));
 
 
 -- upgrade tables
@@ -703,7 +778,7 @@ CREATE TABLE upgrade (
   skip_sc_failures SMALLINT DEFAULT 0 NOT NULL,
   downgrade_allowed SMALLINT DEFAULT 1 NOT NULL,
   suspended SMALLINT DEFAULT 0 NOT NULL,
-  PRIMARY KEY (upgrade_id),
+  CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
@@ -713,7 +788,7 @@ CREATE TABLE upgrade_group (
   upgrade_id BIGINT NOT NULL,
   group_name VARCHAR(255) DEFAULT '' NOT NULL,
   group_title VARCHAR(1024) DEFAULT '' NOT NULL,
-  PRIMARY KEY (upgrade_group_id),
+  CONSTRAINT PK_upgrade_group PRIMARY KEY (upgrade_group_id),
   FOREIGN KEY (upgrade_id) REFERENCES upgrade(upgrade_id)
 );
 
@@ -725,7 +800,7 @@ CREATE TABLE upgrade_item (
   hosts TEXT,
   tasks TEXT,
   item_text VARCHAR(1024),
-  PRIMARY KEY (upgrade_item_id),
+  CONSTRAINT PK_upgrade_item PRIMARY KEY (upgrade_item_id),
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
@@ -742,139 +817,37 @@ CREATE TABLE servicecomponent_history(
   CONSTRAINT FK_sc_history_to_stack_id FOREIGN KEY (to_stack_id) REFERENCES stack (stack_id)
 );
 
-
 -- tasks indices --
 CREATE INDEX idx_stage_request_id ON stage (request_id);
 CREATE INDEX idx_hrc_request_id ON host_role_command (request_id);
 CREATE INDEX idx_hrc_status_role ON host_role_command (status, role);
 CREATE INDEX idx_rsc_request_id ON role_success_criteria (request_id);
 
-
-
---------altering tables by creating unique constraints----------
-ALTER TABLE users ADD CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version);
-ALTER TABLE hosts ADD CONSTRAINT UQ_hosts_host_name UNIQUE (host_name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name);
-ALTER TABLE serviceconfig ADD CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version);
-ALTER TABLE adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version);
-ALTER TABLE stack ADD CONSTRAINT unq_stack UNIQUE (stack_name, stack_version);
-
---------altering tables by creating foreign keys----------
--- Note, Oracle has a limitation of 32 chars in the FK name, and we should use the same FK name in all DB types.
-ALTER TABLE members ADD CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id);
-ALTER TABLE members ADD CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id);
+-------- altering tables by creating foreign keys ----------
+-- #1: This should always be an exceptional case. FK constraints should be inlined in table definitions when possible
+--     (reorder table definitions if necessary).
+-- #2: Oracle has a limitation of 30 chars in the constraint names name, and we should use the same constraint names in all DB types.
 ALTER TABLE clusters ADD CONSTRAINT FK_clusters_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterservices ADD CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterconfigmapping ADD CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE execution_command ADD CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE role_success_criteria ADD CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE configgroup ADD CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_confg FOREIGN KEY (version_tag, config_type, cluster_id) REFERENCES clusterconfig (version_tag, type_name, cluster_id);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE requestschedulebatchrequest ADD CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE hostgroup ADD CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_component ADD CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
-ALTER TABLE blueprint_configuration ADD CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_configuration ADD CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
-ALTER TABLE requestresourcefilter ADD CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE requestoperationlevel ADD CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE viewparameter ADD CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewresource ADD CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstanceproperty ADD CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE viewinstancedata ADD CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name);
-ALTER TABLE viewentity ADD CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE adminresource ADD CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE adminprincipal ADD CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id);
-ALTER TABLE adminpermission ADD CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE viewmain ADD CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE users ADD CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE groups ADD CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id);
-ALTER TABLE topology_request ADD CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id);
-ALTER TABLE topology_hostgroup ADD CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE topology_logical_request ADD CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_task ADD CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE serviceconfig ADD CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE blueprint ADD CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE repo_version ADD CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
 
 -- Kerberos
 CREATE TABLE kerberos_principal (
   principal_name VARCHAR(255) NOT NULL,
   is_service SMALLINT NOT NULL DEFAULT 1,
   cached_keytab_path VARCHAR(255),
-  PRIMARY KEY(principal_name)
-);
+  CONSTRAINT PK_kerberos_principal PRIMARY KEY (principal_name));
 
 CREATE TABLE kerberos_principal_host (
   principal_name VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(principal_name, host_id)
-);
+  CONSTRAINT PK_kerberos_principal_host PRIMARY KEY (principal_name, host_id),
+  CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name));
 
-CREATE TABLE kerberos_descriptor
-(
+CREATE TABLE kerberos_descriptor(
    kerberos_descriptor_name   VARCHAR(255) NOT NULL,
    kerberos_descriptor        TEXT NOT NULL,
-   PRIMARY KEY (kerberos_descriptor_name)
-);
+   CONSTRAINT PK_kerberos_descriptor PRIMARY KEY (kerberos_descriptor_name));
 
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name);
 -- Kerberos (end)
 
 -- Alerting Framework
@@ -896,7 +869,7 @@ CREATE TABLE alert_definition (
   ignore_host SMALLINT DEFAULT 0 NOT NULL,
   repeat_tolerance INTEGER DEFAULT 1 NOT NULL,
   repeat_tolerance_enabled SMALLINT DEFAULT 0 NOT NULL,
-  PRIMARY KEY (definition_id),
+  CONSTRAINT PK_alert_definition PRIMARY KEY (definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   CONSTRAINT uni_alert_def_name UNIQUE(cluster_id,definition_name)
 );
@@ -913,7 +886,7 @@ CREATE TABLE alert_history (
   alert_label VARCHAR(1024),
   alert_state VARCHAR(255) NOT NULL,
   alert_text TEXT,
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_history PRIMARY KEY (alert_id),
   FOREIGN KEY (alert_definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
 );
@@ -928,7 +901,7 @@ CREATE TABLE alert_current (
   latest_text TEXT,
   occurrences BIGINT NOT NULL DEFAULT 1,
   firmness VARCHAR(255) NOT NULL DEFAULT 'HARD',
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_current PRIMARY KEY (alert_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -939,7 +912,7 @@ CREATE TABLE alert_group (
   group_name VARCHAR(255) NOT NULL,
   is_default SMALLINT NOT NULL DEFAULT 0,
   service_name VARCHAR(255),
-  PRIMARY KEY (group_id),
+  CONSTRAINT PK_alert_group PRIMARY KEY (group_id),
   CONSTRAINT uni_alert_group_name UNIQUE(cluster_id,group_name)
 );
 
@@ -950,7 +923,7 @@ CREATE TABLE alert_target (
   properties TEXT,
   description VARCHAR(1024),
   is_global SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY (target_id)
+  CONSTRAINT PK_alert_target PRIMARY KEY (target_id)
 );
 
 CREATE TABLE alert_target_states (
@@ -962,7 +935,7 @@ CREATE TABLE alert_target_states (
 CREATE TABLE alert_group_target (
   group_id BIGINT NOT NULL,
   target_id BIGINT NOT NULL,
-  PRIMARY KEY (group_id, target_id),
+  CONSTRAINT PK_alert_group_target PRIMARY KEY (group_id, target_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id)
 );
@@ -970,7 +943,7 @@ CREATE TABLE alert_group_target (
 CREATE TABLE alert_grouping (
   definition_id BIGINT NOT NULL,
   group_id BIGINT NOT NULL,
-  PRIMARY KEY (group_id, definition_id),
+  CONSTRAINT PK_alert_grouping PRIMARY KEY (group_id, definition_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id)
 );
@@ -981,7 +954,7 @@ CREATE TABLE alert_notice (
   history_id BIGINT NOT NULL,
   notify_state VARCHAR(255) NOT NULL,
   uuid VARCHAR(64) NOT NULL UNIQUE,
-  PRIMARY KEY (notification_id),
+  CONSTRAINT PK_alert_notice PRIMARY KEY (notification_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -1558,7 +1531,7 @@ CREATE TABLE workflow (
   numJobsTotal     INTEGER, numJobsCompleted INTEGER,
   inputBytes       BIGINT, outputBytes BIGINT,
   duration         BIGINT,
-  PRIMARY KEY (workflowId),
+  CONSTRAINT PK_workflow PRIMARY KEY (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow (workflowId) ON DELETE CASCADE
 );
 
@@ -1572,7 +1545,7 @@ CREATE TABLE job (
   mapsRuntime  BIGINT, reducesRuntime BIGINT,
   mapCounters  TEXT, reduceCounters TEXT, jobCounters TEXT,
   inputBytes   BIGINT, outputBytes BIGINT,
-  PRIMARY KEY (jobId),
+  CONSTRAINT PK_job PRIMARY KEY (jobId),
   FOREIGN KEY (workflowId) REFERENCES workflow (workflowId) ON DELETE CASCADE
 );
 
@@ -1580,7 +1553,7 @@ CREATE TABLE task (
   taskId        TEXT, jobId TEXT, taskType TEXT, splits TEXT,
   startTime     BIGINT, finishTime BIGINT, status TEXT, error TEXT, counters TEXT,
   failedAttempt TEXT,
-  PRIMARY KEY (taskId),
+  CONSTRAINT PK_task PRIMARY KEY (taskId),
   FOREIGN KEY (jobId) REFERENCES job (jobId) ON DELETE CASCADE
 );
 
@@ -1591,7 +1564,7 @@ CREATE TABLE taskAttempt (
   locality      TEXT, avataar TEXT,
   status        TEXT, error TEXT, counters TEXT,
   inputBytes    BIGINT, outputBytes BIGINT,
-  PRIMARY KEY (taskAttemptId),
+  CONSTRAINT PK_taskAttempt PRIMARY KEY (taskAttemptId),
   FOREIGN KEY (jobId) REFERENCES job (jobId) ON DELETE CASCADE,
   FOREIGN KEY (taskId) REFERENCES task (taskId) ON DELETE CASCADE
 );


[8/8] ambari git commit: AMBARI-15915. SQL constraints: Inline constraints and name them in CREATE table. (Balazs Bence Sari via stoader)

Posted by st...@apache.org.
AMBARI-15915. SQL constraints: Inline constraints and name them in CREATE table. (Balazs Bence Sari via stoader)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/346dfe7e
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/346dfe7e
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/346dfe7e

Branch: refs/heads/trunk
Commit: 346dfe7eb78b8a71e4981c034fb2f3fddba0db81
Parents: a242621
Author: Balazs Bence Sari <bs...@hortonworks.com>
Authored: Thu Apr 21 13:18:58 2016 +0200
Committer: Toader, Sebastian <st...@hortonworks.com>
Committed: Thu Apr 21 15:50:58 2016 +0200

----------------------------------------------------------------------
 .../main/resources/Ambari-DDL-Derby-CREATE.sql  | 653 ++++++++---------
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  | 648 ++++++++---------
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 633 ++++++++--------
 .../resources/Ambari-DDL-Postgres-CREATE.sql    | 645 ++++++++---------
 .../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql     | 681 ++++++++---------
 .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 645 ++++++++---------
 .../resources/Ambari-DDL-SQLServer-CREATE.sql   | 722 ++++++++-----------
 .../ambari/server/orm/db/DDLTestUtils.java      | 525 ++++++++++++++
 .../apache/ambari/server/orm/db/DDLTests.java   | 277 +++++++
 9 files changed, 3028 insertions(+), 2401 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/346dfe7e/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
index f90ac96..93576f7 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -21,8 +21,19 @@ CREATE TABLE stack(
   stack_id BIGINT NOT NULL,
   stack_name VARCHAR(255) NOT NULL,
   stack_version VARCHAR(255) NOT NULL,
-  PRIMARY KEY (stack_id)
-);
+  CONSTRAINT PK_stack PRIMARY KEY (stack_id),
+  CONSTRAINT unq_stack UNIQUE (stack_name, stack_version));
+
+CREATE TABLE adminresourcetype (
+  resource_type_id INTEGER NOT NULL,
+  resource_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminresourcetype PRIMARY KEY (resource_type_id));
+
+CREATE TABLE adminresource (
+  resource_id BIGINT NOT NULL,
+  resource_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminresource PRIMARY KEY (resource_id),
+  CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE clusters (
   cluster_id BIGINT NOT NULL,
@@ -34,8 +45,9 @@ CREATE TABLE clusters (
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   desired_cluster_state VARCHAR(255) NOT NULL,
   desired_stack_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusters PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE clusterconfig (
   config_id BIGINT NOT NULL,
@@ -47,8 +59,11 @@ CREATE TABLE clusterconfig (
   config_data VARCHAR(3000) NOT NULL,
   config_attributes VARCHAR(3000),
   create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY (config_id)
-);
+  CONSTRAINT PK_clusterconfig PRIMARY KEY (config_id),
+  CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_config_type_tag UNIQUE (version_tag, type_name, cluster_id),
+  CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version));
 
 CREATE TABLE clusterconfigmapping (
   cluster_id BIGINT NOT NULL,
@@ -57,7 +72,8 @@ CREATE TABLE clusterconfigmapping (
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (cluster_id, type_name, create_timestamp));
+  CONSTRAINT PK_clusterconfigmapping PRIMARY KEY (cluster_id, type_name, create_timestamp),
+  CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE serviceconfig (
   service_config_id BIGINT NOT NULL,
@@ -69,31 +85,74 @@ CREATE TABLE serviceconfig (
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   group_id BIGINT,
   note VARCHAR(3000),
-  PRIMARY KEY (service_config_id)
-);
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version));
+
+CREATE TABLE hosts (
+  host_id BIGINT NOT NULL,
+  host_name VARCHAR(255) NOT NULL,
+  cpu_count INTEGER NOT NULL,
+  ph_cpu_count INTEGER,
+  cpu_info VARCHAR(255) NOT NULL,
+  discovery_status VARCHAR(2000) NOT NULL,
+  host_attributes VARCHAR(20000) NOT NULL,
+  ipv4 VARCHAR(255),
+  ipv6 VARCHAR(255),
+  public_host_name VARCHAR(255),
+  last_registration_time BIGINT NOT NULL,
+  os_arch VARCHAR(255) NOT NULL,
+  os_info VARCHAR(1000) NOT NULL,
+  os_type VARCHAR(255) NOT NULL,
+  rack_info VARCHAR(255) NOT NULL,
+  total_mem BIGINT NOT NULL,
+  CONSTRAINT PK_hosts PRIMARY KEY (host_id),
+  CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
 CREATE TABLE serviceconfighosts (
   service_config_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(service_config_id, host_id));
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE serviceconfigmapping (
   service_config_id BIGINT NOT NULL,
   config_id BIGINT NOT NULL,
-  PRIMARY KEY(service_config_id, config_id));
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE clusterservices (
   service_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
   service_enabled INTEGER NOT NULL,
-  PRIMARY KEY (service_name, cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
   current_stack_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusterstate PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id));
+
+CREATE TABLE repo_version (
+  repo_version_id BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  version VARCHAR(255) NOT NULL,
+  display_name VARCHAR(128) NOT NULL,
+  repositories VARCHAR(3000) NOT NULL,
+  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  version_url VARCHAR(1024),
+  version_xml CLOB,
+  version_xsd VARCHAR(512),
+  parent_id BIGINT,
+  CONSTRAINT PK_repo_version PRIMARY KEY (repo_version_id),
+  CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
+  CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
 
 CREATE TABLE cluster_version (
   id BIGINT NOT NULL,
@@ -103,7 +162,23 @@ CREATE TABLE cluster_version (
   start_time BIGINT NOT NULL,
   end_time BIGINT,
   user_name VARCHAR(32),
-  PRIMARY KEY (id));
+  CONSTRAINT PK_cluster_version PRIMARY KEY (id),
+  CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
+
+CREATE TABLE servicecomponentdesiredstate (
+  id BIGINT NOT NULL,
+  component_name VARCHAR(255) NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  desired_stack_id BIGINT NOT NULL,
+  desired_state VARCHAR(255) NOT NULL,
+  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
+  service_name VARCHAR(255) NOT NULL,
+  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
+  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
+  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
+  CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   cluster_id BIGINT NOT NULL,
@@ -116,8 +191,10 @@ CREATE TABLE hostcomponentdesiredstate (
   maintenance_state VARCHAR(32) NOT NULL,
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
   restart_required SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY (cluster_id, component_name, host_id, service_name)
-);
+  CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (cluster_id, component_name, host_id, service_name),
+  CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE TABLE hostcomponentstate (
   id BIGINT NOT NULL,
@@ -130,30 +207,13 @@ CREATE TABLE hostcomponentstate (
   service_name VARCHAR(255) NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id)
-);
+  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id),
+  CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, component_name, service_name, cluster_id);
 
-CREATE TABLE hosts (
-  host_id BIGINT NOT NULL,
-  host_name VARCHAR(255) NOT NULL,
-  cpu_count INTEGER NOT NULL,
-  ph_cpu_count INTEGER,
-  cpu_info VARCHAR(255) NOT NULL,
-  discovery_status VARCHAR(2000) NOT NULL,
-  host_attributes VARCHAR(20000) NOT NULL,
-  ipv4 VARCHAR(255),
-  ipv6 VARCHAR(255),
-  public_host_name VARCHAR(255),
-  last_registration_time BIGINT NOT NULL,
-  os_arch VARCHAR(255) NOT NULL,
-  os_info VARCHAR(1000) NOT NULL,
-  os_type VARCHAR(255) NOT NULL,
-  rack_info VARCHAR(255) NOT NULL,
-  total_mem BIGINT NOT NULL,
-  PRIMARY KEY (host_id));
-
 CREATE TABLE hoststate (
   agent_version VARCHAR(255) NOT NULL,
   available_mem BIGINT NOT NULL,
@@ -162,27 +222,17 @@ CREATE TABLE hoststate (
   host_id BIGINT NOT NULL,
   time_in_state BIGINT NOT NULL,
   maintenance_state VARCHAR(512),
-  PRIMARY KEY (host_id));
+  CONSTRAINT PK_hoststate PRIMARY KEY (host_id),
+  CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE host_version (
   id BIGINT NOT NULL,
   repo_version_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
   state VARCHAR(32) NOT NULL,
-  PRIMARY KEY (id));
-
-CREATE TABLE servicecomponentdesiredstate (
-  id BIGINT NOT NULL,
-  component_name VARCHAR(255) NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  desired_stack_id BIGINT NOT NULL,
-  desired_state VARCHAR(255) NOT NULL,
-  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
-  service_name VARCHAR(255) NOT NULL,
-  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id)
-);
+  CONSTRAINT PK_host_version PRIMARY KEY (id),
+  CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
 
 CREATE TABLE servicedesiredstate (
   cluster_id BIGINT NOT NULL,
@@ -192,8 +242,20 @@ CREATE TABLE servicedesiredstate (
   service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL,
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  PRIMARY KEY (cluster_id, service_name)
-);
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+
+CREATE TABLE adminprincipaltype (
+  principal_type_id INTEGER NOT NULL,
+  principal_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminprincipaltype PRIMARY KEY (principal_type_id));
+
+CREATE TABLE adminprincipal (
+  principal_id BIGINT NOT NULL,
+  principal_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminprincipal PRIMARY KEY (principal_id),
+  CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id));
 
 CREATE TABLE users (
   user_id INTEGER,
@@ -205,27 +267,79 @@ CREATE TABLE users (
   user_password VARCHAR(255),
   active INTEGER NOT NULL DEFAULT 1,
   active_widget_layouts VARCHAR(1024) DEFAULT NULL,
-  PRIMARY KEY (user_id));
+  CONSTRAINT PK_users PRIMARY KEY (user_id),
+  CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type));
 
 CREATE TABLE groups (
   group_id INTEGER,
   principal_id BIGINT NOT NULL,
   group_name VARCHAR(255) NOT NULL,
   ldap_group INTEGER NOT NULL DEFAULT 0,
-  PRIMARY KEY (group_id),
-  UNIQUE (ldap_group, group_name));
+  CONSTRAINT PK_groups PRIMARY KEY (group_id),
+  UNIQUE (ldap_group, group_name),
+  CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id));
 
 CREATE TABLE members (
   member_id INTEGER,
   group_id INTEGER NOT NULL,
   user_id INTEGER NOT NULL,
-  PRIMARY KEY (member_id),
-  UNIQUE(group_id, user_id));
+  CONSTRAINT PK_members PRIMARY KEY (member_id),
+  UNIQUE(group_id, user_id),
+  CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id),
+  CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id));
 
-CREATE TABLE execution_command (
-  command BLOB,
-  task_id BIGINT NOT NULL,
-  PRIMARY KEY (task_id));
+CREATE TABLE requestschedule (
+  schedule_id bigint,
+  cluster_id bigint NOT NULL,
+  description varchar(255),
+  status varchar(255),
+  batch_separation_seconds smallint,
+  batch_toleration_limit smallint,
+  create_user varchar(255),
+  create_timestamp bigint,
+  update_user varchar(255),
+  update_timestamp bigint,
+  minutes varchar(10),
+  hours varchar(10),
+  days_of_month varchar(10),
+  month varchar(10),
+  day_of_week varchar(10),
+  yearToSchedule varchar(10),
+  startTime varchar(50),
+  endTime varchar(50),
+  last_execution_status varchar(255),
+  CONSTRAINT PK_requestschedule PRIMARY KEY (schedule_id));
+
+CREATE TABLE request (
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT,
+  command_name VARCHAR(255),
+  create_time BIGINT NOT NULL,
+  end_time BIGINT NOT NULL,
+  exclusive_execution SMALLINT NOT NULL DEFAULT 0,
+  inputs BLOB,
+  request_context VARCHAR(255),
+  request_type VARCHAR(255),
+  request_schedule_id BIGINT,
+  start_time BIGINT NOT NULL,
+  status VARCHAR(255),
+  CONSTRAINT PK_request PRIMARY KEY (request_id),
+  CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id));
+
+CREATE TABLE stage (
+  stage_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  skippable SMALLINT DEFAULT 0 NOT NULL,
+  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
+  log_info VARCHAR(255) NOT NULL,
+  request_context VARCHAR(255),
+  cluster_host_info BLOB NOT NULL,
+  command_params BLOB,
+  host_params BLOB,
+  CONSTRAINT PK_stage PRIMARY KEY (stage_id, request_id),
+  CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE host_role_command (
   task_id BIGINT NOT NULL,
@@ -239,6 +353,7 @@ CREATE TABLE host_role_command (
   role VARCHAR(255),
   stage_id BIGINT NOT NULL,
   start_time BIGINT NOT NULL,
+  original_start_time BIGINT NOT NULL,
   end_time BIGINT,
   status VARCHAR(255),
   auto_skip_on_failure SMALLINT DEFAULT 0 NOT NULL,
@@ -250,42 +365,23 @@ CREATE TABLE host_role_command (
   role_command VARCHAR(255),
   command_detail VARCHAR(255),
   custom_command_name VARCHAR(255),
-  PRIMARY KEY (task_id));
+  CONSTRAINT PK_host_role_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
+
+CREATE TABLE execution_command (
+  command BLOB,
+  task_id BIGINT NOT NULL,
+  CONSTRAINT PK_execution_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE role_success_criteria (
   role VARCHAR(255) NOT NULL,
   request_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   success_factor FLOAT NOT NULL,
-  PRIMARY KEY (role, request_id, stage_id));
-
-CREATE TABLE stage (
-  stage_id BIGINT NOT NULL,
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  skippable SMALLINT DEFAULT 0 NOT NULL,
-  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
-  log_info VARCHAR(255) NOT NULL,
-  request_context VARCHAR(255),
-  cluster_host_info BLOB NOT NULL,
-  command_params BLOB,
-  host_params BLOB,
-  PRIMARY KEY (stage_id, request_id));
-
-CREATE TABLE request (
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT,
-  command_name VARCHAR(255),
-  create_time BIGINT NOT NULL,
-  end_time BIGINT NOT NULL,
-  exclusive_execution SMALLINT NOT NULL DEFAULT 0,
-  inputs BLOB,
-  request_context VARCHAR(255),
-  request_type VARCHAR(255),
-  request_schedule_id BIGINT,
-  start_time BIGINT NOT NULL,
-  status VARCHAR(255),
-  PRIMARY KEY (request_id));
+  CONSTRAINT PK_role_success_criteria PRIMARY KEY (role, request_id, stage_id),
+  CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
 
 CREATE TABLE requestresourcefilter (
   filter_id BIGINT NOT NULL,
@@ -293,7 +389,8 @@ CREATE TABLE requestresourcefilter (
   service_name VARCHAR(255),
   component_name VARCHAR(255),
   hosts BLOB,
-  PRIMARY KEY (filter_id));
+  CONSTRAINT PK_requestresourcefilter PRIMARY KEY (filter_id),
+  CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE requestoperationlevel (
   operation_level_id BIGINT NOT NULL,
@@ -303,17 +400,20 @@ CREATE TABLE requestoperationlevel (
   service_name VARCHAR(255),
   host_component_name VARCHAR(255),
   host_id BIGINT DEFAULT 0,
-  PRIMARY KEY (operation_level_id));
+  CONSTRAINT PK_requestoperationlevel PRIMARY KEY (operation_level_id),
+  CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE ClusterHostMapping (
   cluster_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id, host_id));
+  CONSTRAINT PK_ClusterHostMapping PRIMARY KEY (cluster_id, host_id),
+  CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE key_value_store (
   "key" VARCHAR(255),
   "value" VARCHAR(20000),
-  PRIMARY KEY ("key"));
+  CONSTRAINT PK_key_value_store PRIMARY KEY ("key"));
 
 CREATE TABLE hostconfigmapping (
   cluster_id BIGINT NOT NULL,
@@ -324,16 +424,20 @@ CREATE TABLE hostconfigmapping (
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (cluster_id, host_id, type_name, create_timestamp));
+  CONSTRAINT PK_hostconfigmapping PRIMARY KEY (cluster_id, host_id, type_name, create_timestamp),
+  CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE metainfo (
   "metainfo_key" VARCHAR(255),
   "metainfo_value" VARCHAR(20000),
-  PRIMARY KEY ("metainfo_key"));
+  CONSTRAINT PK_metainfo PRIMARY KEY ("metainfo_key"));
 
 CREATE TABLE ambari_sequences (
-  sequence_name VARCHAR(255) PRIMARY KEY,
-  sequence_value BIGINT NOT NULL);
+  sequence_name VARCHAR(255),
+  sequence_value BIGINT NOT NULL,
+  CONSTRAINT PK_ambari_sequences PRIMARY KEY (sequence_name));
+
 
 CREATE TABLE configgroup (
   group_id BIGINT,
@@ -343,7 +447,8 @@ CREATE TABLE configgroup (
   description VARCHAR(1024),
   create_timestamp BIGINT NOT NULL,
   service_name VARCHAR(255),
-  PRIMARY KEY(group_id));
+  CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (
   config_group_id BIGINT NOT NULL,
@@ -352,34 +457,16 @@ CREATE TABLE confgroupclusterconfigmapping (
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) DEFAULT '_db',
   create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY(config_group_id, cluster_id, config_type));
+  CONSTRAINT PK_confgroupclustercfgmapping PRIMARY KEY (config_group_id, cluster_id, config_type),
+  CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_confg FOREIGN KEY (version_tag, config_type, cluster_id) REFERENCES clusterconfig (version_tag, type_name, cluster_id));
 
 CREATE TABLE configgrouphostmapping (
   config_group_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(config_group_id, host_id));
-
-CREATE TABLE requestschedule (
-  schedule_id bigint,
-  cluster_id bigint NOT NULL,
-  description varchar(255),
-  status varchar(255),
-  batch_separation_seconds smallint,
-  batch_toleration_limit smallint,
-  create_user varchar(255),
-  create_timestamp bigint,
-  update_user varchar(255),
-  update_timestamp bigint,
-  minutes varchar(10),
-  hours varchar(10),
-  days_of_month varchar(10),
-  month varchar(10),
-  day_of_week varchar(10),
-  yearToSchedule varchar(10),
-  startTime varchar(50),
-  endTime varchar(50),
-  last_execution_status varchar(255),
-  PRIMARY KEY(schedule_id));
+  CONSTRAINT PK_configgrouphostmapping PRIMARY KEY (config_group_id, host_id),
+  CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE requestschedulebatchrequest (
   schedule_id bigint,
@@ -391,44 +478,48 @@ CREATE TABLE requestschedulebatchrequest (
   request_status varchar(255),
   return_code smallint,
   return_message varchar(20000),
-  PRIMARY KEY(schedule_id, batch_id));
+  CONSTRAINT PK_requestschedulebatchrequest PRIMARY KEY (schedule_id, batch_id),
+  CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id));
 
 CREATE TABLE blueprint (
   blueprint_name VARCHAR(255) NOT NULL,
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_descriptor_reference VARCHAR(255),
   stack_id BIGINT NOT NULL,
-  PRIMARY KEY(blueprint_name)
-);
+  CONSTRAINT PK_blueprint PRIMARY KEY (blueprint_name),
+  CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id));
 
 CREATE TABLE hostgroup (
   blueprint_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   cardinality VARCHAR(255) NOT NULL,
-  PRIMARY KEY(blueprint_name, name));
+  CONSTRAINT PK_hostgroup PRIMARY KEY (blueprint_name, name),
+  CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE hostgroup_component (
   blueprint_name VARCHAR(255) NOT NULL,
   hostgroup_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   provision_action VARCHAR(255),
-  PRIMARY KEY(blueprint_name, hostgroup_name, name));
+  CONSTRAINT PK_hostgroup_component PRIMARY KEY (blueprint_name, hostgroup_name, name),
+  CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name));
 
 CREATE TABLE blueprint_configuration (
   blueprint_name varchar(255) NOT NULL,
   type_name varchar(255) NOT NULL,
   config_data VARCHAR(3000) NOT NULL,
   config_attributes VARCHAR(3000),
-  PRIMARY KEY(blueprint_name, type_name));
+  CONSTRAINT PK_blueprint_configuration PRIMARY KEY (blueprint_name, type_name),
+  CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
-CREATE TABLE blueprint_settings (
+CREATE TABLE blueprint_setting (
   id BIGINT NOT NULL,
   blueprint_name varchar(255) NOT NULL,
   setting_name varchar(255) NOT NULL,
   setting_data CLOB NOT NULL,
-  CONSTRAINT PK_blueprint_settings PRIMARY KEY (id),
-  CONSTRAINT UQ_blueprint_settings_name UNIQUE(blueprint_name,setting_name),
-  CONSTRAINT FK_blueprint_settings_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
+  CONSTRAINT PK_blueprint_setting PRIMARY KEY (id),
+  CONSTRAINT UQ_blueprint_setting_name UNIQUE(blueprint_name,setting_name),
+  CONSTRAINT FK_blueprint_setting_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE hostgroup_configuration (
   blueprint_name VARCHAR(255) NOT NULL,
@@ -436,7 +527,8 @@ CREATE TABLE hostgroup_configuration (
   type_name VARCHAR(255) NOT NULL,
   config_data VARCHAR(3000) NOT NULL,
   config_attributes VARCHAR(3000),
-  PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
+  CONSTRAINT PK_hostgroup_configuration PRIMARY KEY (blueprint_name, hostgroup_name, type_name),
+  CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name));
 
 CREATE TABLE viewmain (
   view_name VARCHAR(255) NOT NULL,
@@ -450,16 +542,8 @@ CREATE TABLE viewmain (
   archive VARCHAR(255),
   mask VARCHAR(255),
   system_view SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY(view_name));
-
-CREATE TABLE viewinstancedata (
-  view_instance_id BIGINT,
-  view_name VARCHAR(255) NOT NULL,
-  view_instance_name VARCHAR(255) NOT NULL,
-  name VARCHAR(255) NOT NULL,
-  user_name VARCHAR(255) NOT NULL,
-  value VARCHAR(2000),
-  PRIMARY KEY(view_instance_id, name, user_name));
+  CONSTRAINT PK_viewmain PRIMARY KEY (view_name),
+  CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE viewinstance (
   view_instance_id BIGINT,
@@ -475,14 +559,29 @@ CREATE TABLE viewinstance (
   alter_names SMALLINT NOT NULL DEFAULT 1,
   cluster_handle VARCHAR(255),
   short_url VARCHAR (255),
-  PRIMARY KEY(view_instance_id));
+  CONSTRAINT PK_viewinstance PRIMARY KEY (view_instance_id),
+  CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name),
+  CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id),
+  CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name),
+  CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name));
+
+CREATE TABLE viewinstancedata (
+  view_instance_id BIGINT,
+  view_name VARCHAR(255) NOT NULL,
+  view_instance_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) NOT NULL,
+  value VARCHAR(2000),
+  CONSTRAINT PK_viewinstancedata PRIMARY KEY (view_instance_id, name, user_name),
+  CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name));
 
 CREATE TABLE viewinstanceproperty (
   view_name VARCHAR(255) NOT NULL,
   view_instance_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   value VARCHAR(2000),
-  PRIMARY KEY(view_name, view_instance_name, name));
+  CONSTRAINT PK_viewinstanceproperty PRIMARY KEY (view_name, view_instance_name, name),
+  CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE viewparameter (
   view_name VARCHAR(255) NOT NULL,
@@ -494,7 +593,8 @@ CREATE TABLE viewparameter (
   cluster_config VARCHAR(255),
   required CHAR(1),
   masked CHAR(1),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewparameter PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewresource (
   view_name VARCHAR(255) NOT NULL,
@@ -505,7 +605,8 @@ CREATE TABLE viewresource (
   provider VARCHAR(255),
   service VARCHAR(255),
   resource VARCHAR(255),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewresource PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewentity (
   id BIGINT NOT NULL,
@@ -513,27 +614,8 @@ CREATE TABLE viewentity (
   view_instance_name VARCHAR(255) NOT NULL,
   class_name VARCHAR(255) NOT NULL,
   id_property VARCHAR(255),
-  PRIMARY KEY(id));
-
-CREATE TABLE adminresourcetype (
-  resource_type_id INTEGER NOT NULL,
-  resource_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(resource_type_id));
-
-CREATE TABLE adminresource (
-  resource_id BIGINT NOT NULL,
-  resource_type_id INTEGER NOT NULL,
-  PRIMARY KEY(resource_id));
-
-CREATE TABLE adminprincipaltype (
-  principal_type_id INTEGER NOT NULL,
-  principal_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(principal_type_id));
-
-CREATE TABLE adminprincipal (
-  principal_id BIGINT NOT NULL,
-  principal_type_id INTEGER NOT NULL,
-  PRIMARY KEY(principal_id));
+  CONSTRAINT PK_viewentity PRIMARY KEY (id),
+  CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE adminpermission (
   permission_id BIGINT NOT NULL,
@@ -541,38 +623,31 @@ CREATE TABLE adminpermission (
   resource_type_id INTEGER NOT NULL,
   permission_label VARCHAR(255),
   sort_order SMALLINT NOT NULL DEFAULT 1,
-  PRIMARY KEY(permission_id));
+  CONSTRAINT PK_adminpermission PRIMARY KEY (permission_id),
+  CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id),
+  CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id));
 
 CREATE TABLE roleauthorization (
   authorization_id VARCHAR(100) NOT NULL,
   authorization_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(authorization_id));
+  CONSTRAINT PK_roleauthorization PRIMARY KEY (authorization_id));
 
 CREATE TABLE permission_roleauthorization (
   permission_id BIGINT NOT NULL,
   authorization_id VARCHAR(100) NOT NULL,
-  PRIMARY KEY(permission_id, authorization_id));
+  CONSTRAINT PK_permsn_roleauthorization PRIMARY KEY (permission_id, authorization_id),
+  CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id),
+  CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id));
 
 CREATE TABLE adminprivilege (
   privilege_id BIGINT,
   permission_id BIGINT NOT NULL,
   resource_id BIGINT NOT NULL,
   principal_id BIGINT NOT NULL,
-  PRIMARY KEY(privilege_id));
-
-
-CREATE TABLE repo_version (
-  repo_version_id BIGINT NOT NULL,
-  stack_id BIGINT NOT NULL,
-  version VARCHAR(255) NOT NULL,
-  display_name VARCHAR(128) NOT NULL,
-  repositories VARCHAR(3000) NOT NULL,
-  version_url VARCHAR(1024),
-  version_xml CLOB,
-  version_xsd VARCHAR(512),
-  parent_id BIGINT,
-  PRIMARY KEY(repo_version_id)
-);
+  CONSTRAINT PK_adminprivilege PRIMARY KEY (privilege_id),
+  CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id),
+  CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE widget (
   id BIGINT NOT NULL,
@@ -587,7 +662,7 @@ CREATE TABLE widget (
   widget_values VARCHAR(3000),
   properties VARCHAR(3000),
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout (
@@ -598,21 +673,22 @@ CREATE TABLE widget_layout (
   user_name VARCHAR(255) NOT NULL,
   display_name VARCHAR(255),
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget_layout PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout_user_widget (
   widget_layout_id BIGINT NOT NULL,
   widget_id BIGINT NOT NULL,
   widget_order smallint,
-  PRIMARY KEY(widget_layout_id, widget_id)
-);
+  CONSTRAINT PK_widget_layout_user_widget PRIMARY KEY (widget_layout_id, widget_id),
+  CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id),
+  CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id));
 
 CREATE TABLE artifact (
   artifact_name VARCHAR(255) NOT NULL,
   artifact_data VARCHAR(3000) NOT NULL,
   foreign_keys VARCHAR(255) NOT NULL,
-  PRIMARY KEY (artifact_name, foreign_keys));
+  CONSTRAINT PK_artifact PRIMARY KEY (artifact_name, foreign_keys));
 
 CREATE TABLE topology_request (
   id BIGINT NOT NULL,
@@ -622,8 +698,8 @@ CREATE TABLE topology_request (
   cluster_properties VARCHAR(3000),
   cluster_attributes VARCHAR(3000),
   description VARCHAR(1024),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_request PRIMARY KEY (id),
+  CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id));
 
 CREATE TABLE topology_hostgroup (
   id BIGINT NOT NULL,
@@ -631,25 +707,27 @@ CREATE TABLE topology_hostgroup (
   group_properties VARCHAR(3000),
   group_attributes VARCHAR(3000),
   request_id BIGINT NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_hostgroup PRIMARY KEY (id),
+  CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_info (
   id BIGINT NOT NULL,
   group_id BIGINT NOT NULL,
   fqdn VARCHAR(255),
   host_count INTEGER,
+  host_id BIGINT,
   predicate VARCHAR(2048),
   rack_info VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_info PRIMARY KEY (id),
+  CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id));
 
 CREATE TABLE topology_logical_request (
   id BIGINT NOT NULL,
   request_id BIGINT NOT NULL,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_request PRIMARY KEY (id),
+  CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_request (
   id BIGINT NOT NULL,
@@ -657,23 +735,25 @@ CREATE TABLE topology_host_request (
   group_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   host_name VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_request PRIMARY KEY (id),
+  CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id));
 
 CREATE TABLE topology_host_task (
   id BIGINT NOT NULL,
   host_request_id BIGINT NOT NULL,
   type VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_task PRIMARY KEY (id),
+  CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id));
 
 CREATE TABLE topology_logical_task (
   id BIGINT NOT NULL,
   host_task_id BIGINT NOT NULL,
   physical_task_id BIGINT,
   component VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_task PRIMARY KEY (id),
+  CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id),
+  CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE setting (
   id BIGINT NOT NULL,
@@ -682,7 +762,7 @@ CREATE TABLE setting (
   content VARCHAR(3000) NOT NULL,
   updated_by VARCHAR(255) NOT NULL DEFAULT '_db',
   update_timestamp BIGINT NOT NULL,
-  PRIMARY KEY (id)
+  CONSTRAINT PK_setting PRIMARY KEY (id)
 );
 
 
@@ -700,7 +780,7 @@ CREATE TABLE upgrade (
   skip_sc_failures SMALLINT DEFAULT 0 NOT NULL,
   downgrade_allowed SMALLINT DEFAULT 1 NOT NULL,
   suspended SMALLINT DEFAULT 0 NOT NULL,
-  PRIMARY KEY (upgrade_id),
+  CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
@@ -710,7 +790,7 @@ CREATE TABLE upgrade_group (
   upgrade_id BIGINT NOT NULL,
   group_name VARCHAR(255) DEFAULT '' NOT NULL,
   group_title VARCHAR(1024) DEFAULT '' NOT NULL,
-  PRIMARY KEY (upgrade_group_id),
+  CONSTRAINT PK_upgrade_group PRIMARY KEY (upgrade_group_id),
   FOREIGN KEY (upgrade_id) REFERENCES upgrade(upgrade_id)
 );
 
@@ -722,7 +802,7 @@ CREATE TABLE upgrade_item (
   hosts VARCHAR(3000),
   tasks VARCHAR(3000),
   item_text VARCHAR(1024),
-  PRIMARY KEY (upgrade_item_id),
+  CONSTRAINT PK_upgrade_item PRIMARY KEY (upgrade_item_id),
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
@@ -745,129 +825,34 @@ CREATE INDEX idx_stage_request_id ON stage (request_id);
 CREATE INDEX idx_hrc_request_id ON host_role_command (request_id);
 CREATE INDEX idx_rsc_request_id ON role_success_criteria (request_id);
 
---------altering tables by creating unique constraints----------
-ALTER TABLE users ADD CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_tag UNIQUE (version_tag, type_name, cluster_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version);
-ALTER TABLE hosts ADD CONSTRAINT UQ_hosts_host_name UNIQUE (host_name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name);
-ALTER TABLE serviceconfig ADD CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version);
-ALTER TABLE adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version);
-ALTER TABLE stack ADD CONSTRAINT unq_stack UNIQUE (stack_name, stack_version);
-
---------altering tables by creating foreign keys----------
--- Note, Oracle has a limitation of 32 chars in the FK name, and we should use the same FK name in all DB types.
-ALTER TABLE members ADD CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id);
-ALTER TABLE members ADD CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id);
+-------- altering tables by creating foreign keys ----------
+-- #1: This should always be an exceptional case. FK constraints should be inlined in table definitions when possible
+--     (reorder table definitions if necessary).
+-- #2: Oracle has a limitation of 30 chars in the constraint names name, and we should use the same constraint names in all DB types.
 ALTER TABLE clusters ADD CONSTRAINT FK_clusters_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterservices ADD CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterconfigmapping ADD CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE execution_command ADD CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE role_success_criteria ADD CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE configgroup ADD CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_confg FOREIGN KEY (version_tag, config_type, cluster_id) REFERENCES clusterconfig (version_tag, type_name, cluster_id);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE requestschedulebatchrequest ADD CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE hostgroup ADD CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_component ADD CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
-ALTER TABLE blueprint_configuration ADD CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_configuration ADD CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
-ALTER TABLE requestresourcefilter ADD CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE requestoperationlevel ADD CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE viewparameter ADD CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewresource ADD CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstanceproperty ADD CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE viewinstancedata ADD CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name);
-ALTER TABLE viewentity ADD CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE adminresource ADD CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE adminprincipal ADD CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id);
-ALTER TABLE adminpermission ADD CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE viewmain ADD CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE users ADD CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE groups ADD CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id);
-ALTER TABLE topology_request ADD CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id);
-ALTER TABLE topology_hostgroup ADD CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_logical_request ADD CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_task ADD CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE serviceconfig ADD CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE blueprint ADD CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE repo_version ADD CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
 
 -- Kerberos
 CREATE TABLE kerberos_principal (
   principal_name VARCHAR(255) NOT NULL,
   is_service SMALLINT NOT NULL DEFAULT 1,
   cached_keytab_path VARCHAR(255),
-  PRIMARY KEY(principal_name)
+  CONSTRAINT PK_kerberos_principal PRIMARY KEY (principal_name)
 );
 
 CREATE TABLE kerberos_principal_host (
   principal_name VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(principal_name, host_id)
-);
+  CONSTRAINT PK_kerberos_principal_host PRIMARY KEY (principal_name, host_id),
+  CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name));
 
 CREATE TABLE kerberos_descriptor
 (
    kerberos_descriptor_name   VARCHAR(255) NOT NULL,
    kerberos_descriptor        VARCHAR(3000) NOT NULL,
-   PRIMARY KEY (kerberos_descriptor_name)
+   CONSTRAINT PK_kerberos_descriptor PRIMARY KEY (kerberos_descriptor_name)
 );
 
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name);
 -- Kerberos (end)
 
 -- Alerting Framework
@@ -889,7 +874,7 @@ CREATE TABLE alert_definition (
   ignore_host SMALLINT DEFAULT 0 NOT NULL,
   repeat_tolerance INTEGER DEFAULT 1 NOT NULL,
   repeat_tolerance_enabled SMALLINT DEFAULT 0 NOT NULL,
-  PRIMARY KEY (definition_id),
+  CONSTRAINT PK_alert_definition PRIMARY KEY (definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   CONSTRAINT uni_alert_def_name UNIQUE(cluster_id,definition_name)
 );
@@ -906,7 +891,7 @@ CREATE TABLE alert_history (
   alert_label VARCHAR(1024),
   alert_state VARCHAR(255) NOT NULL,
   alert_text VARCHAR(3000),
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_history PRIMARY KEY (alert_id),
   FOREIGN KEY (alert_definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
 );
@@ -921,7 +906,7 @@ CREATE TABLE alert_current (
   latest_text VARCHAR(3000),
   occurrences BIGINT NOT NULL DEFAULT 1,
   firmness VARCHAR(255) NOT NULL DEFAULT 'HARD',
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_current PRIMARY KEY (alert_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -932,7 +917,7 @@ CREATE TABLE alert_group (
   group_name VARCHAR(255) NOT NULL,
   is_default SMALLINT NOT NULL DEFAULT 0,
   service_name VARCHAR(255),
-  PRIMARY KEY (group_id),
+  CONSTRAINT PK_alert_group PRIMARY KEY (group_id),
   CONSTRAINT uni_alert_group_name UNIQUE(cluster_id,group_name)
 );
 
@@ -943,7 +928,7 @@ CREATE TABLE alert_target (
   properties VARCHAR(3000),
   description VARCHAR(1024),
   is_global SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY (target_id)
+  CONSTRAINT PK_alert_target PRIMARY KEY (target_id)
 );
 
 CREATE TABLE alert_target_states (
@@ -955,7 +940,7 @@ CREATE TABLE alert_target_states (
 CREATE TABLE alert_group_target (
   group_id BIGINT NOT NULL,
   target_id BIGINT NOT NULL,
-  PRIMARY KEY (group_id, target_id),
+  CONSTRAINT PK_alert_group_target PRIMARY KEY (group_id, target_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id)
 );
@@ -963,7 +948,7 @@ CREATE TABLE alert_group_target (
 CREATE TABLE alert_grouping (
   definition_id BIGINT NOT NULL,
   group_id BIGINT NOT NULL,
-  PRIMARY KEY (group_id, definition_id),
+  CONSTRAINT PK_alert_grouping PRIMARY KEY (group_id, definition_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id)
 );
@@ -974,7 +959,7 @@ CREATE TABLE alert_notice (
   history_id BIGINT NOT NULL,
   notify_state VARCHAR(255) NOT NULL,
   uuid VARCHAR(64) NOT NULL UNIQUE,
-  PRIMARY KEY (notification_id),
+  CONSTRAINT PK_alert_notice PRIMARY KEY (notification_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -1081,9 +1066,9 @@ INSERT INTO ambari_sequences (sequence_name, sequence_value)
   union all
   select 'servicecomponentdesiredstate_id_seq', 0 FROM SYSIBM.SYSDUMMY1
   union all
-  select 'servicecomponent_history_id_seq', 0 FROM SYSIBM.SYSDUMMY1;
+  select 'servicecomponent_history_id_seq', 0 FROM SYSIBM.SYSDUMMY1
   union all
-  select 'blueprint_settings_id_seq', 0 FROM SYSIBM.SYSDUMMY1;
+  select 'blueprint_setting_id_seq', 0 FROM SYSIBM.SYSDUMMY1;
 
 
 INSERT INTO adminresourcetype (resource_type_id, resource_type_name)
@@ -1442,8 +1427,8 @@ CREATE TABLE qrtz_simprop_triggers
   LONG_PROP_2 BIGINT,
   DEC_PROP_1 NUMERIC(13,4),
   DEC_PROP_2 NUMERIC(13,4),
-  BOOLEAN_PROP_1 BOOLEAN,
-  BOOLEAN_PROP_2 BOOLEAN,
+  BOOL_PROP_1 BOOLEAN,
+  BOOL_PROP_2 BOOLEAN,
   PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
   FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
   REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
@@ -1543,7 +1528,7 @@ CREATE TABLE workflow (
   numJobsTotal     INTEGER, numJobsCompleted INTEGER,
   inputBytes       BIGINT, outputBytes BIGINT,
   duration         BIGINT,
-  PRIMARY KEY (workflowId),
+  CONSTRAINT PK_workflow PRIMARY KEY (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow (workflowId) ON DELETE CASCADE
 );
 
@@ -1557,7 +1542,7 @@ CREATE TABLE job (
   mapsRuntime  BIGINT, reducesRuntime BIGINT,
   mapCounters  VARCHAR(3000), reduceCounters VARCHAR(3000), jobCounters VARCHAR(3000),
   inputBytes   BIGINT, outputBytes BIGINT,
-  PRIMARY KEY (jobId),
+  CONSTRAINT PK_job PRIMARY KEY (jobId),
   FOREIGN KEY (workflowId) REFERENCES workflow (workflowId) ON DELETE CASCADE
 );
 
@@ -1565,7 +1550,7 @@ CREATE TABLE task (
   taskId        VARCHAR(3000), jobId VARCHAR(3000), taskType VARCHAR(3000), splits VARCHAR(3000),
   startTime     BIGINT, finishTime BIGINT, status VARCHAR(3000), error VARCHAR(3000), counters VARCHAR(3000),
   failedAttempt VARCHAR(3000),
-  PRIMARY KEY (taskId),
+  CONSTRAINT PK_task PRIMARY KEY (taskId),
   FOREIGN KEY (jobId) REFERENCES job (jobId) ON DELETE CASCADE
 );
 
@@ -1576,7 +1561,7 @@ CREATE TABLE taskAttempt (
   locality      VARCHAR(3000), avataar VARCHAR(3000),
   status        VARCHAR(3000), error VARCHAR(3000), counters VARCHAR(3000),
   inputBytes    BIGINT, outputBytes BIGINT,
-  PRIMARY KEY (taskAttemptId),
+  CONSTRAINT PK_taskAttempt PRIMARY KEY (taskAttemptId),
   FOREIGN KEY (jobId) REFERENCES job (jobId) ON DELETE CASCADE,
   FOREIGN KEY (taskId) REFERENCES task (taskId) ON DELETE CASCADE
 );


[7/8] ambari git commit: AMBARI-15915. SQL constraints: Inline constraints and name them in CREATE table. (Balazs Bence Sari via stoader)

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/346dfe7e/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 2b214c4..b0264f2 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -31,8 +31,19 @@ CREATE TABLE stack(
   stack_id BIGINT NOT NULL,
   stack_name VARCHAR(100) NOT NULL,
   stack_version VARCHAR(100) NOT NULL,
-  PRIMARY KEY (stack_id)
-);
+  CONSTRAINT PK_stack PRIMARY KEY (stack_id),
+  CONSTRAINT unq_stack UNIQUE (stack_name, stack_version));
+
+CREATE TABLE adminresourcetype (
+  resource_type_id INTEGER NOT NULL,
+  resource_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminresourcetype PRIMARY KEY (resource_type_id));
+
+CREATE TABLE adminresource (
+  resource_id BIGINT NOT NULL,
+  resource_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminresource PRIMARY KEY (resource_id),
+  CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE clusters (
   cluster_id BIGINT NOT NULL,
@@ -44,8 +55,9 @@ CREATE TABLE clusters (
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   desired_cluster_state VARCHAR(255) NOT NULL,
   desired_stack_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusters PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE clusterconfig (
   config_id BIGINT NOT NULL,
@@ -57,8 +69,11 @@ CREATE TABLE clusterconfig (
   config_data LONGTEXT NOT NULL,
   config_attributes LONGTEXT,
   create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY (config_id)
-);
+  CONSTRAINT PK_clusterconfig PRIMARY KEY (config_id),
+  CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag),
+  CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version));
 
 CREATE TABLE serviceconfig (
   service_config_id BIGINT NOT NULL,
@@ -70,31 +85,74 @@ CREATE TABLE serviceconfig (
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   group_id BIGINT,
   note LONGTEXT,
-  PRIMARY KEY (service_config_id)
-);
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version));
+
+CREATE TABLE hosts (
+  host_id BIGINT NOT NULL,
+  host_name VARCHAR(255) NOT NULL,
+  cpu_count INTEGER NOT NULL,
+  cpu_info VARCHAR(255) NOT NULL,
+  discovery_status VARCHAR(2000) NOT NULL,
+  host_attributes LONGTEXT NOT NULL,
+  ipv4 VARCHAR(255),
+  ipv6 VARCHAR(255),
+  last_registration_time BIGINT NOT NULL,
+  os_arch VARCHAR(255) NOT NULL,
+  os_info VARCHAR(1000) NOT NULL,
+  os_type VARCHAR(255) NOT NULL,
+  ph_cpu_count INTEGER,
+  public_host_name VARCHAR(255),
+  rack_info VARCHAR(255) NOT NULL,
+  total_mem BIGINT NOT NULL,
+  CONSTRAINT PK_hosts PRIMARY KEY (host_id),
+  CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
 CREATE TABLE serviceconfighosts (
   service_config_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(service_config_id, host_id));
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE serviceconfigmapping (
   service_config_id BIGINT NOT NULL,
   config_id BIGINT NOT NULL,
-  PRIMARY KEY(service_config_id, config_id));
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE clusterservices (
   service_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
   service_enabled INTEGER NOT NULL,
-  PRIMARY KEY (service_name, cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
   current_stack_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusterstate PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id));
+
+CREATE TABLE repo_version (
+  repo_version_id BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  version VARCHAR(255) NOT NULL,
+  display_name VARCHAR(128) NOT NULL,
+  repositories MEDIUMTEXT NOT NULL,
+  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  version_url VARCHAR(1024),
+  version_xml MEDIUMTEXT,
+  version_xsd VARCHAR(512),
+  parent_id BIGINT,
+  CONSTRAINT PK_repo_version PRIMARY KEY (repo_version_id),
+  CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
+  CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
 
 CREATE TABLE cluster_version (
   id BIGINT NOT NULL,
@@ -104,7 +162,23 @@ CREATE TABLE cluster_version (
   start_time BIGINT NOT NULL,
   end_time BIGINT,
   user_name VARCHAR(32),
-  PRIMARY KEY (id));
+  CONSTRAINT PK_cluster_version PRIMARY KEY (id),
+  CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
+
+CREATE TABLE servicecomponentdesiredstate (
+  id BIGINT NOT NULL,
+  component_name VARCHAR(100) NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  desired_stack_id BIGINT NOT NULL,
+  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
+  desired_state VARCHAR(255) NOT NULL,
+  service_name VARCHAR(100) NOT NULL,
+  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
+  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
+  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
+  CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   cluster_id BIGINT NOT NULL,
@@ -117,8 +191,10 @@ CREATE TABLE hostcomponentdesiredstate (
   maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
   restart_required TINYINT(1) NOT NULL DEFAULT 0,
-  PRIMARY KEY (cluster_id, component_name, host_id, service_name)
-);
+  CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (cluster_id, component_name, host_id, service_name),
+  CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE TABLE hostcomponentstate (
   id BIGINT NOT NULL,
@@ -131,30 +207,13 @@ CREATE TABLE hostcomponentstate (
   service_name VARCHAR(100) NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id)
-);
+  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id),
+  CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, component_name, service_name, cluster_id);
 
-CREATE TABLE hosts (
-  host_id BIGINT NOT NULL,
-  host_name VARCHAR(255) NOT NULL,
-  cpu_count INTEGER NOT NULL,
-  cpu_info VARCHAR(255) NOT NULL,
-  discovery_status VARCHAR(2000) NOT NULL,
-  host_attributes LONGTEXT NOT NULL,
-  ipv4 VARCHAR(255),
-  ipv6 VARCHAR(255),
-  last_registration_time BIGINT NOT NULL,
-  os_arch VARCHAR(255) NOT NULL,
-  os_info VARCHAR(1000) NOT NULL,
-  os_type VARCHAR(255) NOT NULL,
-  ph_cpu_count INTEGER,
-  public_host_name VARCHAR(255),
-  rack_info VARCHAR(255) NOT NULL,
-  total_mem BIGINT NOT NULL,
-  PRIMARY KEY (host_id));
-
 CREATE TABLE hoststate (
   agent_version VARCHAR(255) NOT NULL,
   available_mem BIGINT NOT NULL,
@@ -163,27 +222,17 @@ CREATE TABLE hoststate (
   host_id BIGINT NOT NULL,
   time_in_state BIGINT NOT NULL,
   maintenance_state VARCHAR(512),
-  PRIMARY KEY (host_id));
+  CONSTRAINT PK_hoststate PRIMARY KEY (host_id),
+  CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE host_version (
   id BIGINT NOT NULL,
   repo_version_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
   state VARCHAR(32) NOT NULL,
-  PRIMARY KEY (id));
-
-CREATE TABLE servicecomponentdesiredstate (
-  id BIGINT NOT NULL,
-  component_name VARCHAR(100) NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  desired_stack_id BIGINT NOT NULL,
-  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
-  desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(100) NOT NULL,
-  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id)
-);
+  CONSTRAINT PK_host_version PRIMARY KEY (id),
+  CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
 
 CREATE TABLE servicedesiredstate (
   cluster_id BIGINT NOT NULL,
@@ -193,8 +242,20 @@ CREATE TABLE servicedesiredstate (
   service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  PRIMARY KEY (cluster_id, service_name)
-);
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+
+CREATE TABLE adminprincipaltype (
+  principal_type_id INTEGER NOT NULL,
+  principal_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminprincipaltype PRIMARY KEY (principal_type_id));
+
+CREATE TABLE adminprincipal (
+  principal_id BIGINT NOT NULL,
+  principal_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminprincipal PRIMARY KEY (principal_id),
+  CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id));
 
 CREATE TABLE users (
   user_id INTEGER,
@@ -206,25 +267,79 @@ CREATE TABLE users (
   user_password VARCHAR(255),
   active INTEGER NOT NULL DEFAULT 1,
   active_widget_layouts VARCHAR(1024) DEFAULT NULL,
-  PRIMARY KEY (user_id));
+  CONSTRAINT PK_users PRIMARY KEY (user_id),
+  CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type));
 
 CREATE TABLE groups (
   group_id INTEGER,
   principal_id BIGINT NOT NULL,
   group_name VARCHAR(255) NOT NULL,
   ldap_group INTEGER NOT NULL DEFAULT 0,
-  PRIMARY KEY (group_id));
+  CONSTRAINT PK_groups PRIMARY KEY (group_id),
+  CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group));
 
 CREATE TABLE members (
   member_id INTEGER,
   group_id INTEGER NOT NULL,
   user_id INTEGER NOT NULL,
-  PRIMARY KEY (member_id));
+  CONSTRAINT PK_members PRIMARY KEY (member_id),
+  CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id),
+  CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id),
+  CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id));
 
-CREATE TABLE execution_command (
-  task_id BIGINT NOT NULL,
-  command LONGBLOB,
-  PRIMARY KEY (task_id));
+CREATE TABLE requestschedule (
+  schedule_id bigint,
+  cluster_id BIGINT NOT NULL,
+  description varchar(255),
+  status varchar(255),
+  batch_separation_seconds smallint,
+  batch_toleration_limit smallint,
+  create_user varchar(255),
+  create_timestamp bigint,
+  update_user varchar(255),
+  update_timestamp bigint,
+  minutes varchar(10),
+  hours varchar(10),
+  days_of_month varchar(10),
+  month varchar(10),
+  day_of_week varchar(10),
+  yearToSchedule varchar(10),
+  startTime varchar(50),
+  endTime varchar(50),
+  last_execution_status varchar(255),
+  CONSTRAINT PK_requestschedule PRIMARY KEY (schedule_id));
+
+CREATE TABLE request (
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT,
+  request_schedule_id BIGINT,
+  command_name VARCHAR(255),
+  create_time BIGINT NOT NULL,
+  end_time BIGINT NOT NULL,
+  exclusive_execution TINYINT(1) NOT NULL DEFAULT 0,
+  inputs LONGBLOB,
+  request_context VARCHAR(255),
+  request_type VARCHAR(255),
+  start_time BIGINT NOT NULL,
+  status VARCHAR(255),
+  CONSTRAINT PK_request PRIMARY KEY (request_id),
+  CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id));
+
+CREATE TABLE stage (
+  stage_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT,
+  skippable SMALLINT DEFAULT 0 NOT NULL,
+  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
+  log_info VARCHAR(255) NOT NULL,
+  request_context VARCHAR(255),
+  cluster_host_info LONGBLOB,
+  command_params LONGBLOB,
+  host_params LONGBLOB,
+  CONSTRAINT PK_stage PRIMARY KEY (stage_id, request_id),
+  CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE host_role_command (
   task_id BIGINT NOT NULL,
@@ -250,42 +365,23 @@ CREATE TABLE host_role_command (
   structured_out LONGBLOB,
   command_detail VARCHAR(255),
   custom_command_name VARCHAR(255),
-  PRIMARY KEY (task_id));
+  CONSTRAINT PK_host_role_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
+
+CREATE TABLE execution_command (
+  task_id BIGINT NOT NULL,
+  command LONGBLOB,
+  CONSTRAINT PK_execution_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE role_success_criteria (
   role VARCHAR(255) NOT NULL,
   request_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   success_factor DOUBLE NOT NULL,
-  PRIMARY KEY (role, request_id, stage_id));
-
-CREATE TABLE stage (
-  stage_id BIGINT NOT NULL,
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT,
-  skippable SMALLINT DEFAULT 0 NOT NULL,
-  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
-  log_info VARCHAR(255) NOT NULL,
-  request_context VARCHAR(255),
-  cluster_host_info LONGBLOB,
-  command_params LONGBLOB,
-  host_params LONGBLOB,
-  PRIMARY KEY (stage_id, request_id));
-
-CREATE TABLE request (
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT,
-  request_schedule_id BIGINT,
-  command_name VARCHAR(255),
-  create_time BIGINT NOT NULL,
-  end_time BIGINT NOT NULL,
-  exclusive_execution TINYINT(1) NOT NULL DEFAULT 0,
-  inputs LONGBLOB,
-  request_context VARCHAR(255),
-  request_type VARCHAR(255),
-  start_time BIGINT NOT NULL,
-  status VARCHAR(255),
-  PRIMARY KEY (request_id));
+  CONSTRAINT PK_role_success_criteria PRIMARY KEY (role, request_id, stage_id),
+  CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
 
 CREATE TABLE requestresourcefilter (
   filter_id BIGINT NOT NULL,
@@ -293,7 +389,8 @@ CREATE TABLE requestresourcefilter (
   service_name VARCHAR(255),
   component_name VARCHAR(255),
   hosts LONGBLOB,
-  PRIMARY KEY (filter_id));
+  CONSTRAINT PK_requestresourcefilter PRIMARY KEY (filter_id),
+  CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE requestoperationlevel (
   operation_level_id BIGINT NOT NULL,
@@ -303,11 +400,12 @@ CREATE TABLE requestoperationlevel (
   service_name VARCHAR(255),
   host_component_name VARCHAR(255),
   host_id BIGINT NULL,      -- unlike most host_id columns, this one allows NULLs because the request can be at the service level
-  PRIMARY KEY (operation_level_id));
+  CONSTRAINT PK_requestoperationlevel PRIMARY KEY (operation_level_id),
+  CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE key_value_store (`key` VARCHAR(255),
   `value` LONGTEXT,
-  PRIMARY KEY (`key`));
+  CONSTRAINT PK_key_value_store PRIMARY KEY (`key`));
 
 CREATE TABLE clusterconfigmapping (
   type_name VARCHAR(255) NOT NULL,
@@ -316,7 +414,8 @@ CREATE TABLE clusterconfigmapping (
   selected INTEGER NOT NULL DEFAULT 0,
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (type_name, create_timestamp, cluster_id));
+  CONSTRAINT PK_clusterconfigmapping PRIMARY KEY (type_name, create_timestamp, cluster_id),
+  CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE hostconfigmapping (
   create_timestamp BIGINT NOT NULL,
@@ -327,31 +426,26 @@ CREATE TABLE hostconfigmapping (
   service_name VARCHAR(255),
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (create_timestamp, host_id, cluster_id, type_name));
+  CONSTRAINT PK_hostconfigmapping PRIMARY KEY (create_timestamp, host_id, cluster_id, type_name),
+  CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE metainfo (
   `metainfo_key` VARCHAR(255),
   `metainfo_value` LONGTEXT,
-  PRIMARY KEY (`metainfo_key`));
+  CONSTRAINT PK_metainfo PRIMARY KEY (`metainfo_key`));
 
 CREATE TABLE ClusterHostMapping (
   cluster_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY (cluster_id, host_id));
+  CONSTRAINT PK_ClusterHostMapping PRIMARY KEY (cluster_id, host_id),
+  CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE ambari_sequences (
   sequence_name VARCHAR(255),
   sequence_value DECIMAL(38) NOT NULL,
-  PRIMARY KEY (sequence_name));
-
-CREATE TABLE confgroupclusterconfigmapping (
-  config_group_id BIGINT NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  config_type VARCHAR(100) NOT NULL,
-  version_tag VARCHAR(100) NOT NULL,
-  user_name VARCHAR(100) DEFAULT '_db',
-  create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY(config_group_id, cluster_id, config_type));
+  CONSTRAINT PK_ambari_sequences PRIMARY KEY (sequence_name));
 
 CREATE TABLE configgroup (
   group_id BIGINT,
@@ -361,34 +455,26 @@ CREATE TABLE configgroup (
   description VARCHAR(1024),
   create_timestamp BIGINT NOT NULL,
   service_name VARCHAR(255),
-  PRIMARY KEY(group_id));
+  CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
+
+CREATE TABLE confgroupclusterconfigmapping (
+  config_group_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  config_type VARCHAR(100) NOT NULL,
+  version_tag VARCHAR(100) NOT NULL,
+  user_name VARCHAR(100) DEFAULT '_db',
+  create_timestamp BIGINT NOT NULL,
+  CONSTRAINT PK_confgroupclustercfgmapping PRIMARY KEY (config_group_id, cluster_id, config_type),
+  CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_confg FOREIGN KEY (cluster_id, config_type, version_tag) REFERENCES clusterconfig (cluster_id, type_name, version_tag));
 
 CREATE TABLE configgrouphostmapping (
   config_group_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(config_group_id, host_id));
-
-CREATE TABLE requestschedule (
-  schedule_id bigint,
-  cluster_id BIGINT NOT NULL,
-  description varchar(255),
-  status varchar(255),
-  batch_separation_seconds smallint,
-  batch_toleration_limit smallint,
-  create_user varchar(255),
-  create_timestamp bigint,
-  update_user varchar(255),
-  update_timestamp bigint,
-  minutes varchar(10),
-  hours varchar(10),
-  days_of_month varchar(10),
-  month varchar(10),
-  day_of_week varchar(10),
-  yearToSchedule varchar(10),
-  startTime varchar(50),
-  endTime varchar(50),
-  last_execution_status varchar(255),
-  PRIMARY KEY(schedule_id));
+  CONSTRAINT PK_configgrouphostmapping PRIMARY KEY (config_group_id, host_id),
+  CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE requestschedulebatchrequest (
   schedule_id bigint,
@@ -400,35 +486,39 @@ CREATE TABLE requestschedulebatchrequest (
   request_status varchar(255),
   return_code smallint,
   return_message varchar(2000),
-  PRIMARY KEY(schedule_id, batch_id));
+  CONSTRAINT PK_requestschedulebatchrequest PRIMARY KEY (schedule_id, batch_id),
+  CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id));
 
 CREATE TABLE blueprint (
   blueprint_name VARCHAR(255) NOT NULL,
   stack_id BIGINT NOT NULL,
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_descriptor_reference VARCHAR(255),
-  PRIMARY KEY(blueprint_name)
-);
+  CONSTRAINT PK_blueprint PRIMARY KEY (blueprint_name),
+  CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id));
 
 CREATE TABLE hostgroup (
   blueprint_name VARCHAR(100) NOT NULL,
   name VARCHAR(100) NOT NULL,
   cardinality VARCHAR(255) NOT NULL,
-  PRIMARY KEY(blueprint_name, name));
+  CONSTRAINT PK_hostgroup PRIMARY KEY (blueprint_name, name),
+  CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE hostgroup_component (
   blueprint_name VARCHAR(100) NOT NULL,
   hostgroup_name VARCHAR(100) NOT NULL,
   name VARCHAR(100) NOT NULL,
   provision_action VARCHAR(100),
-  PRIMARY KEY(blueprint_name, hostgroup_name, name));
+  CONSTRAINT PK_hostgroup_component PRIMARY KEY (blueprint_name, hostgroup_name, name),
+  CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup(blueprint_name, name));
 
 CREATE TABLE blueprint_configuration (
   blueprint_name VARCHAR(100) NOT NULL,
   type_name VARCHAR(100) NOT NULL,
   config_data LONGTEXT NOT NULL,
   config_attributes LONGTEXT,
-  PRIMARY KEY(blueprint_name, type_name));
+  CONSTRAINT PK_blueprint_configuration PRIMARY KEY (blueprint_name, type_name),
+  CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE blueprint_setting (
   id BIGINT NOT NULL,
@@ -445,7 +535,8 @@ CREATE TABLE hostgroup_configuration (
   type_name VARCHAR(100) NOT NULL,
   config_data LONGTEXT NOT NULL,
   config_attributes LONGTEXT,
-  PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
+  CONSTRAINT PK_hostgroup_configuration PRIMARY KEY (blueprint_name, hostgroup_name, type_name),
+  CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name));
 
 CREATE TABLE viewmain (
   view_name VARCHAR(255) NOT NULL,
@@ -459,16 +550,8 @@ CREATE TABLE viewmain (
   archive VARCHAR(255),
   mask VARCHAR(255),
   system_view TINYINT(1) NOT NULL DEFAULT 0,
-  PRIMARY KEY(view_name));
-
-CREATE TABLE viewinstancedata (
-  view_instance_id BIGINT,
-  view_name VARCHAR(100) NOT NULL,
-  view_instance_name VARCHAR(100) NOT NULL,
-  name VARCHAR(100) NOT NULL,
-  user_name VARCHAR(100) NOT NULL,
-  value VARCHAR(2000),
-  PRIMARY KEY(VIEW_INSTANCE_ID, NAME, USER_NAME));
+  CONSTRAINT PK_viewmain PRIMARY KEY (view_name),
+  CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE viewinstance (
   view_instance_id BIGINT,
@@ -484,14 +567,29 @@ CREATE TABLE viewinstance (
   alter_names TINYINT(1) NOT NULL DEFAULT 1,
   cluster_handle VARCHAR(255),
   short_url VARCHAR (255),
-  PRIMARY KEY(view_instance_id));
+  CONSTRAINT PK_viewinstance PRIMARY KEY (view_instance_id),
+  CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name),
+  CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id),
+  CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name),
+  CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name));
+
+CREATE TABLE viewinstancedata (
+  view_instance_id BIGINT,
+  view_name VARCHAR(100) NOT NULL,
+  view_instance_name VARCHAR(100) NOT NULL,
+  name VARCHAR(100) NOT NULL,
+  user_name VARCHAR(100) NOT NULL,
+  value VARCHAR(2000),
+  CONSTRAINT PK_viewinstancedata PRIMARY KEY (VIEW_INSTANCE_ID, NAME, USER_NAME),
+  CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name));
 
 CREATE TABLE viewinstanceproperty (
   view_name VARCHAR(100) NOT NULL,
   view_instance_name VARCHAR(100) NOT NULL,
   name VARCHAR(100) NOT NULL,
   value VARCHAR(2000),
-  PRIMARY KEY(view_name, view_instance_name, name));
+  CONSTRAINT PK_viewinstanceproperty PRIMARY KEY (view_name, view_instance_name, name),
+  CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE viewparameter (
   view_name VARCHAR(100) NOT NULL,
@@ -503,7 +601,8 @@ CREATE TABLE viewparameter (
   cluster_config VARCHAR(255),
   required CHAR(1),
   masked CHAR(1),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewparameter PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewresource (
   view_name VARCHAR(100) NOT NULL,
@@ -514,7 +613,8 @@ CREATE TABLE viewresource (
   provider VARCHAR(255),
   service VARCHAR(255),
   resource VARCHAR(255),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewresource PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewentity (
   id BIGINT NOT NULL,
@@ -522,27 +622,8 @@ CREATE TABLE viewentity (
   view_instance_name VARCHAR(100) NOT NULL,
   class_name VARCHAR(255) NOT NULL,
   id_property VARCHAR(255),
-  PRIMARY KEY(id));
-
-CREATE TABLE adminresourcetype (
-  resource_type_id INTEGER NOT NULL,
-  resource_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(resource_type_id));
-
-CREATE TABLE adminresource (
-  resource_id BIGINT NOT NULL,
-  resource_type_id INTEGER NOT NULL,
-  PRIMARY KEY(resource_id));
-
-CREATE TABLE adminprincipaltype (
-  principal_type_id INTEGER NOT NULL,
-  principal_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(principal_type_id));
-
-CREATE TABLE adminprincipal (
-  principal_id BIGINT NOT NULL,
-  principal_type_id INTEGER NOT NULL,
-  PRIMARY KEY(principal_id));
+  CONSTRAINT PK_viewentity PRIMARY KEY (id),
+  CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE adminpermission (
   permission_id BIGINT NOT NULL,
@@ -550,38 +631,31 @@ CREATE TABLE adminpermission (
   resource_type_id INTEGER NOT NULL,
   permission_label VARCHAR(255),
   sort_order SMALLINT NOT NULL DEFAULT 1,
-  PRIMARY KEY(permission_id));
+  CONSTRAINT PK_adminpermission PRIMARY KEY (permission_id),
+  CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id),
+  CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id));
 
 CREATE TABLE roleauthorization (
   authorization_id VARCHAR(100) NOT NULL,
   authorization_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(authorization_id));
+  CONSTRAINT PK_roleauthorization PRIMARY KEY (authorization_id));
 
 CREATE TABLE permission_roleauthorization (
   permission_id BIGINT NOT NULL,
   authorization_id VARCHAR(100) NOT NULL,
-  PRIMARY KEY(permission_id, authorization_id));
+  CONSTRAINT PK_permsn_roleauthorization PRIMARY KEY (permission_id, authorization_id),
+  CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id),
+  CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id));
 
 CREATE TABLE adminprivilege (
   privilege_id BIGINT,
   permission_id BIGINT NOT NULL,
   resource_id BIGINT NOT NULL,
   principal_id BIGINT NOT NULL,
-  PRIMARY KEY(privilege_id));
-
-CREATE TABLE repo_version (
-  repo_version_id BIGINT NOT NULL,
-  stack_id BIGINT NOT NULL,
-  version VARCHAR(255) NOT NULL,
-  display_name VARCHAR(128) NOT NULL,
-  repositories MEDIUMTEXT NOT NULL,
-  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
-  version_url VARCHAR(1024),
-  version_xml MEDIUMTEXT,
-  version_xsd VARCHAR(512),
-  parent_id BIGINT,
-  PRIMARY KEY(repo_version_id)
-);
+  CONSTRAINT PK_adminprivilege PRIMARY KEY (privilege_id),
+  CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id),
+  CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE widget (
   id BIGINT NOT NULL,
@@ -596,7 +670,7 @@ CREATE TABLE widget (
   widget_values LONGTEXT,
   properties LONGTEXT,
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout (
@@ -607,21 +681,22 @@ CREATE TABLE widget_layout (
   user_name VARCHAR(255) NOT NULL,
   display_name VARCHAR(255),
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget_layout PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout_user_widget (
   widget_layout_id BIGINT NOT NULL,
   widget_id BIGINT NOT NULL,
   widget_order smallint,
-  PRIMARY KEY(widget_layout_id, widget_id)
-);
+  CONSTRAINT PK_widget_layout_user_widget PRIMARY KEY (widget_layout_id, widget_id),
+  CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id),
+  CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id));
 
 CREATE TABLE artifact (
   artifact_name VARCHAR(100) NOT NULL,
   foreign_keys VARCHAR(100) NOT NULL,
   artifact_data LONGTEXT NOT NULL,
-  PRIMARY KEY(artifact_name, foreign_keys));
+  CONSTRAINT PK_artifact PRIMARY KEY (artifact_name, foreign_keys));
 
 CREATE TABLE topology_request (
   id BIGINT NOT NULL,
@@ -631,8 +706,8 @@ CREATE TABLE topology_request (
   cluster_properties LONGTEXT,
   cluster_attributes LONGTEXT,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_request PRIMARY KEY (id),
+  CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id));
 
 CREATE TABLE topology_hostgroup (
   id BIGINT NOT NULL,
@@ -640,8 +715,8 @@ CREATE TABLE topology_hostgroup (
   group_properties LONGTEXT,
   group_attributes LONGTEXT,
   request_id BIGINT NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_hostgroup PRIMARY KEY (id),
+  CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_info (
   id BIGINT NOT NULL,
@@ -651,15 +726,16 @@ CREATE TABLE topology_host_info (
   host_count INTEGER,
   predicate VARCHAR(2048),
   rack_info VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_info PRIMARY KEY (id),
+  CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id));
 
 CREATE TABLE topology_logical_request (
   id BIGINT NOT NULL,
   request_id BIGINT NOT NULL,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_request PRIMARY KEY (id),
+  CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_request (
   id BIGINT NOT NULL,
@@ -667,23 +743,25 @@ CREATE TABLE topology_host_request (
   group_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   host_name VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_request PRIMARY KEY (id),
+  CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id));
 
 CREATE TABLE topology_host_task (
   id BIGINT NOT NULL,
   host_request_id BIGINT NOT NULL,
   type VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_task PRIMARY KEY (id),
+  CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id));
 
 CREATE TABLE topology_logical_task (
   id BIGINT NOT NULL,
   host_task_id BIGINT NOT NULL,
   physical_task_id BIGINT,
   component VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_task PRIMARY KEY (id),
+  CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id),
+  CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE setting (
   id BIGINT NOT NULL,
@@ -692,7 +770,7 @@ CREATE TABLE setting (
   content TEXT NOT NULL,
   updated_by VARCHAR(255) NOT NULL DEFAULT '_db',
   update_timestamp BIGINT NOT NULL,
-  PRIMARY KEY (id)
+  CONSTRAINT PK_setting PRIMARY KEY (id)
 );
 
 
@@ -710,7 +788,7 @@ CREATE TABLE upgrade (
   skip_sc_failures TINYINT(1) NOT NULL DEFAULT 0,
   downgrade_allowed TINYINT(1) NOT NULL DEFAULT 1,
   suspended TINYINT(1) DEFAULT 0 NOT NULL,
-  PRIMARY KEY (upgrade_id),
+  CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
@@ -720,7 +798,7 @@ CREATE TABLE upgrade_group (
   upgrade_id BIGINT NOT NULL,
   group_name VARCHAR(255) DEFAULT '' NOT NULL,
   group_title VARCHAR(1024) DEFAULT '' NOT NULL,
-  PRIMARY KEY (upgrade_group_id),
+  CONSTRAINT PK_upgrade_group PRIMARY KEY (upgrade_group_id),
   FOREIGN KEY (upgrade_id) REFERENCES upgrade(upgrade_id)
 );
 
@@ -732,7 +810,7 @@ CREATE TABLE upgrade_item (
   hosts TEXT,
   tasks TEXT,
   item_text VARCHAR(1024),
-  PRIMARY KEY (upgrade_item_id),
+  CONSTRAINT PK_upgrade_item PRIMARY KEY (upgrade_item_id),
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
@@ -755,132 +833,34 @@ CREATE INDEX idx_hrc_request_id ON host_role_command (request_id);
 CREATE INDEX idx_hrc_status_role ON host_role_command (status, role);
 CREATE INDEX idx_rsc_request_id ON role_success_criteria (request_id);
 
--- altering tables by creating unique constraints----------
-ALTER TABLE users ADD CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type);
-ALTER TABLE groups ADD CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group);
-ALTER TABLE members ADD CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version);
-ALTER TABLE hosts ADD CONSTRAINT UQ_hosts_host_name UNIQUE (host_name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name);
-ALTER TABLE serviceconfig ADD CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version);
-ALTER TABLE adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version);
-ALTER TABLE stack ADD CONSTRAINT unq_stack UNIQUE (stack_name, stack_version);
-
--- altering tables by creating foreign keys----------
--- Note, Oracle has a limitation of 32 chars in the FK name, and we should use the same FK name in all DB types.
-ALTER TABLE members ADD CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id);
-ALTER TABLE members ADD CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id);
+-------- altering tables by creating foreign keys ----------
+-- #1: This should always be an exceptional case. FK constraints should be inlined in table definitions when possible
+--     (reorder table definitions if necessary).
+-- #2: Oracle has a limitation of 30 chars in the constraint names name, and we should use the same constraint names in all DB types.
 ALTER TABLE clusters ADD CONSTRAINT FK_clusters_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterservices ADD CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterconfigmapping ADD CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE execution_command ADD CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE role_success_criteria ADD CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE configgroup ADD CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_confg FOREIGN KEY (cluster_id, config_type, version_tag) REFERENCES clusterconfig (cluster_id, type_name, version_tag);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE requestschedulebatchrequest ADD CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE hostgroup ADD CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_component ADD CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup(blueprint_name, name);
-ALTER TABLE blueprint_configuration ADD CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_configuration ADD CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
-ALTER TABLE requestresourcefilter ADD CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE requestoperationlevel ADD CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE viewparameter ADD CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewresource ADD CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstanceproperty ADD CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE viewinstancedata ADD CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name);
-ALTER TABLE viewentity ADD CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE adminresource ADD CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE adminprincipal ADD CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id);
-ALTER TABLE adminpermission ADD CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE viewmain ADD CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE users ADD CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE groups ADD CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id);
-ALTER TABLE topology_request ADD CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id);
-ALTER TABLE topology_hostgroup ADD CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE topology_logical_request ADD CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_task ADD CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE serviceconfig ADD CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE blueprint ADD CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE repo_version ADD CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
 
 -- Kerberos
 CREATE TABLE kerberos_principal (
   principal_name VARCHAR(255) NOT NULL,
   is_service SMALLINT NOT NULL DEFAULT 1,
   cached_keytab_path VARCHAR(255),
-  PRIMARY KEY(principal_name)
+  CONSTRAINT PK_kerberos_principal PRIMARY KEY (principal_name)
 );
 
 CREATE TABLE kerberos_principal_host (
   principal_name VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY(principal_name, host_id)
-);
+  CONSTRAINT PK_kerberos_principal_host PRIMARY KEY (principal_name, host_id),
+  CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name));
 
 CREATE TABLE kerberos_descriptor
 (
    kerberos_descriptor_name   VARCHAR(255) NOT NULL,
    kerberos_descriptor        TEXT NOT NULL,
-   PRIMARY KEY (kerberos_descriptor_name)
+   CONSTRAINT PK_kerberos_descriptor PRIMARY KEY (kerberos_descriptor_name)
 );
 
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name);
 -- Kerberos (end)
 
 -- Alerting Framework
@@ -902,7 +882,7 @@ CREATE TABLE alert_definition (
   ignore_host SMALLINT DEFAULT 0 NOT NULL,
   repeat_tolerance INTEGER DEFAULT 1 NOT NULL,
   repeat_tolerance_enabled SMALLINT DEFAULT 0 NOT NULL,
-  PRIMARY KEY (definition_id),
+  CONSTRAINT PK_alert_definition PRIMARY KEY (definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   CONSTRAINT uni_alert_def_name UNIQUE(cluster_id,definition_name)
 );
@@ -919,7 +899,7 @@ CREATE TABLE alert_history (
   alert_label VARCHAR(1024),
   alert_state VARCHAR(255) NOT NULL,
   alert_text TEXT,
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_history PRIMARY KEY (alert_id),
   FOREIGN KEY (alert_definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
 );
@@ -934,7 +914,7 @@ CREATE TABLE alert_current (
   latest_text TEXT,
   occurrences BIGINT NOT NULL DEFAULT 1,
   firmness VARCHAR(255) NOT NULL DEFAULT 'HARD',
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_current PRIMARY KEY (alert_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -945,7 +925,7 @@ CREATE TABLE alert_group (
   group_name VARCHAR(255) NOT NULL,
   is_default SMALLINT NOT NULL DEFAULT 0,
   service_name VARCHAR(255),
-  PRIMARY KEY (group_id),
+  CONSTRAINT PK_alert_group PRIMARY KEY (group_id),
   CONSTRAINT uni_alert_group_name UNIQUE(cluster_id,group_name)
 );
 
@@ -956,7 +936,7 @@ CREATE TABLE alert_target (
   properties TEXT,
   description VARCHAR(1024),
   is_global SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY (target_id)
+  CONSTRAINT PK_alert_target PRIMARY KEY (target_id)
 );
 
 CREATE TABLE alert_target_states (
@@ -968,7 +948,7 @@ CREATE TABLE alert_target_states (
 CREATE TABLE alert_group_target (
   group_id BIGINT NOT NULL,
   target_id BIGINT NOT NULL,
-  PRIMARY KEY (group_id, target_id),
+  CONSTRAINT PK_alert_group_target PRIMARY KEY (group_id, target_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id)
 );
@@ -976,7 +956,7 @@ CREATE TABLE alert_group_target (
 CREATE TABLE alert_grouping (
   definition_id BIGINT NOT NULL,
   group_id BIGINT NOT NULL,
-  PRIMARY KEY (group_id, definition_id),
+  CONSTRAINT PK_alert_grouping PRIMARY KEY (group_id, definition_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id)
 );
@@ -987,7 +967,7 @@ CREATE TABLE alert_notice (
   history_id BIGINT NOT NULL,
   notify_state VARCHAR(255) NOT NULL,
   uuid VARCHAR(64) NOT NULL UNIQUE,
-  PRIMARY KEY (notification_id),
+  CONSTRAINT PK_alert_notice PRIMARY KEY (notification_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -1512,7 +1492,7 @@ CREATE TABLE workflow (
   numJobsTotal INTEGER, numJobsCompleted INTEGER,
   inputBytes BIGINT, outputBytes BIGINT,
   duration BIGINT,
-  PRIMARY KEY (workflowId),
+  CONSTRAINT PK_workflow PRIMARY KEY (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow(workflowId) ON DELETE CASCADE
 );
 
@@ -1526,7 +1506,7 @@ CREATE TABLE job (
   mapsRuntime BIGINT, reducesRuntime BIGINT,
   mapCounters TEXT, reduceCounters TEXT, jobCounters TEXT,
   inputBytes BIGINT, outputBytes BIGINT,
-  PRIMARY KEY(jobId),
+  CONSTRAINT PK_job PRIMARY KEY (jobId),
   FOREIGN KEY(workflowId) REFERENCES workflow(workflowId) ON DELETE CASCADE
 );
 
@@ -1534,7 +1514,7 @@ CREATE TABLE task (
   taskId VARCHAR(255), jobId VARCHAR(255), taskType TEXT, splits TEXT,
   startTime BIGINT, finishTime BIGINT, status TEXT, error TEXT, counters TEXT,
   failedAttempt TEXT,
-  PRIMARY KEY(taskId),
+  CONSTRAINT PK_task PRIMARY KEY (taskId),
   FOREIGN KEY(jobId) REFERENCES job(jobId) ON DELETE CASCADE
 );
 
@@ -1545,7 +1525,7 @@ CREATE TABLE taskAttempt (
   locality TEXT, avataar TEXT,
   status TEXT, error TEXT, counters TEXT,
   inputBytes BIGINT, outputBytes BIGINT,
-  PRIMARY KEY(taskAttemptId),
+  CONSTRAINT PK_taskAttempt PRIMARY KEY (taskAttemptId),
   FOREIGN KEY(jobId) REFERENCES job(jobId) ON DELETE CASCADE,
   FOREIGN KEY(taskId) REFERENCES task(taskId) ON DELETE CASCADE
 );


[3/8] ambari git commit: AMBARI-15915. SQL constraints: Inline constraints and name them in CREATE table. (Balazs Bence Sari via stoader)

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/346dfe7e/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
index 6e600c7..d2737d7 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -20,8 +20,19 @@ CREATE TABLE stack(
   stack_id NUMERIC(19) NOT NULL,
   stack_name VARCHAR(255) NOT NULL,
   stack_version VARCHAR(255) NOT NULL,
-  PRIMARY KEY (stack_id)
-);
+  CONSTRAINT PK_stack PRIMARY KEY (stack_id),
+  CONSTRAINT unq_stack UNIQUE (stack_name, stack_version));
+
+CREATE TABLE adminresourcetype (
+  resource_type_id INTEGER NOT NULL,
+  resource_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminresourcetype PRIMARY KEY (resource_type_id));
+
+CREATE TABLE adminresource (
+  resource_id NUMERIC(19) NOT NULL,
+  resource_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminresource PRIMARY KEY (resource_id),
+  CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE clusters (
   cluster_id NUMERIC(19) NOT NULL,
@@ -33,8 +44,9 @@ CREATE TABLE clusters (
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   desired_cluster_state VARCHAR(255) NOT NULL,
   desired_stack_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusters PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE clusterconfig (
   config_id NUMERIC(19) NOT NULL,
@@ -46,8 +58,11 @@ CREATE TABLE clusterconfig (
   config_data TEXT NOT NULL,
   config_attributes TEXT,
   create_timestamp NUMERIC(19) NOT NULL,
-  PRIMARY KEY (config_id)
-);
+  CONSTRAINT PK_clusterconfig PRIMARY KEY (config_id),
+  CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag),
+  CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version));
 
 CREATE TABLE serviceconfig (
   service_config_id NUMERIC(19) NOT NULL,
@@ -59,31 +74,74 @@ CREATE TABLE serviceconfig (
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   group_id NUMERIC(19),
   note TEXT,
-  PRIMARY KEY (service_config_id)
-);
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version));
+
+CREATE TABLE hosts (
+  host_id NUMERIC(19) NOT NULL,
+  host_name VARCHAR(255) NOT NULL,
+  cpu_count INTEGER NOT NULL,
+  cpu_info VARCHAR(255) NOT NULL,
+  discovery_status VARCHAR(2000) NOT NULL,
+  host_attributes TEXT NOT NULL,
+  ipv4 VARCHAR(255),
+  ipv6 VARCHAR(255),
+  last_registration_time NUMERIC(19) NOT NULL,
+  os_arch VARCHAR(255) NOT NULL,
+  os_info VARCHAR(1000) NOT NULL,
+  os_type VARCHAR(255) NOT NULL,
+  ph_cpu_count INTEGER,
+  public_host_name VARCHAR(255),
+  rack_info VARCHAR(255) NOT NULL,
+  total_mem NUMERIC(19) NOT NULL,
+  CONSTRAINT PK_hosts PRIMARY KEY (host_id),
+  CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
 CREATE TABLE serviceconfighosts (
   service_config_id NUMERIC(19) NOT NULL,
   host_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY(service_config_id, host_id));
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE serviceconfigmapping (
   service_config_id NUMERIC(19) NOT NULL,
   config_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY(service_config_id, config_id));
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE clusterservices (
   service_name VARCHAR(255) NOT NULL,
   cluster_id NUMERIC(19) NOT NULL,
   service_enabled INTEGER NOT NULL,
-  PRIMARY KEY (service_name, cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id NUMERIC(19) NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
   current_stack_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusterstate PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id));
+
+CREATE TABLE repo_version (
+  repo_version_id NUMERIC(19) NOT NULL,
+  stack_id NUMERIC(19) NOT NULL,
+  version VARCHAR(255) NOT NULL,
+  display_name VARCHAR(128) NOT NULL,
+  repositories TEXT NOT NULL,
+  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  version_url VARCHAR(1024),
+  version_xml TEXT,
+  version_xsd VARCHAR(512),
+  parent_id NUMERIC(19),
+  CONSTRAINT PK_repo_version PRIMARY KEY (repo_version_id),
+  CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
+  CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
 
 CREATE TABLE cluster_version (
   id NUMERIC(19) NOT NULL,
@@ -93,7 +151,23 @@ CREATE TABLE cluster_version (
   start_time NUMERIC(19) NOT NULL,
   end_time NUMERIC(19),
   user_name VARCHAR(32),
-  PRIMARY KEY (id));
+  CONSTRAINT PK_cluster_version PRIMARY KEY (id),
+  CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
+
+CREATE TABLE servicecomponentdesiredstate (
+  id NUMERIC(19) NOT NULL,
+  component_name VARCHAR(255) NOT NULL,
+  cluster_id NUMERIC(19) NOT NULL,
+  desired_stack_id NUMERIC(19) NOT NULL,
+  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
+  desired_state VARCHAR(255) NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
+  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
+  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
+  CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   cluster_id NUMERIC(19) NOT NULL,
@@ -106,8 +180,10 @@ CREATE TABLE hostcomponentdesiredstate (
   maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
   restart_required BIT NOT NULL DEFAULT 0,
-  PRIMARY KEY (cluster_id, component_name, host_id, service_name)
-);
+  CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (cluster_id, component_name, host_id, service_name),
+  CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE TABLE hostcomponentstate (
   id NUMERIC(19) NOT NULL,
@@ -120,30 +196,13 @@ CREATE TABLE hostcomponentstate (
   service_name VARCHAR(255) NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_hostcomponentstate PRIMARY KEY (id),
+  CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, component_name, service_name, cluster_id);
 
-CREATE TABLE hosts (
-  host_id NUMERIC(19) NOT NULL,
-  host_name VARCHAR(255) NOT NULL,
-  cpu_count INTEGER NOT NULL,
-  cpu_info VARCHAR(255) NOT NULL,
-  discovery_status VARCHAR(2000) NOT NULL,
-  host_attributes TEXT NOT NULL,
-  ipv4 VARCHAR(255),
-  ipv6 VARCHAR(255),
-  last_registration_time NUMERIC(19) NOT NULL,
-  os_arch VARCHAR(255) NOT NULL,
-  os_info VARCHAR(1000) NOT NULL,
-  os_type VARCHAR(255) NOT NULL,
-  ph_cpu_count INTEGER,
-  public_host_name VARCHAR(255),
-  rack_info VARCHAR(255) NOT NULL,
-  total_mem NUMERIC(19) NOT NULL,
-  PRIMARY KEY (host_id));
-
 CREATE TABLE hoststate (
   agent_version VARCHAR(255) NOT NULL,
   available_mem NUMERIC(19) NOT NULL,
@@ -152,27 +211,17 @@ CREATE TABLE hoststate (
   host_id NUMERIC(19) NOT NULL,
   time_in_state NUMERIC(19) NOT NULL,
   maintenance_state VARCHAR(512),
-  PRIMARY KEY (host_id));
+  CONSTRAINT PK_hoststate PRIMARY KEY (host_id),
+  CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE host_version (
   id NUMERIC(19) NOT NULL,
   repo_version_id NUMERIC(19) NOT NULL,
   host_id NUMERIC(19) NOT NULL,
   state VARCHAR(32) NOT NULL,
-  PRIMARY KEY (id));
-
-CREATE TABLE servicecomponentdesiredstate (
-  id NUMERIC(19) NOT NULL,
-  component_name VARCHAR(255) NOT NULL,
-  cluster_id NUMERIC(19) NOT NULL,
-  desired_stack_id NUMERIC(19) NOT NULL,
-  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
-  desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
-  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id)
-);
+  CONSTRAINT PK_host_version PRIMARY KEY (id),
+  CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
 
 CREATE TABLE servicedesiredstate (
   cluster_id NUMERIC(19) NOT NULL,
@@ -182,8 +231,20 @@ CREATE TABLE servicedesiredstate (
   service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  PRIMARY KEY (cluster_id, service_name)
-);
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+
+CREATE TABLE adminprincipaltype (
+  principal_type_id INTEGER NOT NULL,
+  principal_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminprincipaltype PRIMARY KEY (principal_type_id));
+
+CREATE TABLE adminprincipal (
+  principal_id NUMERIC(19) NOT NULL,
+  principal_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminprincipal PRIMARY KEY (principal_id),
+  CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id));
 
 CREATE TABLE users (
   user_id INTEGER,
@@ -195,25 +256,79 @@ CREATE TABLE users (
   user_password VARCHAR(255),
   active INTEGER NOT NULL DEFAULT 1,
   active_widget_layouts VARCHAR(1024) DEFAULT NULL,
-  PRIMARY KEY (user_id));
+  CONSTRAINT PK_users PRIMARY KEY (user_id),
+  CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type));
 
 CREATE TABLE groups (
   group_id INTEGER,
   principal_id NUMERIC(19) NOT NULL,
   group_name VARCHAR(255) NOT NULL,
   ldap_group INTEGER NOT NULL DEFAULT 0,
-  PRIMARY KEY (group_id));
+  CONSTRAINT PK_groups PRIMARY KEY (group_id),
+  CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group));
 
 CREATE TABLE members (
   member_id INTEGER,
   group_id INTEGER NOT NULL,
   user_id INTEGER NOT NULL,
-  PRIMARY KEY (member_id));
+  CONSTRAINT PK_members PRIMARY KEY (member_id),
+  CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id),
+  CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id),
+  CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id));
 
-CREATE TABLE execution_command (
-  task_id NUMERIC(19) NOT NULL,
-  command IMAGE,
-  PRIMARY KEY (task_id));
+CREATE TABLE requestschedule (
+  schedule_id NUMERIC(19),
+  cluster_id NUMERIC(19) NOT NULL,
+  description VARCHAR(255),
+  status VARCHAR(255),
+  batch_separation_seconds smallint,
+  batch_toleration_limit smallint,
+  create_user VARCHAR(255),
+  create_timestamp NUMERIC(19),
+  update_user VARCHAR(255),
+  update_timestamp NUMERIC(19),
+  minutes VARCHAR(10),
+  hours VARCHAR(10),
+  days_of_month VARCHAR(10),
+  month VARCHAR(10),
+  day_of_week VARCHAR(10),
+  yearToSchedule VARCHAR(10),
+  startTime VARCHAR(50),
+  endTime VARCHAR(50),
+  last_execution_status VARCHAR(255),
+  CONSTRAINT PK_requestschedule PRIMARY KEY (schedule_id));
+
+CREATE TABLE request (
+  request_id NUMERIC(19) NOT NULL,
+  cluster_id NUMERIC(19),
+  request_schedule_id NUMERIC(19),
+  command_name VARCHAR(255),
+  create_time NUMERIC(19) NOT NULL,
+  end_time NUMERIC(19) NOT NULL,
+  exclusive_execution BIT NOT NULL DEFAULT 0,
+  inputs IMAGE,
+  request_context VARCHAR(255),
+  request_type VARCHAR(255),
+  start_time NUMERIC(19) NOT NULL,
+  status VARCHAR(255),
+  CONSTRAINT PK_request PRIMARY KEY (request_id),
+  CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id));
+
+CREATE TABLE stage (
+  stage_id NUMERIC(19) NOT NULL,
+  request_id NUMERIC(19) NOT NULL,
+  cluster_id NUMERIC(19),
+  skippable SMALLINT DEFAULT 0 NOT NULL,
+  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
+  log_info VARCHAR(255) NOT NULL,
+  request_context VARCHAR(255),
+  cluster_host_info IMAGE,
+  command_params IMAGE,
+  host_params IMAGE,
+  CONSTRAINT PK_stage PRIMARY KEY (stage_id, request_id),
+  CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE host_role_command (
   task_id NUMERIC(19) NOT NULL,
@@ -239,42 +354,23 @@ CREATE TABLE host_role_command (
   structured_out IMAGE,
   command_detail VARCHAR(255),
   custom_command_name VARCHAR(255),
-  PRIMARY KEY (task_id));
+  CONSTRAINT PK_host_role_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
+
+CREATE TABLE execution_command (
+  task_id NUMERIC(19) NOT NULL,
+  command IMAGE,
+  CONSTRAINT PK_execution_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE role_success_criteria (
   role VARCHAR(255) NOT NULL,
   request_id NUMERIC(19) NOT NULL,
   stage_id NUMERIC(19) NOT NULL,
   success_factor FLOAT(32) NOT NULL,
-  PRIMARY KEY (role, request_id, stage_id));
-
-CREATE TABLE stage (
-  stage_id NUMERIC(19) NOT NULL,
-  request_id NUMERIC(19) NOT NULL,
-  cluster_id NUMERIC(19),
-  skippable SMALLINT DEFAULT 0 NOT NULL,
-  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
-  log_info VARCHAR(255) NOT NULL,
-  request_context VARCHAR(255),
-  cluster_host_info IMAGE,
-  command_params IMAGE,
-  host_params IMAGE,
-  PRIMARY KEY (stage_id, request_id));
-
-CREATE TABLE request (
-  request_id NUMERIC(19) NOT NULL,
-  cluster_id NUMERIC(19),
-  request_schedule_id NUMERIC(19),
-  command_name VARCHAR(255),
-  create_time NUMERIC(19) NOT NULL,
-  end_time NUMERIC(19) NOT NULL,
-  exclusive_execution BIT NOT NULL DEFAULT 0,
-  inputs IMAGE,
-  request_context VARCHAR(255),
-  request_type VARCHAR(255),
-  start_time NUMERIC(19) NOT NULL,
-  status VARCHAR(255),
-  PRIMARY KEY (request_id));
+  CONSTRAINT PK_role_success_criteria PRIMARY KEY (role, request_id, stage_id),
+  CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
 
 CREATE TABLE requestresourcefilter (
   filter_id NUMERIC(19) NOT NULL,
@@ -282,7 +378,8 @@ CREATE TABLE requestresourcefilter (
   service_name VARCHAR(255),
   component_name VARCHAR(255),
   hosts IMAGE,
-  PRIMARY KEY (filter_id));
+  CONSTRAINT PK_requestresourcefilter PRIMARY KEY (filter_id),
+  CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE requestoperationlevel (
   operation_level_id NUMERIC(19) NOT NULL,
@@ -292,11 +389,12 @@ CREATE TABLE requestoperationlevel (
   service_name VARCHAR(255),
   host_component_name VARCHAR(255),
   host_id NUMERIC(19) NULL,      -- unlike most host_id columns, this one allows NULLs because the request can be at the service level
-  PRIMARY KEY (operation_level_id));
+  CONSTRAINT PK_requestoperationlevel PRIMARY KEY (operation_level_id),
+  CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE key_value_store ("key" VARCHAR(255),
   "value" TEXT,
-  PRIMARY KEY ("key"));
+  CONSTRAINT PK_key_value_store PRIMARY KEY ("key"));
 
 CREATE TABLE clusterconfigmapping (
   type_name VARCHAR(255) NOT NULL,
@@ -305,7 +403,8 @@ CREATE TABLE clusterconfigmapping (
   selected INTEGER NOT NULL DEFAULT 0,
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (type_name, create_timestamp, cluster_id));
+  CONSTRAINT PK_clusterconfigmapping PRIMARY KEY (type_name, create_timestamp, cluster_id),
+  CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE hostconfigmapping (
   create_timestamp NUMERIC(19) NOT NULL,
@@ -316,31 +415,26 @@ CREATE TABLE hostconfigmapping (
   service_name VARCHAR(255),
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY (create_timestamp, host_id, cluster_id, type_name));
+  CONSTRAINT PK_hostconfigmapping PRIMARY KEY (create_timestamp, host_id, cluster_id, type_name),
+  CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE metainfo (
   metainfo_key VARCHAR(255),
   metainfo_value TEXT,
-  PRIMARY KEY (metainfo_key));
+  CONSTRAINT PK_metainfo PRIMARY KEY (metainfo_key));
 
 CREATE TABLE ClusterHostMapping (
   cluster_id NUMERIC(19) NOT NULL,
   host_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY (cluster_id, host_id));
+  CONSTRAINT PK_ClusterHostMapping PRIMARY KEY (cluster_id, host_id),
+  CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE ambari_sequences (
   sequence_name VARCHAR(255),
   sequence_value NUMERIC(38) NOT NULL,
-  PRIMARY KEY (sequence_name));
-
-CREATE TABLE confgroupclusterconfigmapping (
-  config_group_id NUMERIC(19) NOT NULL,
-  cluster_id NUMERIC(19) NOT NULL,
-  config_type VARCHAR(255) NOT NULL,
-  version_tag VARCHAR(255) NOT NULL,
-  user_name VARCHAR(255) DEFAULT '_db',
-  create_timestamp NUMERIC(19) NOT NULL,
-  PRIMARY KEY(config_group_id, cluster_id, config_type));
+  CONSTRAINT PK_ambari_sequences PRIMARY KEY (sequence_name));
 
 CREATE TABLE configgroup (
   group_id NUMERIC(19),
@@ -350,34 +444,26 @@ CREATE TABLE configgroup (
   description VARCHAR(1024),
   create_timestamp NUMERIC(19) NOT NULL,
   service_name VARCHAR(255),
-  PRIMARY KEY(group_id));
+  CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
+
+CREATE TABLE confgroupclusterconfigmapping (
+  config_group_id NUMERIC(19) NOT NULL,
+  cluster_id NUMERIC(19) NOT NULL,
+  config_type VARCHAR(255) NOT NULL,
+  version_tag VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) DEFAULT '_db',
+  create_timestamp NUMERIC(19) NOT NULL,
+  CONSTRAINT PK_confgroupclustercfgmapping PRIMARY KEY (config_group_id, cluster_id, config_type),
+  CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_confg FOREIGN KEY (cluster_id, config_type, version_tag) REFERENCES clusterconfig (cluster_id, type_name, version_tag));
 
 CREATE TABLE configgrouphostmapping (
   config_group_id NUMERIC(19) NOT NULL,
   host_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY(config_group_id, host_id));
-
-CREATE TABLE requestschedule (
-  schedule_id NUMERIC(19),
-  cluster_id NUMERIC(19) NOT NULL,
-  description VARCHAR(255),
-  status VARCHAR(255),
-  batch_separation_seconds smallint,
-  batch_toleration_limit smallint,
-  create_user VARCHAR(255),
-  create_timestamp NUMERIC(19),
-  update_user VARCHAR(255),
-  update_timestamp NUMERIC(19),
-  minutes VARCHAR(10),
-  hours VARCHAR(10),
-  days_of_month VARCHAR(10),
-  month VARCHAR(10),
-  day_of_week VARCHAR(10),
-  yearToSchedule VARCHAR(10),
-  startTime VARCHAR(50),
-  endTime VARCHAR(50),
-  last_execution_status VARCHAR(255),
-  PRIMARY KEY(schedule_id));
+  CONSTRAINT PK_configgrouphostmapping PRIMARY KEY (config_group_id, host_id),
+  CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE requestschedulebatchrequest (
   schedule_id NUMERIC(19),
@@ -389,35 +475,39 @@ CREATE TABLE requestschedulebatchrequest (
   request_status VARCHAR(255),
   return_code smallint,
   return_message VARCHAR(2000),
-  PRIMARY KEY(schedule_id, batch_id));
+  CONSTRAINT PK_requestschedulebatchrequest PRIMARY KEY (schedule_id, batch_id),
+  CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id));
 
 CREATE TABLE blueprint (
   blueprint_name VARCHAR(255) NOT NULL,
   stack_id NUMERIC(19) NOT NULL,
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_descriptor_reference VARCHAR(255),
-  PRIMARY KEY(blueprint_name)
-);
+  CONSTRAINT PK_blueprint PRIMARY KEY (blueprint_name),
+  CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id));
 
 CREATE TABLE hostgroup (
   blueprint_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   cardinality VARCHAR(255) NOT NULL,
-  PRIMARY KEY(blueprint_name, name));
+  CONSTRAINT PK_hostgroup PRIMARY KEY (blueprint_name, name),
+  CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE hostgroup_component (
   blueprint_name VARCHAR(255) NOT NULL,
   hostgroup_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   provision_action VARCHAR(255),
-  PRIMARY KEY(blueprint_name, hostgroup_name, name));
+  CONSTRAINT PK_hostgroup_component PRIMARY KEY (blueprint_name, hostgroup_name, name),
+  CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup(blueprint_name, name));
 
 CREATE TABLE blueprint_configuration (
   blueprint_name VARCHAR(255) NOT NULL,
   type_name VARCHAR(255) NOT NULL,
   config_data TEXT NOT NULL,
   config_attributes TEXT,
-  PRIMARY KEY(blueprint_name, type_name));
+  CONSTRAINT PK_blueprint_configuration PRIMARY KEY (blueprint_name, type_name),
+  CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE blueprint_setting (
   id NUMERIC(19) NOT NULL,
@@ -434,7 +524,8 @@ CREATE TABLE hostgroup_configuration (
   type_name VARCHAR(255) NOT NULL,
   config_data TEXT NOT NULL,
   config_attributes TEXT,
-  PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
+  CONSTRAINT PK_hostgroup_configuration PRIMARY KEY (blueprint_name, hostgroup_name, type_name),
+  CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name));
 
 CREATE TABLE viewmain (
   view_name VARCHAR(255) NOT NULL,
@@ -448,16 +539,8 @@ CREATE TABLE viewmain (
   archive VARCHAR(255),
   mask VARCHAR(255),
   system_view BIT NOT NULL DEFAULT 0,
-  PRIMARY KEY(view_name));
-
-CREATE TABLE viewinstancedata (
-  view_instance_id NUMERIC(19),
-  view_name VARCHAR(255) NOT NULL,
-  view_instance_name VARCHAR(255) NOT NULL,
-  name VARCHAR(255) NOT NULL,
-  user_name VARCHAR(255) NOT NULL,
-  value VARCHAR(2000),
-  PRIMARY KEY(VIEW_INSTANCE_ID, NAME, USER_NAME));
+  CONSTRAINT PK_viewmain PRIMARY KEY (view_name),
+  CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE viewinstance (
   view_instance_id NUMERIC(19),
@@ -473,14 +556,29 @@ CREATE TABLE viewinstance (
   alter_names BIT NOT NULL DEFAULT 1,
   cluster_handle VARCHAR(255),
   short_url VARCHAR (255),
-  PRIMARY KEY(view_instance_id));
+  CONSTRAINT PK_viewinstance PRIMARY KEY (view_instance_id),
+  CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name),
+  CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id),
+  CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name),
+  CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name));
+
+CREATE TABLE viewinstancedata (
+  view_instance_id NUMERIC(19),
+  view_name VARCHAR(255) NOT NULL,
+  view_instance_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) NOT NULL,
+  value VARCHAR(2000),
+  CONSTRAINT PK_viewinstancedata PRIMARY KEY (VIEW_INSTANCE_ID, NAME, USER_NAME),
+  CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name));
 
 CREATE TABLE viewinstanceproperty (
   view_name VARCHAR(255) NOT NULL,
   view_instance_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   value VARCHAR(2000),
-  PRIMARY KEY(view_name, view_instance_name, name));
+  CONSTRAINT PK_viewinstanceproperty PRIMARY KEY (view_name, view_instance_name, name),
+  CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE viewparameter (
   view_name VARCHAR(255) NOT NULL,
@@ -492,7 +590,8 @@ CREATE TABLE viewparameter (
   cluster_config VARCHAR(255),
   required CHAR(1),
   masked CHAR(1),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewparameter PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewresource (
   view_name VARCHAR(255) NOT NULL,
@@ -503,7 +602,8 @@ CREATE TABLE viewresource (
   provider VARCHAR(255),
   service VARCHAR(255),
   "resource" VARCHAR(255),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewresource PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewentity (
   id NUMERIC(19) NOT NULL,
@@ -511,27 +611,8 @@ CREATE TABLE viewentity (
   view_instance_name VARCHAR(255) NOT NULL,
   class_name VARCHAR(255) NOT NULL,
   id_property VARCHAR(255),
-  PRIMARY KEY(id));
-
-CREATE TABLE adminresourcetype (
-  resource_type_id INTEGER NOT NULL,
-  resource_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(resource_type_id));
-
-CREATE TABLE adminresource (
-  resource_id NUMERIC(19) NOT NULL,
-  resource_type_id INTEGER NOT NULL,
-  PRIMARY KEY(resource_id));
-
-CREATE TABLE adminprincipaltype (
-  principal_type_id INTEGER NOT NULL,
-  principal_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(principal_type_id));
-
-CREATE TABLE adminprincipal (
-  principal_id NUMERIC(19) NOT NULL,
-  principal_type_id INTEGER NOT NULL,
-  PRIMARY KEY(principal_id));
+  CONSTRAINT PK_viewentity PRIMARY KEY (id),
+  CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE adminpermission (
   permission_id NUMERIC(19) NOT NULL,
@@ -539,39 +620,31 @@ CREATE TABLE adminpermission (
   resource_type_id INTEGER NOT NULL,
   permission_label VARCHAR(255),
   sort_order SMALLINT NOT NULL DEFAULT 1,
-  PRIMARY KEY(permission_id));
+  CONSTRAINT PK_adminpermission PRIMARY KEY (permission_id),
+  CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id),
+  CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id));
 
 CREATE TABLE roleauthorization (
   authorization_id VARCHAR(100) NOT NULL,
   authorization_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(authorization_id));
+  CONSTRAINT PK_roleauthorization PRIMARY KEY (authorization_id));
 
 CREATE TABLE permission_roleauthorization (
   permission_id NUMERIC(19) NOT NULL,
   authorization_id VARCHAR(100) NOT NULL,
-  PRIMARY KEY(permission_id, authorization_id));
+  CONSTRAINT PK_permsn_roleauthorization PRIMARY KEY (permission_id, authorization_id),
+  CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id),
+  CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id));
 
 CREATE TABLE adminprivilege (
   privilege_id NUMERIC(19),
   permission_id NUMERIC(19) NOT NULL,
   resource_id NUMERIC(19) NOT NULL,
   principal_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY(privilege_id));
-
-CREATE TABLE repo_version (
-  repo_version_id NUMERIC(19) NOT NULL,
-  stack_id NUMERIC(19) NOT NULL,
-  version VARCHAR(255) NOT NULL,
-  display_name VARCHAR(128) NOT NULL,
-  upgrade_package VARCHAR(255) NOT NULL,
-  repositories TEXT NOT NULL,
-  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
-  version_url VARCHAR(1024),
-  version_xml TEXT,
-  version_xsd VARCHAR(512),
-  parent_id NUMERIC(19),
-  PRIMARY KEY(repo_version_id)
-);
+  CONSTRAINT PK_adminprivilege PRIMARY KEY (privilege_id),
+  CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id),
+  CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE widget (
   id NUMERIC(19) NOT NULL,
@@ -586,7 +659,7 @@ CREATE TABLE widget (
   widget_values TEXT,
   properties TEXT,
   cluster_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout (
@@ -597,21 +670,22 @@ CREATE TABLE widget_layout (
   user_name VARCHAR(255) NOT NULL,
   display_name VARCHAR(255),
   cluster_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget_layout PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout_user_widget (
   widget_layout_id NUMERIC(19) NOT NULL,
   widget_id NUMERIC(19) NOT NULL,
   widget_order smallint,
-  PRIMARY KEY(widget_layout_id, widget_id)
-);
+  CONSTRAINT PK_widget_layout_user_widget PRIMARY KEY (widget_layout_id, widget_id),
+  CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id),
+  CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id));
 
 CREATE TABLE artifact (
   artifact_name VARCHAR(255) NOT NULL,
   foreign_keys VARCHAR(255) NOT NULL,
   artifact_data TEXT NOT NULL,
-  PRIMARY KEY(artifact_name, foreign_keys));
+  CONSTRAINT PK_artifact PRIMARY KEY (artifact_name, foreign_keys));
 
 CREATE TABLE topology_request (
   id NUMERIC(19) NOT NULL,
@@ -621,8 +695,8 @@ CREATE TABLE topology_request (
   cluster_properties TEXT,
   cluster_attributes TEXT,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_request PRIMARY KEY (id),
+  CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id));
 
 CREATE TABLE topology_hostgroup (
   id NUMERIC(19) NOT NULL,
@@ -630,8 +704,8 @@ CREATE TABLE topology_hostgroup (
   group_properties TEXT,
   group_attributes TEXT,
   request_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_hostgroup PRIMARY KEY (id),
+  CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_info (
   id NUMERIC(19) NOT NULL,
@@ -641,15 +715,16 @@ CREATE TABLE topology_host_info (
   host_count INTEGER,
   predicate VARCHAR(2048),
   rack_info VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_info PRIMARY KEY (id),
+  CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id));
 
 CREATE TABLE topology_logical_request (
   id NUMERIC(19) NOT NULL,
   request_id NUMERIC(19) NOT NULL,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_request PRIMARY KEY (id),
+  CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_request (
   id NUMERIC(19) NOT NULL,
@@ -657,23 +732,25 @@ CREATE TABLE topology_host_request (
   group_id NUMERIC(19) NOT NULL,
   stage_id NUMERIC(19) NOT NULL,
   host_name VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_request PRIMARY KEY (id),
+  CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id));
 
 CREATE TABLE topology_host_task (
   id NUMERIC(19) NOT NULL,
   host_request_id NUMERIC(19) NOT NULL,
   type VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_task PRIMARY KEY (id),
+  CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id));
 
 CREATE TABLE topology_logical_task (
   id NUMERIC(19) NOT NULL,
   host_task_id NUMERIC(19) NOT NULL,
   physical_task_id NUMERIC(19),
   component VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_task PRIMARY KEY (id),
+  CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id),
+  CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE setting (
   id NUMERIC(19) NOT NULL,
@@ -682,7 +759,7 @@ CREATE TABLE setting (
   content TEXT NOT NULL,
   updated_by VARCHAR(255) NOT NULL DEFAULT '_db',
   update_timestamp NUMERIC(19) NOT NULL,
-  PRIMARY KEY (id)
+  CONSTRAINT PK_setting PRIMARY KEY (id)
 );
 
 
@@ -694,11 +771,13 @@ CREATE TABLE upgrade (
   from_version VARCHAR(255) DEFAULT '' NOT NULL,
   to_version VARCHAR(255) DEFAULT '' NOT NULL,
   direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
+  upgrade_type VARCHAR(32) NOT NULL,
+  upgrade_package VARCHAR(255) NOT NULL,
   skip_failures BIT NOT NULL DEFAULT 0,
   skip_sc_failures BIT NOT NULL DEFAULT 0,
   downgrade_allowed BIT NOT NULL DEFAULT 1,
   suspended BIT DEFAULT 0 NOT NULL,
-  PRIMARY KEY (upgrade_id),
+  CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
@@ -708,7 +787,7 @@ CREATE TABLE upgrade_group (
   upgrade_id NUMERIC(19) NOT NULL,
   group_name VARCHAR(255) DEFAULT '' NOT NULL,
   group_title VARCHAR(1024) DEFAULT '' NOT NULL,
-  PRIMARY KEY (upgrade_group_id),
+  CONSTRAINT PK_upgrade_group PRIMARY KEY (upgrade_group_id),
   FOREIGN KEY (upgrade_id) REFERENCES upgrade(upgrade_id)
 );
 
@@ -720,7 +799,7 @@ CREATE TABLE upgrade_item (
   hosts TEXT,
   tasks TEXT,
   item_text VARCHAR(1024),
-  PRIMARY KEY (upgrade_item_id),
+  CONSTRAINT PK_upgrade_item PRIMARY KEY (upgrade_item_id),
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
@@ -745,131 +824,33 @@ CREATE INDEX idx_hrc_status_role ON host_role_command (status, role);
 CREATE INDEX idx_rsc_request_id ON role_success_criteria (request_id);
 
 -- altering tables by creating unique constraints----------
-ALTER TABLE users ADD CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type);
-ALTER TABLE groups ADD CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group);
-ALTER TABLE members ADD CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version);
-ALTER TABLE hosts ADD CONSTRAINT UQ_hosts_host_name UNIQUE (host_name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name);
-ALTER TABLE serviceconfig ADD CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version);
-ALTER TABLE adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version);
-ALTER TABLE stack ADD CONSTRAINT unq_stack UNIQUE (stack_name, stack_version);
 
 -- altering tables by creating foreign keys----------
 -- Note, Oracle has a limitation of 32 chars in the FK name, and we should use the same FK name in all DB types.
-ALTER TABLE members ADD CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id);
-ALTER TABLE members ADD CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id);
 ALTER TABLE clusters ADD CONSTRAINT FK_clusters_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterservices ADD CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterconfigmapping ADD CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE execution_command ADD CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE role_success_criteria ADD CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE configgroup ADD CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_confg FOREIGN KEY (cluster_id, config_type, version_tag) REFERENCES clusterconfig (cluster_id, type_name, version_tag);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE requestschedulebatchrequest ADD CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE hostgroup ADD CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_component ADD CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup(blueprint_name, name);
-ALTER TABLE blueprint_configuration ADD CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_configuration ADD CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
-ALTER TABLE requestresourcefilter ADD CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE requestoperationlevel ADD CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE viewparameter ADD CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewresource ADD CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstanceproperty ADD CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE viewinstancedata ADD CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name);
-ALTER TABLE viewentity ADD CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE adminresource ADD CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE adminprincipal ADD CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id);
-ALTER TABLE adminpermission ADD CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE viewmain ADD CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE users ADD CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE groups ADD CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id);
-ALTER TABLE topology_request ADD CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id);
-ALTER TABLE topology_hostgroup ADD CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE topology_logical_request ADD CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_task ADD CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE serviceconfig ADD CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE blueprint ADD CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE repo_version ADD CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
 
 -- Kerberos
 CREATE TABLE kerberos_principal (
   principal_name VARCHAR(255) NOT NULL,
   is_service SMALLINT NOT NULL DEFAULT 1,
   cached_keytab_path VARCHAR(255),
-  PRIMARY KEY(principal_name)
+  CONSTRAINT PK_kerberos_principal PRIMARY KEY (principal_name)
 );
 
 CREATE TABLE kerberos_principal_host (
   principal_name VARCHAR(255) NOT NULL,
   host_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY(principal_name, host_id)
-);
+  CONSTRAINT PK_kerberos_principal_host PRIMARY KEY (principal_name, host_id),
+  CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name));
 
 CREATE TABLE kerberos_descriptor
 (
    kerberos_descriptor_name   VARCHAR(255) NOT NULL,
    kerberos_descriptor        TEXT NOT NULL,
-   PRIMARY KEY (kerberos_descriptor_name)
+   CONSTRAINT PK_kerberos_descriptor PRIMARY KEY (kerberos_descriptor_name)
 );
 
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name);
 -- Kerberos (end)
 
 -- Alerting Framework
@@ -891,7 +872,7 @@ CREATE TABLE alert_definition (
   ignore_host SMALLINT DEFAULT 0 NOT NULL,
   repeat_tolerance INTEGER DEFAULT 1 NOT NULL,
   repeat_tolerance_enabled SMALLINT DEFAULT 0 NOT NULL,
-  PRIMARY KEY (definition_id),
+  CONSTRAINT PK_alert_definition PRIMARY KEY (definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   CONSTRAINT uni_alert_def_name UNIQUE(cluster_id,definition_name)
 );
@@ -908,7 +889,7 @@ CREATE TABLE alert_history (
   alert_label VARCHAR(1024),
   alert_state VARCHAR(255) NOT NULL,
   alert_text TEXT,
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_history PRIMARY KEY (alert_id),
   FOREIGN KEY (alert_definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
 );
@@ -923,7 +904,7 @@ CREATE TABLE alert_current (
   latest_text TEXT,
   occurrences NUMERIC(19) NOT NULL DEFAULT 1,
   firmness VARCHAR(255) NOT NULL DEFAULT 'HARD',
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_current PRIMARY KEY (alert_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -934,7 +915,7 @@ CREATE TABLE alert_group (
   group_name VARCHAR(255) NOT NULL,
   is_default SMALLINT NOT NULL DEFAULT 0,
   service_name VARCHAR(255),
-  PRIMARY KEY (group_id),
+  CONSTRAINT PK_alert_group PRIMARY KEY (group_id),
   CONSTRAINT uni_alert_group_name UNIQUE(cluster_id,group_name)
 );
 
@@ -945,7 +926,7 @@ CREATE TABLE alert_target (
   properties TEXT,
   description VARCHAR(1024),
   is_global SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY (target_id)
+  CONSTRAINT PK_alert_target PRIMARY KEY (target_id)
 );
 
 CREATE TABLE alert_target_states (
@@ -957,7 +938,7 @@ CREATE TABLE alert_target_states (
 CREATE TABLE alert_group_target (
   group_id NUMERIC(19) NOT NULL,
   target_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY (group_id, target_id),
+  CONSTRAINT PK_alert_group_target PRIMARY KEY (group_id, target_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id)
 );
@@ -965,7 +946,7 @@ CREATE TABLE alert_group_target (
 CREATE TABLE alert_grouping (
   definition_id NUMERIC(19) NOT NULL,
   group_id NUMERIC(19) NOT NULL,
-  PRIMARY KEY (group_id, definition_id),
+  CONSTRAINT PK_alert_grouping PRIMARY KEY (group_id, definition_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id)
 );
@@ -976,7 +957,7 @@ CREATE TABLE alert_notice (
   history_id NUMERIC(19) NOT NULL,
   notify_state VARCHAR(255) NOT NULL,
   uuid VARCHAR(64) NOT NULL UNIQUE,
-  PRIMARY KEY (notification_id),
+  CONSTRAINT PK_alert_notice PRIMARY KEY (notification_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -1066,7 +1047,7 @@ insert into adminpermission(permission_id, permission_name, resource_type_id, pe
   union all
   select 3, 'CLUSTER.ADMINISTRATOR', 2, 'Cluster Administrator', 2
   union all
-  select 4, 'VIEW.USER', 3, 'View User'. 7
+  select 4, 'VIEW.USER', 3, 'View User', 7
   union all
   select 5, 'CLUSTER.OPERATOR', 2, 'Cluster Operator', 3
   union all
@@ -1501,7 +1482,7 @@ CREATE TABLE workflow (
   numJobsTotal INTEGER, numJobsCompleted INTEGER,
   inputBytes NUMERIC(19), outputBytes NUMERIC(19),
   duration NUMERIC(19),
-  PRIMARY KEY (workflowId),
+  CONSTRAINT PK_workflow PRIMARY KEY (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow(workflowId) ON DELETE CASCADE
 );
 
@@ -1515,7 +1496,7 @@ CREATE TABLE job (
   mapsRuntime NUMERIC(19), reducesRuntime NUMERIC(19),
   mapCounters TEXT, reduceCounters TEXT, jobCounters TEXT,
   inputBytes NUMERIC(19), outputBytes NUMERIC(19),
-  PRIMARY KEY(jobId),
+  CONSTRAINT PK_job PRIMARY KEY (jobId),
   FOREIGN KEY(workflowId) REFERENCES workflow(workflowId) ON DELETE CASCADE
 );
 
@@ -1523,7 +1504,7 @@ CREATE TABLE task (
   taskId VARCHAR(255), jobId VARCHAR(255), taskType TEXT, splits TEXT,
   startTime NUMERIC(19), finishTime NUMERIC(19), status TEXT, error TEXT, counters TEXT,
   failedAttempt TEXT,
-  PRIMARY KEY(taskId),
+  CONSTRAINT PK_task PRIMARY KEY (taskId),
   FOREIGN KEY(jobId) REFERENCES job(jobId) ON DELETE CASCADE
 );
 
@@ -1534,7 +1515,7 @@ CREATE TABLE taskAttempt (
   locality TEXT, avataar TEXT,
   status TEXT, error TEXT, counters TEXT,
   inputBytes NUMERIC(19), outputBytes NUMERIC(19),
-  PRIMARY KEY(taskAttemptId),
+  CONSTRAINT PK_taskAttempt PRIMARY KEY (taskAttemptId),
   FOREIGN KEY(jobId) REFERENCES job(jobId) ON DELETE CASCADE,
   FOREIGN KEY(taskId) REFERENCES task(taskId) ON DELETE CASCADE
 );


[2/8] ambari git commit: AMBARI-15915. SQL constraints: Inline constraints and name them in CREATE table. (Balazs Bence Sari via stoader)

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/346dfe7e/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
index a3ea10d..c85ae46 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -33,8 +33,20 @@ CREATE TABLE stack(
   stack_id BIGINT NOT NULL,
   stack_name VARCHAR(255) NOT NULL,
   stack_version VARCHAR(255) NOT NULL,
-  PRIMARY KEY CLUSTERED (stack_id)
-);
+  CONSTRAINT PK_stack PRIMARY KEY CLUSTERED (stack_id),
+  CONSTRAINT unq_stack UNIQUE (stack_name, stack_version));
+
+CREATE TABLE adminresourcetype (
+  resource_type_id INTEGER NOT NULL,
+  resource_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminresourcetype PRIMARY KEY CLUSTERED (resource_type_id)
+  );
+
+CREATE TABLE adminresource (
+  resource_id BIGINT NOT NULL,
+  resource_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminresource PRIMARY KEY CLUSTERED (resource_id),
+  CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE clusters (
   cluster_id BIGINT NOT NULL,
@@ -46,8 +58,9 @@ CREATE TABLE clusters (
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   desired_cluster_state VARCHAR(255) NOT NULL,
   desired_stack_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (cluster_id)
-  );
+  CONSTRAINT PK_clusters PRIMARY KEY CLUSTERED (cluster_id),
+  CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE clusterconfig (
   config_id BIGINT NOT NULL,
@@ -59,8 +72,11 @@ CREATE TABLE clusterconfig (
   config_data VARCHAR(MAX) NOT NULL,
   config_attributes VARCHAR(MAX),
   create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (config_id)
-  );
+  CONSTRAINT PK_clusterconfig PRIMARY KEY CLUSTERED (config_id),
+  CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag),
+  CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version));
 
 CREATE TABLE serviceconfig (
   service_config_id BIGINT NOT NULL,
@@ -72,20 +88,43 @@ CREATE TABLE serviceconfig (
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
   group_id BIGINT,
   note VARCHAR(MAX),
-  PRIMARY KEY CLUSTERED (service_config_id)
-  );
+  CONSTRAINT PK_serviceconfig PRIMARY KEY CLUSTERED (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version));
+
+CREATE TABLE hosts (
+  host_id BIGINT NOT NULL,
+  host_name VARCHAR(255) NOT NULL,
+  cpu_count INTEGER NOT NULL,
+  ph_cpu_count INTEGER,
+  cpu_info VARCHAR(255) NOT NULL,
+  discovery_status VARCHAR(2000) NOT NULL,
+  host_attributes VARCHAR(MAX) NOT NULL,
+  ipv4 VARCHAR(255),
+  ipv6 VARCHAR(255),
+  public_host_name VARCHAR(255),
+  last_registration_time BIGINT NOT NULL,
+  os_arch VARCHAR(255) NOT NULL,
+  os_info VARCHAR(1000) NOT NULL,
+  os_type VARCHAR(255) NOT NULL,
+  rack_info VARCHAR(255) NOT NULL,
+  total_mem BIGINT NOT NULL,
+  CONSTRAINT PK_hosts PRIMARY KEY CLUSTERED (host_id),
+  CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
 CREATE TABLE serviceconfighosts (
   service_config_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (service_config_id, host_id)
-  );
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY CLUSTERED (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE serviceconfigmapping (
   service_config_id BIGINT NOT NULL,
   config_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (service_config_id, config_id)
-  );
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY CLUSTERED (service_config_id, config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE clusterconfigmapping (
   cluster_id BIGINT NOT NULL,
@@ -94,22 +133,39 @@ CREATE TABLE clusterconfigmapping (
   create_timestamp BIGINT NOT NULL,
   selected INT NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY CLUSTERED (cluster_id, type_name, create_timestamp )
-  );
+  CONSTRAINT PK_clusterconfigmapping PRIMARY KEY CLUSTERED (cluster_id, type_name, create_timestamp ),
+  CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE clusterservices (
   service_name VARCHAR(255) NOT NULL,
   cluster_id BIGINT NOT NULL,
   service_enabled INT NOT NULL,
-  PRIMARY KEY CLUSTERED (service_name, cluster_id)
-  );
+  CONSTRAINT PK_clusterservices PRIMARY KEY CLUSTERED (service_name, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id BIGINT NOT NULL,
   current_cluster_state VARCHAR(255) NOT NULL,
   current_stack_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (cluster_id)
-  );
+  CONSTRAINT PK_clusterstate PRIMARY KEY CLUSTERED (cluster_id),
+  CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id));
+
+CREATE TABLE repo_version (
+  repo_version_id BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  version VARCHAR(255) NOT NULL,
+  display_name VARCHAR(128) NOT NULL,
+  repositories VARCHAR(MAX) NOT NULL,
+  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  version_url VARCHAR(1024),
+  version_xml VARCHAR(MAX),
+  version_xsd VARCHAR(512),
+  parent_id BIGINT,
+  CONSTRAINT PK_repo_version PRIMARY KEY CLUSTERED (repo_version_id),
+  CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
+  CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
 
 CREATE TABLE cluster_version (
   id BIGINT NOT NULL,
@@ -119,8 +175,23 @@ CREATE TABLE cluster_version (
   start_time BIGINT NOT NULL,
   end_time BIGINT,
   user_name VARCHAR(255),
-  PRIMARY KEY CLUSTERED (id)
-  );
+  CONSTRAINT PK_cluster_version PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
+
+CREATE TABLE servicecomponentdesiredstate (
+  id BIGINT NOT NULL,
+  component_name VARCHAR(255) NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  desired_stack_id BIGINT NOT NULL,
+  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
+  desired_state VARCHAR(255) NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  recovery_enabled SMALLINT NOT NULL DEFAULT 0,
+  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
+  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
+  CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   cluster_id BIGINT NOT NULL,
@@ -133,8 +204,10 @@ CREATE TABLE hostcomponentdesiredstate (
   maintenance_state VARCHAR(32) NOT NULL,
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
   restart_required BIT NOT NULL DEFAULT 0,
-  PRIMARY KEY CLUSTERED (cluster_id, component_name, host_id, service_name)
-);
+  CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY CLUSTERED (cluster_id, component_name, host_id, service_name),
+  CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id),
+  CONSTRAINT hstcmponentdesiredstatehstid FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE hostcomponentstate (
   id BIGINT NOT NULL,
@@ -147,30 +220,13 @@ CREATE TABLE hostcomponentstate (
   service_name VARCHAR(255) NOT NULL,
   upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  PRIMARY KEY CLUSTERED (id)
-);
+  CONSTRAINT PK_hostcomponentstate PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE NONCLUSTERED INDEX idx_host_component_state on hostcomponentstate(host_id, component_name, service_name, cluster_id);
 
-CREATE TABLE hosts (
-  host_id BIGINT NOT NULL,
-  host_name VARCHAR(255) NOT NULL,
-  cpu_count INTEGER NOT NULL,
-  ph_cpu_count INTEGER,
-  cpu_info VARCHAR(255) NOT NULL,
-  discovery_status VARCHAR(2000) NOT NULL,
-  host_attributes VARCHAR(MAX) NOT NULL,
-  ipv4 VARCHAR(255),
-  ipv6 VARCHAR(255),
-  public_host_name VARCHAR(255),
-  last_registration_time BIGINT NOT NULL,
-  os_arch VARCHAR(255) NOT NULL,
-  os_info VARCHAR(1000) NOT NULL,
-  os_type VARCHAR(255) NOT NULL,
-  rack_info VARCHAR(255) NOT NULL,
-  total_mem BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (host_id));
-
 CREATE TABLE hoststate (
   agent_version VARCHAR(255) NOT NULL,
   available_mem BIGINT NOT NULL,
@@ -179,19 +235,8 @@ CREATE TABLE hoststate (
   host_id BIGINT NOT NULL,
   time_in_state BIGINT NOT NULL,
   maintenance_state VARCHAR(512),
-  PRIMARY KEY CLUSTERED (host_id));
-
-CREATE TABLE servicecomponentdesiredstate (
-  id BIGINT NOT NULL,
-  component_name VARCHAR(255) NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  desired_stack_id BIGINT NOT NULL,
-  desired_version VARCHAR(255) NOT NULL DEFAULT 'UNKNOWN',
-  desired_state VARCHAR(255) NOT NULL,
-  service_name VARCHAR(255) NOT NULL,
-  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id)
-);
+  CONSTRAINT PK_hoststate PRIMARY KEY CLUSTERED (host_id),
+  CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE servicedesiredstate (
   cluster_id BIGINT NOT NULL,
@@ -201,9 +246,22 @@ CREATE TABLE servicedesiredstate (
   service_name VARCHAR(255) NOT NULL,
   maintenance_state VARCHAR(32) NOT NULL,
   security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
-  PRIMARY KEY CLUSTERED (cluster_id,service_name)
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY CLUSTERED (cluster_id,service_name),
+  CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+
+CREATE TABLE adminprincipaltype (
+  principal_type_id INTEGER NOT NULL,
+  principal_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminprincipaltype PRIMARY KEY CLUSTERED (principal_type_id)
   );
 
+CREATE TABLE adminprincipal (
+  principal_id BIGINT NOT NULL,
+  principal_type_id INTEGER NOT NULL,
+  CONSTRAINT PK_adminprincipal PRIMARY KEY CLUSTERED (principal_id),
+  CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id));
+
 CREATE TABLE users (
   user_id INTEGER,
   principal_id BIGINT NOT NULL,
@@ -214,29 +272,79 @@ CREATE TABLE users (
   user_password VARCHAR(255),
   active INTEGER NOT NULL DEFAULT 1,
   active_widget_layouts VARCHAR(1024) DEFAULT NULL,
-  PRIMARY KEY CLUSTERED (user_id)
-  );
+  CONSTRAINT PK_users PRIMARY KEY CLUSTERED (user_id),
+  CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type));
 
 CREATE TABLE groups (
   group_id INTEGER,
   principal_id BIGINT NOT NULL,
   group_name VARCHAR(255) NOT NULL,
   ldap_group INTEGER NOT NULL DEFAULT 0,
-  PRIMARY KEY CLUSTERED (group_id)
-  );
+  CONSTRAINT PK_groups PRIMARY KEY CLUSTERED (group_id),
+  CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group));
 
 CREATE TABLE members (
   member_id INTEGER,
   group_id INTEGER NOT NULL,
   user_id INTEGER NOT NULL,
-  PRIMARY KEY CLUSTERED (member_id)
-  );
+  CONSTRAINT PK_members PRIMARY KEY CLUSTERED (member_id),
+  CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id),
+  CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id),
+  CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id));
 
-CREATE TABLE execution_command (
-  command VARBINARY(MAX),
-  task_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (task_id)
-  );
+CREATE TABLE requestschedule (
+  schedule_id BIGINT,
+  cluster_id BIGINT NOT NULL,
+  description VARCHAR(255),
+  STATUS VARCHAR(255),
+  batch_separation_seconds SMALLINT,
+  batch_toleration_limit SMALLINT,
+  create_user VARCHAR(255),
+  create_timestamp BIGINT,
+  update_user VARCHAR(255),
+  update_timestamp BIGINT,
+  minutes VARCHAR(10),
+  hours VARCHAR(10),
+  days_of_month VARCHAR(10),
+  month VARCHAR(10),
+  day_of_week VARCHAR(10),
+  yearToSchedule VARCHAR(10),
+  startTime VARCHAR(50),
+  endTime VARCHAR(50),
+  last_execution_status VARCHAR(255),
+  CONSTRAINT PK_requestschedule PRIMARY KEY CLUSTERED (schedule_id));
+
+CREATE TABLE request (
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT,
+  command_name VARCHAR(255),
+  create_time BIGINT NOT NULL,
+  end_time BIGINT NOT NULL,
+  exclusive_execution BIT NOT NULL DEFAULT 0,
+  inputs VARBINARY(MAX),
+  request_context VARCHAR(255),
+  request_type VARCHAR(255),
+  request_schedule_id BIGINT,
+  start_time BIGINT NOT NULL,
+  status VARCHAR(255),
+  CONSTRAINT PK_request PRIMARY KEY CLUSTERED (request_id),
+  CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id));
+
+CREATE TABLE stage (
+  stage_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  skippable SMALLINT DEFAULT 0 NOT NULL,
+  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
+  log_info VARCHAR(255) NOT NULL,
+  request_context VARCHAR(255),
+  cluster_host_info VARBINARY(MAX) NOT NULL,
+  command_params VARBINARY(MAX),
+  host_params VARBINARY(MAX),
+  CONSTRAINT PK_stage PRIMARY KEY CLUSTERED (stage_id, request_id),
+  CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE host_role_command (
   task_id BIGINT NOT NULL,
@@ -262,53 +370,23 @@ CREATE TABLE host_role_command (
   role_command VARCHAR(255),
   command_detail VARCHAR(255),
   custom_command_name VARCHAR(255),
-  PRIMARY KEY CLUSTERED (task_id)
-  );
+  CONSTRAINT PK_host_role_command PRIMARY KEY CLUSTERED (task_id),
+  CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
+
+CREATE TABLE execution_command (
+  command VARBINARY(MAX),
+  task_id BIGINT NOT NULL,
+  CONSTRAINT PK_execution_command PRIMARY KEY CLUSTERED (task_id),
+  CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE role_success_criteria (
   ROLE VARCHAR(255) NOT NULL,
   request_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   success_factor FLOAT NOT NULL,
-  PRIMARY KEY CLUSTERED (
-    ROLE,
-    request_id,
-    stage_id
-    )
-  );
-
-CREATE TABLE stage (
-  stage_id BIGINT NOT NULL,
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT NOT NULL,
-  skippable SMALLINT DEFAULT 0 NOT NULL,
-  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,
-  log_info VARCHAR(255) NOT NULL,
-  request_context VARCHAR(255),
-  cluster_host_info VARBINARY(MAX) NOT NULL,
-  command_params VARBINARY(MAX),
-  host_params VARBINARY(MAX),
-  PRIMARY KEY CLUSTERED (
-    stage_id,
-    request_id
-    )
-  );
-
-CREATE TABLE request (
-  request_id BIGINT NOT NULL,
-  cluster_id BIGINT,
-  command_name VARCHAR(255),
-  create_time BIGINT NOT NULL,
-  end_time BIGINT NOT NULL,
-  exclusive_execution BIT NOT NULL DEFAULT 0,
-  inputs VARBINARY(MAX),
-  request_context VARCHAR(255),
-  request_type VARCHAR(255),
-  request_schedule_id BIGINT,
-  start_time BIGINT NOT NULL,
-  status VARCHAR(255),
-  PRIMARY KEY CLUSTERED (request_id)
-  );
+  CONSTRAINT PK_role_success_criteria PRIMARY KEY CLUSTERED (ROLE, request_id, stage_id),
+  CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
 
 CREATE TABLE requestresourcefilter (
   filter_id BIGINT NOT NULL,
@@ -316,8 +394,8 @@ CREATE TABLE requestresourcefilter (
   service_name VARCHAR(255),
   component_name VARCHAR(255),
   hosts VARBINARY(MAX),
-  PRIMARY KEY CLUSTERED (filter_id)
-  );
+  CONSTRAINT PK_requestresourcefilter PRIMARY KEY CLUSTERED (filter_id),
+  CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE requestoperationlevel (
   operation_level_id BIGINT NOT NULL,
@@ -327,18 +405,20 @@ CREATE TABLE requestoperationlevel (
   service_name VARCHAR(255),
   host_component_name VARCHAR(255),
   host_id BIGINT NULL,      -- unlike most host_id columns, this one allows NULLs because the request can be at the service level
-  PRIMARY KEY CLUSTERED (operation_level_id)
-  );
+  CONSTRAINT PK_requestoperationlevel PRIMARY KEY CLUSTERED (operation_level_id),
+  CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE ClusterHostMapping (
   cluster_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (cluster_id, host_id));
+  CONSTRAINT PK_ClusterHostMapping PRIMARY KEY CLUSTERED (cluster_id, host_id),
+  CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE key_value_store (
   [key] VARCHAR(255),
   [value] VARCHAR(MAX),
-  PRIMARY KEY CLUSTERED ([key])
+  CONSTRAINT PK_key_value_store PRIMARY KEY CLUSTERED ([key])
   );
 
 CREATE TABLE hostconfigmapping (
@@ -350,24 +430,20 @@ CREATE TABLE hostconfigmapping (
   create_timestamp BIGINT NOT NULL,
   selected INTEGER NOT NULL DEFAULT 0,
   user_name VARCHAR(255) NOT NULL DEFAULT '_db',
-  PRIMARY KEY CLUSTERED (
-    cluster_id,
-    host_id,
-    type_name,
-    create_timestamp
-    )
-  );
+  CONSTRAINT PK_hostconfigmapping PRIMARY KEY CLUSTERED (cluster_id, host_id, type_name, create_timestamp),
+  CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE metainfo (
   [metainfo_key] VARCHAR(255),
   [metainfo_value] VARCHAR(255),
-  PRIMARY KEY CLUSTERED ([metainfo_key])
+  CONSTRAINT PK_metainfo PRIMARY KEY CLUSTERED ([metainfo_key])
   );
 
 CREATE TABLE ambari_sequences (
-  sequence_name VARCHAR(255) PRIMARY KEY,
-  [sequence_value] BIGINT NOT NULL
-  );
+  sequence_name VARCHAR(255),
+  [sequence_value] BIGINT NOT NULL,
+  CONSTRAINT PK_ambari_sequences PRIMARY KEY (sequence_name));
 
 CREATE TABLE configgroup (
   group_id BIGINT,
@@ -377,8 +453,8 @@ CREATE TABLE configgroup (
   description VARCHAR(1024),
   create_timestamp BIGINT NOT NULL,
   service_name VARCHAR(255),
-  PRIMARY KEY CLUSTERED (group_id)
-  );
+  CONSTRAINT PK_configgroup PRIMARY KEY CLUSTERED (group_id),
+  CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (
   config_group_id BIGINT NOT NULL,
@@ -387,44 +463,16 @@ CREATE TABLE confgroupclusterconfigmapping (
   version_tag VARCHAR(255) NOT NULL,
   user_name VARCHAR(255) DEFAULT '_db',
   create_timestamp BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (
-    config_group_id,
-    cluster_id,
-    config_type
-    )
-  );
+  CONSTRAINT PK_confgroupclustercfgmapping PRIMARY KEY CLUSTERED (config_group_id, cluster_id, config_type),
+  CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_confg FOREIGN KEY (cluster_id, config_type, version_tag) REFERENCES clusterconfig (cluster_id, type_name, version_tag));
 
 CREATE TABLE configgrouphostmapping (
   config_group_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (
-    config_group_id,
-    host_id
-    )
-  );
-
-CREATE TABLE requestschedule (
-  schedule_id BIGINT,
-  cluster_id BIGINT NOT NULL,
-  description VARCHAR(255),
-  STATUS VARCHAR(255),
-  batch_separation_seconds SMALLINT,
-  batch_toleration_limit SMALLINT,
-  create_user VARCHAR(255),
-  create_timestamp BIGINT,
-  update_user VARCHAR(255),
-  update_timestamp BIGINT,
-  minutes VARCHAR(10),
-  hours VARCHAR(10),
-  days_of_month VARCHAR(10),
-  month VARCHAR(10),
-  day_of_week VARCHAR(10),
-  yearToSchedule VARCHAR(10),
-  startTime VARCHAR(50),
-  endTime VARCHAR(50),
-  last_execution_status VARCHAR(255),
-  PRIMARY KEY CLUSTERED (schedule_id)
-  );
+  CONSTRAINT PK_configgrouphostmapping PRIMARY KEY CLUSTERED (config_group_id, host_id),
+  CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE requestschedulebatchrequest (
   schedule_id BIGINT,
@@ -436,52 +484,39 @@ CREATE TABLE requestschedulebatchrequest (
   request_status VARCHAR(255),
   return_code SMALLINT,
   return_message TEXT,
-  PRIMARY KEY CLUSTERED (
-    schedule_id,
-    batch_id
-    )
-  );
+  CONSTRAINT PK_requestschedulebatchrequest PRIMARY KEY CLUSTERED (schedule_id, batch_id),
+  CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id));
 
 CREATE TABLE blueprint (
   blueprint_name VARCHAR(255) NOT NULL,
   stack_id BIGINT NOT NULL,
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_descriptor_reference VARCHAR(255),
-  PRIMARY KEY CLUSTERED (blueprint_name)
-  );
+  CONSTRAINT PK_blueprint PRIMARY KEY CLUSTERED (blueprint_name),
+  CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id));
 
 CREATE TABLE hostgroup (
   blueprint_name VARCHAR(255) NOT NULL,
   NAME VARCHAR(255) NOT NULL,
   cardinality VARCHAR(255) NOT NULL,
-  PRIMARY KEY CLUSTERED (
-    blueprint_name,
-    NAME
-    )
-  );
+  CONSTRAINT PK_hostgroup PRIMARY KEY CLUSTERED (blueprint_name, NAME),
+  CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE hostgroup_component (
   blueprint_name VARCHAR(255) NOT NULL,
   hostgroup_name VARCHAR(255) NOT NULL,
   NAME VARCHAR(255) NOT NULL,
   provision_action VARCHAR(255),
-  PRIMARY KEY CLUSTERED (
-    blueprint_name,
-    hostgroup_name,
-    NAME
-    )
-  );
+  CONSTRAINT PK_hostgroup_component PRIMARY KEY CLUSTERED (blueprint_name, hostgroup_name, NAME),
+  CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name));
 
 CREATE TABLE blueprint_configuration (
   blueprint_name VARCHAR(255) NOT NULL,
   type_name VARCHAR(255) NOT NULL,
   config_data VARCHAR(MAX) NOT NULL,
   config_attributes VARCHAR(MAX),
-  PRIMARY KEY CLUSTERED (
-    blueprint_name,
-    type_name
-    )
-  );
+  CONSTRAINT PK_blueprint_configuration PRIMARY KEY CLUSTERED (blueprint_name, type_name),
+  CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE blueprint_setting (
   id BIGINT NOT NULL,
@@ -499,12 +534,8 @@ CREATE TABLE hostgroup_configuration (
   type_name VARCHAR(255) NOT NULL,
   config_data VARCHAR(MAX) NOT NULL,
   config_attributes VARCHAR(MAX),
-  PRIMARY KEY CLUSTERED (
-    blueprint_name,
-    hostgroup_name,
-    type_name
-    )
-  );
+  CONSTRAINT PK_hostgroup_configuration PRIMARY KEY CLUSTERED (blueprint_name, hostgroup_name, type_name),
+  CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name));
 
 CREATE TABLE viewmain (
   view_name VARCHAR(255) NOT NULL,
@@ -518,22 +549,8 @@ CREATE TABLE viewmain (
   archive VARCHAR(255),
   mask VARCHAR(255),
   system_view BIT NOT NULL DEFAULT 0,
-  PRIMARY KEY CLUSTERED (view_name)
-  );
-
-CREATE TABLE viewinstancedata (
-  view_instance_id BIGINT,
-  view_name VARCHAR(255) NOT NULL,
-  view_instance_name VARCHAR(255) NOT NULL,
-  NAME VARCHAR(255) NOT NULL,
-  user_name VARCHAR(255) NOT NULL,
-  value VARCHAR(2000) NOT NULL,
-  PRIMARY KEY CLUSTERED (
-    view_instance_id,
-    NAME,
-    user_name
-    )
-  );
+  CONSTRAINT PK_viewmain PRIMARY KEY CLUSTERED (view_name),
+  CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE viewinstance (
   view_instance_id BIGINT,
@@ -549,20 +566,29 @@ CREATE TABLE viewinstance (
   alter_names BIT NOT NULL DEFAULT 1,
   cluster_handle VARCHAR(255),
   short_url VARCHAR (255),
-  PRIMARY KEY CLUSTERED (view_instance_id)
-  );
+  CONSTRAINT PK_viewinstance PRIMARY KEY CLUSTERED (view_instance_id),
+  CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name),
+  CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id),
+  CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name),
+  CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name));
+
+CREATE TABLE viewinstancedata (
+  view_instance_id BIGINT,
+  view_name VARCHAR(255) NOT NULL,
+  view_instance_name VARCHAR(255) NOT NULL,
+  NAME VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) NOT NULL,
+  value VARCHAR(2000) NOT NULL,
+  CONSTRAINT PK_viewinstancedata PRIMARY KEY CLUSTERED (view_instance_id, NAME, user_name),
+  CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name));
 
 CREATE TABLE viewinstanceproperty (
   view_name VARCHAR(255) NOT NULL,
   view_instance_name VARCHAR(255) NOT NULL,
   NAME VARCHAR(255) NOT NULL,
   value VARCHAR(2000),
-  PRIMARY KEY CLUSTERED (
-    view_name,
-    view_instance_name,
-    NAME
-    )
-  );
+  CONSTRAINT PK_viewinstanceproperty PRIMARY KEY CLUSTERED (view_name, view_instance_name, NAME),
+  CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE viewparameter (
   view_name VARCHAR(255) NOT NULL,
@@ -574,11 +600,8 @@ CREATE TABLE viewparameter (
   cluster_config VARCHAR(255),
   required CHAR(1),
   masked CHAR(1),
-  PRIMARY KEY CLUSTERED (
-    view_name,
-    NAME
-    )
-  );
+  CONSTRAINT PK_viewparameter PRIMARY KEY CLUSTERED (view_name, NAME),
+  CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewresource (
   view_name VARCHAR(255) NOT NULL,
@@ -589,11 +612,8 @@ CREATE TABLE viewresource (
   provider VARCHAR(255),
   service VARCHAR(255),
   resource VARCHAR(255),
-  PRIMARY KEY CLUSTERED (
-    view_name,
-    NAME
-    )
-  );
+  CONSTRAINT PK_viewresource PRIMARY KEY CLUSTERED (view_name, NAME),
+  CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewentity (
   id BIGINT NOT NULL,
@@ -601,32 +621,8 @@ CREATE TABLE viewentity (
   view_instance_name VARCHAR(255) NOT NULL,
   class_name VARCHAR(255) NOT NULL,
   id_property VARCHAR(255),
-  PRIMARY KEY CLUSTERED (id)
-  );
-
-CREATE TABLE adminresourcetype (
-  resource_type_id INTEGER NOT NULL,
-  resource_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY CLUSTERED (resource_type_id)
-  );
-
-CREATE TABLE adminresource (
-  resource_id BIGINT NOT NULL,
-  resource_type_id INTEGER NOT NULL,
-  PRIMARY KEY CLUSTERED (resource_id)
-  );
-
-CREATE TABLE adminprincipaltype (
-  principal_type_id INTEGER NOT NULL,
-  principal_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY CLUSTERED (principal_type_id)
-  );
-
-CREATE TABLE adminprincipal (
-  principal_id BIGINT NOT NULL,
-  principal_type_id INTEGER NOT NULL,
-  PRIMARY KEY CLUSTERED (principal_id)
-  );
+  CONSTRAINT PK_viewentity PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE adminpermission (
   permission_id BIGINT NOT NULL,
@@ -634,58 +630,47 @@ CREATE TABLE adminpermission (
   resource_type_id INTEGER NOT NULL,
   permission_label VARCHAR(255),
   sort_order SMALLINT NOT NULL DEFAULT 1,
-  PRIMARY KEY CLUSTERED (permission_id)
-  );
+  CONSTRAINT PK_adminpermission PRIMARY KEY CLUSTERED (permission_id),
+  CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id),
+  CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id));
 
 CREATE TABLE roleauthorization (
   authorization_id VARCHAR(100) NOT NULL,
   authorization_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(authorization_id));
+  CONSTRAINT PK_roleauthorization PRIMARY KEY (authorization_id));
 
 CREATE TABLE permission_roleauthorization (
   permission_id BIGINT NOT NULL,
   authorization_id VARCHAR(100) NOT NULL,
-  PRIMARY KEY(permission_id, authorization_id));
+  CONSTRAINT PK_permsn_roleauthorization PRIMARY KEY (permission_id, authorization_id),
+  CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id),
+  CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id));
 
 CREATE TABLE adminprivilege (
   privilege_id BIGINT,
   permission_id BIGINT NOT NULL,
   resource_id BIGINT NOT NULL,
   principal_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (privilege_id)
-  );
+  CONSTRAINT PK_adminprivilege PRIMARY KEY CLUSTERED (privilege_id),
+  CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id),
+  CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE host_version (
   id BIGINT NOT NULL,
   repo_version_id BIGINT NOT NULL,
   host_id BIGINT NOT NULL,
   STATE VARCHAR(32) NOT NULL,
-  PRIMARY KEY CLUSTERED (id)
-  );
-
-CREATE TABLE repo_version (
-  repo_version_id BIGINT NOT NULL,
-  stack_id BIGINT NOT NULL,
-  version VARCHAR(255) NOT NULL,
-  display_name VARCHAR(128) NOT NULL,
-  repositories VARCHAR(MAX) NOT NULL,
-  repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
-  version_url VARCHAR(1024),
-  version_xml VARCHAR(MAX),
-  version_xsd VARCHAR(512),
-  parent_id BIGINT,
-  PRIMARY KEY CLUSTERED (repo_version_id)
-  );
+  CONSTRAINT PK_host_version PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
 
 CREATE TABLE artifact (
   artifact_name VARCHAR(255) NOT NULL,
   artifact_data TEXT NOT NULL,
   foreign_keys VARCHAR(255) NOT NULL,
-  PRIMARY KEY CLUSTERED (
-    artifact_name,
-    foreign_keys
-    )
-  );
+  CONSTRAINT PK_artifact PRIMARY KEY CLUSTERED (artifact_name, foreign_keys)
+);
 
 CREATE TABLE widget (
   id BIGINT NOT NULL,
@@ -700,7 +685,7 @@ CREATE TABLE widget (
   widget_values VARCHAR(4000),
   properties VARCHAR(4000),
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (id)
+  CONSTRAINT PK_widget PRIMARY KEY CLUSTERED (id)
 );
 
 CREATE TABLE widget_layout (
@@ -711,15 +696,16 @@ CREATE TABLE widget_layout (
   user_name VARCHAR(255) NOT NULL,
   display_name VARCHAR(255),
   cluster_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (id)
+  CONSTRAINT PK_widget_layout PRIMARY KEY CLUSTERED (id)
 );
 
 CREATE TABLE widget_layout_user_widget (
   widget_layout_id BIGINT NOT NULL,
   widget_id BIGINT NOT NULL,
   widget_order smallint,
-  PRIMARY KEY CLUSTERED (widget_layout_id, widget_id)
-);
+  CONSTRAINT PK_widget_layout_user_widget PRIMARY KEY CLUSTERED (widget_layout_id, widget_id),
+  CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id),
+  CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id));
 
 CREATE TABLE topology_request (
   id BIGINT NOT NULL,
@@ -729,8 +715,8 @@ CREATE TABLE topology_request (
   cluster_properties TEXT,
   cluster_attributes TEXT,
   description VARCHAR(1024),
-  PRIMARY KEY CLUSTERED (id)
-);
+  CONSTRAINT PK_topology_request PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id));
 
 CREATE TABLE topology_hostgroup (
   id BIGINT NOT NULL,
@@ -738,8 +724,8 @@ CREATE TABLE topology_hostgroup (
   group_properties TEXT,
   group_attributes TEXT,
   request_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (id)
-);
+  CONSTRAINT PK_topology_hostgroup PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_info (
   id BIGINT NOT NULL,
@@ -749,15 +735,16 @@ CREATE TABLE topology_host_info (
   host_count INTEGER,
   predicate VARCHAR(2048),
   rack_info VARCHAR(255),
-  PRIMARY KEY CLUSTERED (id)
-);
+  CONSTRAINT PK_topology_host_info PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id));
 
 CREATE TABLE topology_logical_request (
   id BIGINT NOT NULL,
   request_id BIGINT NOT NULL,
   description VARCHAR(1024),
-  PRIMARY KEY CLUSTERED (id)
-);
+  CONSTRAINT PK_topology_logical_request PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_request (
   id BIGINT NOT NULL,
@@ -765,23 +752,25 @@ CREATE TABLE topology_host_request (
   group_id BIGINT NOT NULL,
   stage_id BIGINT NOT NULL,
   host_name VARCHAR(255),
-  PRIMARY KEY CLUSTERED (id)
-);
+  CONSTRAINT PK_topology_host_request PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id));
 
 CREATE TABLE topology_host_task (
   id BIGINT NOT NULL,
   host_request_id BIGINT NOT NULL,
   type VARCHAR(255) NOT NULL,
-  PRIMARY KEY CLUSTERED (id)
-);
+  CONSTRAINT PK_topology_host_task PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id));
 
 CREATE TABLE topology_logical_task (
   id BIGINT NOT NULL,
   host_task_id BIGINT NOT NULL,
   physical_task_id BIGINT,
   component VARCHAR(255) NOT NULL,
-  PRIMARY KEY CLUSTERED (id)
-);
+  CONSTRAINT PK_topology_logical_task PRIMARY KEY CLUSTERED (id),
+  CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id),
+  CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE setting (
   id BIGINT NOT NULL,
@@ -790,7 +779,7 @@ CREATE TABLE setting (
   content TEXT NOT NULL,
   updated_by VARCHAR(255) NOT NULL DEFAULT '_db',
   update_timestamp BIGINT NOT NULL,
-  PRIMARY KEY (id)
+  CONSTRAINT PK_setting PRIMARY KEY (id)
 );
 
 
@@ -808,7 +797,7 @@ CREATE TABLE upgrade (
   skip_sc_failures BIT NOT NULL DEFAULT 0,
   downgrade_allowed BIT NOT NULL DEFAULT 1,
   suspended BIT DEFAULT 0 NOT NULL,
-  PRIMARY KEY CLUSTERED (upgrade_id),
+  CONSTRAINT PK_upgrade PRIMARY KEY CLUSTERED (upgrade_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
@@ -818,7 +807,7 @@ CREATE TABLE upgrade_group (
   upgrade_id BIGINT NOT NULL,
   group_name VARCHAR(255) DEFAULT '' NOT NULL,
   group_title VARCHAR(1024) DEFAULT '' NOT NULL,
-  PRIMARY KEY CLUSTERED (upgrade_group_id),
+  CONSTRAINT PK_upgrade_group PRIMARY KEY CLUSTERED (upgrade_group_id),
   FOREIGN KEY (upgrade_id) REFERENCES upgrade(upgrade_id)
 );
 
@@ -830,7 +819,7 @@ CREATE TABLE upgrade_item (
   hosts TEXT,
   tasks TEXT,
   item_text VARCHAR(1024),
-  PRIMARY KEY CLUSTERED (upgrade_item_id),
+  CONSTRAINT PK_upgrade_item PRIMARY KEY CLUSTERED (upgrade_item_id),
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
@@ -857,131 +846,33 @@ CREATE INDEX idx_rsc_request_id ON role_success_criteria (request_id);
 
 -- altering tables by creating unique constraints----------
 --------altering tables to add constraints----------
-ALTER TABLE users ADD CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type);
-ALTER TABLE groups ADD CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group);
-ALTER TABLE members ADD CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version);
-ALTER TABLE hosts ADD CONSTRAINT UQ_hosts_host_name UNIQUE (host_name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name);
-ALTER TABLE serviceconfig ADD CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version);
-ALTER TABLE adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version);
-ALTER TABLE stack ADD CONSTRAINT unq_stack UNIQUE (stack_name, stack_version);
 
 -- altering tables by creating foreign keys----------
 -- Note, Oracle has a limitation of 32 chars in the FK name, and we should use the same FK name in all DB types.
-ALTER TABLE members ADD CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id);
-ALTER TABLE members ADD CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id);
 ALTER TABLE clusters ADD CONSTRAINT FK_clusters_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterservices ADD CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterconfigmapping ADD CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmponentdesiredstatehstid FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE execution_command ADD CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE role_success_criteria ADD CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE configgroup ADD CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_confg FOREIGN KEY (cluster_id, config_type, version_tag) REFERENCES clusterconfig (cluster_id, type_name, version_tag);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE requestschedulebatchrequest ADD CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE hostgroup ADD CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_component ADD CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
-ALTER TABLE blueprint_configuration ADD CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_configuration ADD CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
-ALTER TABLE requestresourcefilter ADD CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE requestoperationlevel ADD CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE viewparameter ADD CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewresource ADD CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstanceproperty ADD CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE viewinstancedata ADD CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name);
-ALTER TABLE viewentity ADD CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE adminresource ADD CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE adminprincipal ADD CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id);
-ALTER TABLE adminpermission ADD CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE viewmain ADD CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE users ADD CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE groups ADD CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id);
-ALTER TABLE topology_request ADD CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id);
-ALTER TABLE topology_hostgroup ADD CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE topology_logical_request ADD CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_task ADD CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE serviceconfig ADD CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE blueprint ADD CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE repo_version ADD CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
 
 -- Kerberos
 CREATE TABLE kerberos_principal (
   principal_name VARCHAR(255) NOT NULL,
   is_service SMALLINT NOT NULL DEFAULT 1,
   cached_keytab_path VARCHAR(255),
-  PRIMARY KEY CLUSTERED (principal_name)
+  CONSTRAINT PK_kerberos_principal PRIMARY KEY CLUSTERED (principal_name)
 );
 
 CREATE TABLE kerberos_principal_host (
   principal_name VARCHAR(255) NOT NULL,
   host_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (principal_name, host_id)
-);
+  CONSTRAINT PK_kerberos_principal_host PRIMARY KEY CLUSTERED (principal_name, host_id),
+  CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name));
 
 CREATE TABLE kerberos_descriptor
 (
    kerberos_descriptor_name   VARCHAR(255) NOT NULL,
    kerberos_descriptor        VARCHAR(MAX) NOT NULL,
-   PRIMARY KEY (kerberos_descriptor_name)
+   CONSTRAINT PK_kerberos_descriptor PRIMARY KEY (kerberos_descriptor_name)
 );
 
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name);
 -- Kerberos (end)
 
 -- Alerting Framework
@@ -1003,7 +894,7 @@ CREATE TABLE alert_definition (
   ignore_host SMALLINT DEFAULT 0 NOT NULL,
   repeat_tolerance INTEGER DEFAULT 1 NOT NULL,
   repeat_tolerance_enabled SMALLINT DEFAULT 0 NOT NULL,
-  PRIMARY KEY CLUSTERED (definition_id),
+  CONSTRAINT PK_alert_definition PRIMARY KEY CLUSTERED (definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   CONSTRAINT uni_alert_def_name UNIQUE(cluster_id,definition_name)
 );
@@ -1020,7 +911,7 @@ CREATE TABLE alert_history (
   alert_label VARCHAR(1024),
   alert_state VARCHAR(255) NOT NULL,
   alert_text TEXT,
-  PRIMARY KEY CLUSTERED (alert_id),
+  CONSTRAINT PK_alert_history PRIMARY KEY CLUSTERED (alert_id),
   FOREIGN KEY (alert_definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
 );
@@ -1035,7 +926,7 @@ CREATE TABLE alert_current (
   latest_text TEXT,
   occurrences BIGINT NOT NULL DEFAULT 1,
   firmness VARCHAR(255) NOT NULL DEFAULT 'HARD',
-  PRIMARY KEY CLUSTERED (alert_id),
+  CONSTRAINT PK_alert_current PRIMARY KEY CLUSTERED (alert_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -1046,7 +937,7 @@ CREATE TABLE alert_group (
   group_name VARCHAR(255) NOT NULL,
   is_default SMALLINT NOT NULL DEFAULT 0,
   service_name VARCHAR(255),
-  PRIMARY KEY CLUSTERED (group_id),
+  CONSTRAINT PK_alert_group PRIMARY KEY CLUSTERED (group_id),
   CONSTRAINT uni_alert_group_name UNIQUE(cluster_id,group_name)
 );
 
@@ -1057,7 +948,7 @@ CREATE TABLE alert_target (
   properties TEXT,
   description VARCHAR(1024),
   is_global SMALLINT NOT NULL DEFAULT 0,
-  PRIMARY KEY CLUSTERED (target_id)
+  CONSTRAINT PK_alert_target PRIMARY KEY CLUSTERED (target_id)
 );
 
 CREATE TABLE alert_target_states (
@@ -1069,7 +960,7 @@ CREATE TABLE alert_target_states (
 CREATE TABLE alert_group_target (
   group_id BIGINT NOT NULL,
   target_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (group_id, target_id),
+  CONSTRAINT PK_alert_group_target PRIMARY KEY CLUSTERED (group_id, target_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id)
 );
@@ -1077,7 +968,7 @@ CREATE TABLE alert_group_target (
 CREATE TABLE alert_grouping (
   definition_id BIGINT NOT NULL,
   group_id BIGINT NOT NULL,
-  PRIMARY KEY CLUSTERED (group_id, definition_id),
+  CONSTRAINT PK_alert_grouping PRIMARY KEY CLUSTERED (group_id, definition_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id)
 );
@@ -1088,7 +979,7 @@ CREATE TABLE alert_notice (
   history_id BIGINT NOT NULL,
   notify_state VARCHAR(255) NOT NULL,
   uuid VARCHAR(64) NOT NULL UNIQUE,
-  PRIMARY KEY CLUSTERED (notification_id),
+  CONSTRAINT PK_alert_notice PRIMARY KEY CLUSTERED (notification_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -1605,7 +1496,7 @@ create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);
 -- ambari log4j DDL
 
 CREATE TABLE workflow (
-  workflowId       varchar(255) PRIMARY KEY CLUSTERED,
+  workflowId       varchar(255),
   workflowName     varchar(255),
   parentWorkflowId varchar(255),
   workflowContext  TEXT, userName varchar(255),
@@ -1613,6 +1504,7 @@ CREATE TABLE workflow (
   numJobsTotal     INTEGER, numJobsCompleted INTEGER,
   inputBytes       BIGINT, outputBytes BIGINT,
   duration         BIGINT,
+  CONSTRAINT PK_workflow PRIMARY KEY CLUSTERED (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow (workflowId)
 );
 
@@ -1628,7 +1520,7 @@ CREATE TABLE job (
   mapsRuntime  BIGINT, reducesRuntime BIGINT,
   mapCounters  TEXT, reduceCounters TEXT, jobCounters TEXT,
   inputBytes   BIGINT, outputBytes BIGINT,
-  PRIMARY KEY CLUSTERED (jobId),
+  CONSTRAINT PK_job PRIMARY KEY CLUSTERED (jobId),
   FOREIGN KEY (workflowId) REFERENCES workflow (workflowId)
 );
 
@@ -1638,7 +1530,7 @@ CREATE TABLE task (
   taskType      varchar(255), splits varchar(2000),
   startTime     BIGINT, finishTime BIGINT, status TEXT, error TEXT, counters TEXT,
   failedAttempt TEXT,
-  PRIMARY KEY CLUSTERED (taskId),
+  CONSTRAINT PK_task PRIMARY KEY CLUSTERED (taskId),
   FOREIGN KEY (jobId) REFERENCES job (jobId)
 );
 
@@ -1652,7 +1544,7 @@ CREATE TABLE taskAttempt (
   locality      TEXT, avataar TEXT,
   status        TEXT, error TEXT, counters TEXT,
   inputBytes    BIGINT, outputBytes BIGINT,
-  PRIMARY KEY CLUSTERED (taskAttemptId),
+  CONSTRAINT PK_taskAttempt PRIMARY KEY CLUSTERED (taskAttemptId),
   FOREIGN KEY (jobId) REFERENCES job (jobId),
   FOREIGN KEY (taskId) REFERENCES task (taskId)
 );

http://git-wip-us.apache.org/repos/asf/ambari/blob/346dfe7e/ambari-server/src/test/java/org/apache/ambari/server/orm/db/DDLTestUtils.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/db/DDLTestUtils.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/db/DDLTestUtils.java
new file mode 100644
index 0000000..7d0e289
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/db/DDLTestUtils.java
@@ -0,0 +1,525 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.orm.db;
+
+import com.google.common.base.*;
+import com.google.common.base.Optional;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.*;
+import com.google.common.io.Resources;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.URL;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * <p>
+ * Utility to parse DDL scripts for verification and comparision. Parsing is not complete, only things relevant for
+ * the unit tests are considered, e.g. the column data types are not captured as they may differ across different SQL
+ * dialects.
+ * </p>
+ * <p>
+ * Parsing is mostly done by regexp matches, so the parser has limited capabilities. The following known restrictions apply:
+ * </p>
+ * <ul>
+ *   <li>Multiple statements in a single line are not supported, e.g: CREATE TABLE X(...); CREATE TABLE Y(...)</li>
+ *   <li>Mutiple definitions in the same line within a create statement is supported though, e.g: name varchar(255), id bigint, ...</li>
+ *   <li>Statements must be terminated by ;</li>
+ * </ul>
+ *
+ */
+public class DDLTestUtils {
+  private static final Logger LOG = LoggerFactory.getLogger(DDLTestUtils.class);
+
+  // These patterns are used during the initial line by line parsing of a DDL.
+  // The patterns help
+  // 1. filter out irrelevant lines (comment, empty line, go/commit),
+  // 2. recognize statement starters (create table, alter table, create index)
+  // 3. recognize statement terminators (;)
+  private static final Pattern CommentLine =  Pattern.compile("^\\s*--.*");
+  private static final Pattern EmptyLine =    Pattern.compile("^\\s*$");
+  private static final Pattern CommitLine =   Pattern.compile("^\\s*(go|commit).*$");
+  private static final Pattern CreateTable =  Pattern.compile("^\\s*create\\s+table.*$");
+  private static final Pattern AlterTable =   Pattern.compile("^\\s*alter\\s+table.*$");
+  private static final Pattern CreateIndex =  Pattern.compile("^\\s*create\\s+index.*$");
+  private static final Pattern EndStatement = Pattern.compile("(.*\\;)\\s*$");
+
+  // These patterns are used to match column/constraint definitons in a create table statement
+  // to capture the table name
+  private static final Pattern TableName =   Pattern.compile("^\\s*create table\\s+([\\w\\.\\_]+).*$");
+  // to capture the name and columns in a primary key
+  private static final Pattern PK =          Pattern.compile("^.*constraint\\s+([\\w\\.\\_]+)\\s+primary\\s+key\\s*\\(([^\\)]+)\\).*$");
+  // to capture the name and columns in a clusterd primary key
+  private static final Pattern PKClustered = Pattern.compile("^.*constraint\\s+([\\w\\.\\_]+)\\s+primary\\s+key\\s+clustered\\s*\\(([^\\)]+)\\).*$");
+  // to capture the name and columns in a unique constraint
+  private static final Pattern UQ =          Pattern.compile("^.*constraint\\s+([\\w\\.\\_]+)\\s+unique\\s*\\(([^\\)]+)\\).*$");
+  // to capture the name and columns and the referred columnd in a foreign key
+  private static final Pattern FK =          Pattern.compile("^.*constraint\\s+([\\w\\.\\_]+)\\s+foreign\\s+key\\s*\\(([^\\)]*)\\)\\s*references\\s+([\\w\\_\\.]+)\\s*\\(([^\\)]+)\\).*$");
+  // to capture the name of a columns
+  private static final Pattern Col =         Pattern.compile("^\\s*([\\`\\\"\\[\\]\\w\\.\\_]+)\\s+.*$");
+  // to capture column lists within the create table statement, such as the column list in "primary key (name, id)"
+  // in such lists commas are replaced with a | so that we can reliably use comma as a definition separator within the create table statement
+  private static final Pattern InnerList =   Pattern.compile("(\\([^\\(^\\)]+\\))");
+
+  // These patterns represent Unnamed constraints
+  private static final Pattern UnnamedPK =          Pattern.compile("^\\s*primary\\s+key[\\sclustered]*\\(([^\\)]+)\\).*$"); // e.g: primary key [clustered] (name)
+  private static final Pattern UnnamedUQ =          Pattern.compile("^\\s*unique\\s*\\(([^\\)]+)\\).*$"); // e.g: unique (name)
+  private static final Pattern UnnamedFK =          Pattern.compile("^\\s*foreign\\s+key\\s*\\(([^\\)]+)\\)\\s*references\\s+([\\w\\_\\.]+)\\s*\\(([^\\)]+)\\).*$"); // e.g: foreign key (name) references other_table(name)
+  private static final Pattern PKColumn =          Pattern.compile("^.*[\\w\\.\\_]+\\s.*primary\\s+key[\\sclustered\\,\\;\\)]*$"); // e.g: name varchar(255) not null primary key [clustered]
+  private static final Pattern UQColumn =          Pattern.compile("^\\s*[\\w\\.\\_]+\\s.*unique[\\s\\;\\,\\)]*$"); // e.g: name varchar(255) not null unique
+  private static final List<Pattern> CheckedUnnamedConstraints = ImmutableList.of(UnnamedPK);
+  private static final List<Pattern> UncheckedUnnamedConstraints = ImmutableList.of(UnnamedUQ, UnnamedFK, PKColumn, UQColumn);
+
+  private static final LoadingCache<String, DDL> ddlCache = CacheBuilder.newBuilder().build(
+    new CacheLoader<String, DDL>() {
+      @Override public DDL load(String key) throws Exception { return loadDdl(key); }
+    }
+  );
+
+  /**
+   * List of supported databases.
+   */
+  public static final List<String> DATABASES = ImmutableList.of(
+    "Derby",
+    "MySQL",
+    "Oracle",
+    "Postgres",
+    "Postgres-EMBEDDED",
+    "SQLAnywhere",
+    "SQLServer");
+
+  /**
+   * Loads and parses the DDL for a specific database type (e.g. Postgres). Already loaded DDL's are cached.
+   * @param dbType One of the supported databases @see #DATABASES
+   * @return the parsed DDL
+   * @throws Exception if exception occurs during loading/parsing
+   */
+  public static DDL getDdl(String dbType) throws Exception{
+    return ddlCache.get(dbType);
+  }
+
+  private static URL getDdlUrl(String dbType) {
+    return Resources.getResource("Ambari-DDL-" + dbType + "-CREATE.sql");
+  }
+
+  private static List<String> loadFile(String dbType) throws Exception {
+    List<String> lines = Resources.readLines(getDdlUrl(dbType), Charsets.UTF_8);
+    List<String> replaced = new ArrayList<>(lines.size());
+    for (String line: lines) { replaced.add(line.toLowerCase()); }
+    return replaced;
+  }
+
+  /**
+   * Groups the load DDL file into statements. Currently CREATE TABLE's, ALTER TABLE's and CREATE INDEX-es
+   * are considered statements. Multiple statements in a single line are not supported. Comments, empty lines and
+   * GO / COMMIT commands are discarded.
+   *
+   * @param ddlFile the loaded DDL file (as list of strings)
+   * @return a list of strings containing the statements
+   */
+  private static List<String> groupStatements(List<String> ddlFile) {
+    List<String> statements = new ArrayList<>();
+    Optional<ArrayList<String>> currentStmt = Optional.absent();
+    for (String line: ddlFile) {
+      // These lines should be skipped
+      if (CommentLine.matcher(line).matches() ||
+          EmptyLine.matcher(line).matches() ||
+          CommitLine.matcher(line).matches());
+      // These lines indicate the start of a CREATE TABLE / ALTER TABLE / CREATE INDEX statement
+      else if (CreateTable.matcher(line).matches() ||
+          AlterTable.matcher(line).matches() ||
+          CreateIndex.matcher(line).matches()) {
+        // Prepare to collect subsequent lines as part of the new statement
+        if(currentStmt.isPresent()) throw new IllegalStateException(
+            "Unfinished statement: " + currentStmt.get() + "\nnew statement: " +line);
+        currentStmt = Optional.of(new ArrayList<String>());
+        currentStmt.get().add(stripComment(line));
+        // If the statement is a one liner, close it right away
+        if (line.contains(";")) {
+          statements.add(Joiner.on(' ').join(currentStmt.get()));
+          currentStmt = Optional.absent();
+        }
+      }
+      // Process terminating line (containing ;): add to the current statement and close current statement
+      else if (currentStmt.isPresent() && EndStatement.matcher(line).matches()) {
+        currentStmt.get().add(stripComment(line));
+        statements.add(Joiner.on(' ').join(currentStmt.get()));
+        currentStmt = Optional.absent();
+      }
+      // Collect all other lines as part of the current statement
+      else if (currentStmt.isPresent()) {
+        currentStmt.get().add(stripComment(line));
+      }
+    }
+    return statements;
+  }
+
+  private static String stripComment(String line) {
+    return line.contains("--") ? line.substring(0, line.indexOf("--")) : line;
+  }
+
+  private static Collection<String> toColumns(String cols) {
+    List<String> columns = new ArrayList<>();
+    for (String col: Splitter.on('|').split(cols)) {
+      columns.add( stripPrefixQuotationAndBrackets(col.trim()));
+    }
+    return columns;
+  }
+
+  /**
+   * Strips out quotation characters ('"[]) and schema prefixes from identifiers
+   * (table / columns / constraint names)
+   * @param input an identifier
+   * @return the important part of the identifier
+   */
+  private static String stripPrefixQuotationAndBrackets(String input) {
+    String output = input.replaceAll("[\\`\\\"\\[\\]]", "").replaceAll("[^\\.]*\\.", "");
+    return output;
+  }
+
+  private static Optional<String> firstMatchingGroup(Pattern p, String s) {
+    Matcher m = p.matcher(s);
+    if (m.matches()) {
+      return Optional.of(m.group(1));
+    }
+    else {
+      return Optional.absent();
+    }
+  }
+
+  private static Map<String, Table> parseTableDefs(List<String> statements) {
+    // Find all CREATE TABLE statements
+    List<String> createTables = new ArrayList<>();
+    for (String stmt: statements) {
+      if (stmt.matches(".*create\\s+table.*")) {
+        String content = stmt.substring(stmt.indexOf('(') + 1, stmt.lastIndexOf(')'));
+        // Replace , with | within PK/FK/UQ definitions so that we will be able to partition column/constraint definitions by ,
+        Matcher m = InnerList.matcher(content);
+        while (m.find()) {
+          String innerList = m.group();
+          stmt = stmt.replace(innerList, innerList.replaceAll("\\,", "|"));
+        }
+        createTables.add(stmt);
+      }
+    }
+    List<Table> tables = new ArrayList<>();
+    // Parse CREATE TABLE statements
+    for(String ct: createTables) {
+      String tableName = stripPrefixQuotationAndBrackets(firstMatchingGroup(TableName, ct).get());
+      List<String> columns = new ArrayList<>();
+      Optional<SimpleConstraint> pk = Optional.absent();
+      List<FKConstraint> fks = new ArrayList<>();
+      List<SimpleConstraint> uqs = new ArrayList<>();
+      final String innerPart = ct.substring(ct.indexOf('(') + 1, ct.lastIndexOf(')'));
+      for (String definition: Splitter.on(',').split(innerPart)) {
+        definition = definition.trim();
+        assertNounnamedConstraint(tableName, definition);
+        Matcher pkMatcher = PK.matcher(definition);
+        Matcher pkClustMatcher = PKClustered.matcher(definition);
+        Matcher unnamedPkMatcher = UnnamedPK.matcher(definition);
+        Matcher pkColumnMatcher = PKColumn.matcher(definition);
+        Matcher fkMatcher = FK.matcher(definition);
+        Matcher uqMatcher = UQ.matcher(definition);
+        Matcher unnamedFkMatcher = UnnamedFK.matcher(definition);
+        Matcher unnamedUqMatcher = UnnamedUQ.matcher(definition);
+        Matcher uqColumnMatcher = UQColumn.matcher(definition);
+        Matcher colMatcher = Col.matcher(definition);
+        if (pkMatcher.matches()) {
+          pk = Optional.of(Constraint.pk(pkMatcher.group(1),toColumns(pkMatcher.group(2))));
+        } else if (pkMatcher.matches()) {
+          pk = Optional.of(Constraint.pk(stripPrefixQuotationAndBrackets(pkMatcher.group(1)),toColumns(pkMatcher.group(2))));
+        } else if (pkClustMatcher.matches()) {
+          pk = Optional.of(Constraint.pk(stripPrefixQuotationAndBrackets(pkClustMatcher.group(1)),toColumns(pkClustMatcher.group(2))));
+        } else if (unnamedPkMatcher.matches()) {
+          pk = Optional.of(Constraint.pk("<default>",toColumns(unnamedPkMatcher.group(1))));
+        } else if (fkMatcher.matches()) {
+          fks.add(Constraint.fk(fkMatcher.group(1), toColumns(fkMatcher.group(2)), stripPrefixQuotationAndBrackets(fkMatcher.group(3)), toColumns(fkMatcher.group(4))));
+        } else if (unnamedFkMatcher.matches()) {
+          fks.add(Constraint.fk("<default>", toColumns(unnamedFkMatcher.group(1)), stripPrefixQuotationAndBrackets(unnamedFkMatcher.group(2)), toColumns(unnamedFkMatcher.group(3))));
+        } else if (uqMatcher.matches()) {
+          uqs.add(Constraint.uq(stripPrefixQuotationAndBrackets(uqMatcher.group(1)),toColumns(uqMatcher.group(2))));
+        } else if (unnamedUqMatcher.matches()) {
+          uqs.add(Constraint.uq("<default>", toColumns(unnamedUqMatcher.group(1))));
+        } else if (colMatcher.matches()) {
+          String colName = stripPrefixQuotationAndBrackets(colMatcher.group(1));
+          columns.add(colName);
+          // column definitions can include PK/UQ declaration, e.g: x integer not null primary key
+          if (pkColumnMatcher.matches()) {
+            pk = Optional.of(Constraint.pk("<default>", Collections.singleton(colName)));
+          } else if (uqColumnMatcher.matches()) {
+            uqs.add(Constraint.uq("<default>", Collections.singleton(colName)));
+          }
+        } else {
+          LOG.warn("Unexpected definition: {}, context: {}", definition, ct);
+        }
+      }
+      if (columns.isEmpty()) {
+        throw new IllegalStateException("No columns found in table " + tableName);
+      }
+      checkDupes("columns of table " + tableName, columns);
+      tables.add(new Table(tableName,
+          ImmutableSet.copyOf(columns),
+          pk,
+          ImmutableSet.copyOf(fks),
+          ImmutableSet.copyOf(uqs)));
+    }
+    Map<String, Table> tableMap = Maps.newHashMap();
+    for(Table t: tables) {
+      if (tableMap.containsKey(t.name)) throw new IllegalStateException("Duplicate table definition: " + t.name);
+      tableMap.put(t.name, t);
+    }
+    return tableMap;
+  }
+
+  private static void checkDupes(String objectName, List<? extends Object> items) {
+    Set<Object> set = Sets.newHashSet(items);
+    if (set.size() < items.size()) {
+      throw new IllegalStateException(String.format("Duplicates found in %s: %s", objectName, Iterables.toString(items)));
+    }
+  }
+
+  /**
+   * Currently we only fail on unnamed primary keys.
+   * @param tableName
+   * @param definition
+   */
+  private static void assertNounnamedConstraint(String tableName, String definition) {
+    if (tableName.contains("qrtz")) {
+      LOG.debug("Skipp checking quartz table: {}", tableName);
+    }
+    else {
+      for (Pattern unnamedConstraint: CheckedUnnamedConstraints) {
+        if (unnamedConstraint.matcher(definition).matches()) {
+          throw new IllegalStateException(
+              String.format("Found invalid (unnamed) constraint in table %s: %s", tableName, definition));
+        }
+      }
+      for (Pattern unnamedConstraint: UncheckedUnnamedConstraints) {
+        if (unnamedConstraint.matcher(definition).matches()) {
+          LOG.info("Found unnamed constraint in table {}: {}", tableName, definition);
+        }
+      }
+    }
+  }
+
+  private static DDL loadDdl(String dbType) throws Exception {
+    List<String> lines = loadFile(dbType);
+    List<String> statements = groupStatements(lines);
+    Map<String, Table> tables = parseTableDefs(statements);
+    List<String> alterTables = new ArrayList<>();
+    for (String stmt: statements) {
+      if (stmt.matches(".*alter\\s+table.*")) alterTables.add(stmt);
+    }
+    return new DDL(dbType, tables, alterTables);
+  }
+
+}
+
+/**
+ * Represents a DDL
+ */
+class DDL {
+  final String dbType;
+  final Map<String, Table> tables;
+  final List<String> alterTables;
+
+  Set<String> tableNames() { return tables.keySet(); }
+
+  DDL(String dbType, Map<String, Table> tables, List<String> alterTables) {
+    this.dbType = dbType;
+    this.tables = tables;
+    this.alterTables = alterTables;
+  }
+}
+
+/**
+ * Represents a datbase table
+ */
+class Table {
+  final String name;
+  final ImmutableSet<String> columns;
+  final Optional<SimpleConstraint> primaryKey;
+  final ImmutableSet<FKConstraint> foreignKeys;
+  final ImmutableSet<SimpleConstraint> uniqueConstraints;
+
+  Table(String name, Set<String> columns, Optional<SimpleConstraint> primaryKey, Set<FKConstraint> foreignKeys, Set<SimpleConstraint> uniqueConstraints) {
+    this.name = name;
+    this.columns =
+        (columns instanceof ImmutableSet) ? (ImmutableSet<String>)columns : ImmutableSet.copyOf(columns);
+    this.primaryKey = primaryKey;
+    this.foreignKeys =
+        (foreignKeys instanceof ImmutableSet) ? (ImmutableSet<FKConstraint>)foreignKeys : ImmutableSet.copyOf(foreignKeys);
+    this.uniqueConstraints =
+        (uniqueConstraints instanceof ImmutableSet) ? (ImmutableSet<SimpleConstraint>) uniqueConstraints : ImmutableSet.copyOf(uniqueConstraints);
+  }
+
+  @Override
+  public String toString() {
+    return String.format("TABLE name: %s, columns: %s, pk: %s, fks: %s, uqs: %s",
+        name, Iterables.toString(columns), primaryKey, Iterables.toString(foreignKeys), Iterables.toString(uniqueConstraints));
+  }
+}
+
+/**
+ * Represents a constraint.
+ */
+abstract class Constraint<ContentType> {
+  abstract String name();
+  abstract ContentType content();
+
+  static SimpleConstraint pk(String name, Collection<String> columns) {
+    Preconditions.checkArgument(!columns.isEmpty(), "Columns must not be empty.");
+    return new SimpleConstraint(name, "PK", columns);
+  }
+
+  static SimpleConstraint uq(String name, Collection<String> columns) {
+    Preconditions.checkArgument(!columns.isEmpty(), "Columns must not be empty.");
+    return new SimpleConstraint(name, "PK", columns);
+  }
+
+  static FKConstraint fk(String name, Collection<String> columns, String referredTableName, Collection<String> referredColumns) {
+    Preconditions.checkArgument(!columns.isEmpty(), "Columns must not be empty.");
+    Preconditions.checkArgument(!referredColumns.isEmpty(), "Referred columns must not be empty.");
+    return new FKConstraint(name, columns, referredTableName, referredColumns);
+  }
+
+}
+
+/**
+ * Represents a simple constraint (PK/UQ)
+ */
+class SimpleConstraint extends Constraint<Set<String>> {
+  final String name;
+  final String type;
+  final ImmutableSet<String> columns; // These have favorable equals/hashcode semantics
+
+  SimpleConstraint(String name, String type, Collection<String> columns) {
+    this.name = name;
+    this.type = type;
+    this.columns = (columns instanceof ImmutableSet) ? (ImmutableSet<String>) columns : ImmutableSet.copyOf(columns);
+  }
+
+  public String name() {
+    return name;
+  }
+
+  public ImmutableSet<String> content() { return columns; }
+
+  @Override public String toString() {
+    return String.format("%s %s [%s]", type, name, Joiner.on(',').join(columns));
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    SimpleConstraint that = (SimpleConstraint) o;
+    if (!name.equals(that.name)) return false;
+    if (!type.equals(that.type)) return false;
+    return columns.equals(that.columns);
+  }
+
+  @Override
+  public int hashCode() {
+    int result = name.hashCode();
+    result = 31 * result + type.hashCode();
+    result = 31 * result + columns.hashCode();
+    return result;
+  }
+
+}
+
+class FKConstraintContent {
+  final ImmutableSet<String> columns; // These have favorable equals/hashcode semantics
+  final String referredTable;
+  final ImmutableSet<String> referredColumns; // These have favorable equals/hashcode semantics
+
+  public FKConstraintContent(Collection<String> columns, String referredTable, Collection<String> referredColumns) {
+    this.columns = columns instanceof ImmutableSet ? (ImmutableSet<String>)columns : ImmutableSet.copyOf(columns);
+    this.referredTable = referredTable;
+    this.referredColumns = referredColumns instanceof ImmutableSet ? (ImmutableSet<String>)referredColumns :
+        ImmutableSet.copyOf(referredColumns);
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    FKConstraintContent that = (FKConstraintContent) o;
+    if (!columns.equals(that.columns)) return false;
+    if (!referredTable.equals(that.referredTable)) return false;
+    return referredColumns.equals(that.referredColumns);
+
+  }
+
+  @Override
+  public int hashCode() {
+    int result = columns.hashCode();
+    result = 31 * result + referredTable.hashCode();
+    result = 31 * result + referredColumns.hashCode();
+    return result;
+  }
+
+  @Override public String toString() {
+    return String.format("[%s] --> %s [%s]", Joiner.on(',').join(columns), referredTable, Joiner.on(',').join(referredColumns));
+  }
+
+}
+
+class FKConstraint extends Constraint<FKConstraintContent> {
+  final String name;
+  final FKConstraintContent content;
+
+  FKConstraint(String name, Collection<String> columns, String referredTable, Collection<String> referredColumns) {
+    this.name = name;
+    this.content = new FKConstraintContent(columns, referredTable, referredColumns);
+  }
+
+  public String name() {
+    return name;
+  }
+
+  public FKConstraintContent content() {
+    return content;
+  }
+
+  @Override public String toString() {
+    return String.format("FK name:%s content: %s", name, content);
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    FKConstraint that = (FKConstraint) o;
+    if (!name.equals(that.name)) return false;
+    return content.equals(that.content);
+  }
+
+  @Override
+  public int hashCode() {
+    int result = name.hashCode();
+    result = 31 * result + content.hashCode();
+    return result;
+  }
+}


[6/8] ambari git commit: AMBARI-15915. SQL constraints: Inline constraints and name them in CREATE table. (Balazs Bence Sari via stoader)

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/346dfe7e/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index fc93372..56a6616 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -21,8 +21,19 @@ CREATE TABLE stack(
   stack_id NUMBER(19) NOT NULL,
   stack_name VARCHAR2(255) NOT NULL,
   stack_version VARCHAR2(255) NOT NULL,
-  PRIMARY KEY (stack_id)
-);
+  CONSTRAINT PK_stack PRIMARY KEY (stack_id),
+  CONSTRAINT unq_stack UNIQUE (stack_name, stack_version));
+
+CREATE TABLE adminresourcetype (
+  resource_type_id NUMBER(10) NOT NULL,
+  resource_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminresourcetype PRIMARY KEY (resource_type_id));
+
+CREATE TABLE adminresource (
+  resource_id NUMBER(19) NOT NULL,
+  resource_type_id NUMBER(10) NOT NULL,
+  CONSTRAINT PK_adminresource PRIMARY KEY (resource_id),
+  CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE clusters (
   cluster_id NUMBER(19) NOT NULL,
@@ -34,8 +45,9 @@ CREATE TABLE clusters (
   security_type VARCHAR2(32) DEFAULT 'NONE' NOT NULL,
   desired_cluster_state VARCHAR2(255) NULL,
   desired_stack_id NUMBER(19) NOT NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusters PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE clusterconfig (
   config_id NUMBER(19) NOT NULL,
@@ -47,8 +59,11 @@ CREATE TABLE clusterconfig (
   config_data CLOB NOT NULL,
   config_attributes CLOB,
   create_timestamp NUMBER(19) NOT NULL,
-  PRIMARY KEY (config_id)
-);
+  CONSTRAINT PK_clusterconfig PRIMARY KEY (config_id),
+  CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag),
+  CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version));
 
 CREATE TABLE serviceconfig (
   service_config_id NUMBER(19) NOT NULL,
@@ -60,31 +75,75 @@ CREATE TABLE serviceconfig (
   user_name VARCHAR(255) DEFAULT '_db' NOT NULL,
   group_id NUMBER(19),
   note CLOB,
-  PRIMARY KEY (service_config_id)
-);
+  CONSTRAINT PK_serviceconfig PRIMARY KEY (service_config_id),
+  CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version));
+
+
+CREATE TABLE hosts (
+  host_id NUMBER(19) NOT NULL,
+  host_name VARCHAR2(255) NOT NULL,
+  cpu_count INTEGER NOT NULL,
+  cpu_info VARCHAR2(255) NULL,
+  discovery_status VARCHAR2(2000) NULL,
+  host_attributes CLOB NULL,
+  ipv4 VARCHAR2(255) NULL,
+  ipv6 VARCHAR2(255) NULL,
+  last_registration_time INTEGER NOT NULL,
+  os_arch VARCHAR2(255) NULL,
+  os_info VARCHAR2(1000) NULL,
+  os_type VARCHAR2(255) NULL,
+  ph_cpu_count INTEGER NOT NULL,
+  public_host_name VARCHAR2(255) NULL,
+  rack_info VARCHAR2(255) NOT NULL,
+  total_mem INTEGER NOT NULL,
+  CONSTRAINT PK_hosts PRIMARY KEY (host_id),
+  CONSTRAINT UQ_hosts_host_name UNIQUE (host_name));
 
 CREATE TABLE serviceconfighosts (
   service_config_id NUMBER(19) NOT NULL,
   host_id NUMBER(19) NOT NULL,
-  PRIMARY KEY(service_config_id, host_id));
+  CONSTRAINT PK_serviceconfighosts PRIMARY KEY (service_config_id, host_id),
+  CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id),
+  CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE serviceconfigmapping (
   service_config_id NUMBER(19) NOT NULL,
   config_id NUMBER(19) NOT NULL,
-  PRIMARY KEY(service_config_id, config_id));
+  CONSTRAINT PK_serviceconfigmapping PRIMARY KEY (service_config_id, config_id),
+  CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id),
+  CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id));
 
 CREATE TABLE clusterservices (
   service_name VARCHAR2(255) NOT NULL,
   cluster_id NUMBER(19) NOT NULL,
   service_enabled NUMBER(10) NOT NULL,
-  PRIMARY KEY (service_name, cluster_id));
+  CONSTRAINT PK_clusterservices PRIMARY KEY (service_name, cluster_id),
+  CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE clusterstate (
   cluster_id NUMBER(19) NOT NULL,
   current_cluster_state VARCHAR2(255) NULL,
   current_stack_id NUMBER(19) NULL,
-  PRIMARY KEY (cluster_id)
-);
+  CONSTRAINT PK_clusterstate PRIMARY KEY (cluster_id),
+  CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id));
+
+CREATE TABLE repo_version (
+  repo_version_id NUMBER(19) NOT NULL,
+  stack_id NUMBER(19) NOT NULL,
+  version VARCHAR2(255) NOT NULL,
+  display_name VARCHAR2(128) NOT NULL,
+  repositories CLOB NOT NULL,
+  repo_type VARCHAR2(255) DEFAULT 'STANDARD' NOT NULL,
+  version_url VARCHAR(1024),
+  version_xml CLOB,
+  version_xsd VARCHAR(512),
+  parent_id NUMBER(19),
+  CONSTRAINT PK_repo_version PRIMARY KEY (repo_version_id),
+  CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name),
+  CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version));
 
 CREATE TABLE cluster_version (
   id NUMBER(19) NULL,
@@ -94,7 +153,23 @@ CREATE TABLE cluster_version (
   start_time NUMBER(19) NOT NULL,
   end_time NUMBER(19),
   user_name VARCHAR2(32),
-  PRIMARY KEY (id));
+  CONSTRAINT PK_cluster_version PRIMARY KEY (id),
+  CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
+
+CREATE TABLE servicecomponentdesiredstate (
+  id NUMBER(19) NOT NULL,
+  component_name VARCHAR2(255) NOT NULL,
+  cluster_id NUMBER(19) NOT NULL,
+  desired_stack_id NUMBER(19) NOT NULL,
+  desired_state VARCHAR2(255) NOT NULL,
+  desired_version VARCHAR(255) DEFAULT 'UNKNOWN' NOT NULL,
+  service_name VARCHAR2(255) NOT NULL,
+  recovery_enabled SMALLINT DEFAULT 0 NOT NULL,
+  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
+  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
+  CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
 
 CREATE TABLE hostcomponentdesiredstate (
   cluster_id NUMBER(19) NOT NULL,
@@ -107,8 +182,10 @@ CREATE TABLE hostcomponentdesiredstate (
   maintenance_state VARCHAR2(32) NOT NULL,
   security_state VARCHAR2(32) DEFAULT 'UNSECURED' NOT NULL,
   restart_required NUMBER(1) DEFAULT 0 NOT NULL,
-  PRIMARY KEY (cluster_id, component_name, host_id, service_name)
-);
+  CONSTRAINT PK_hostcomponentdesiredstate PRIMARY KEY (cluster_id, component_name, host_id, service_name),
+  CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE TABLE hostcomponentstate (
   id NUMBER(19) NOT NULL,
@@ -121,30 +198,13 @@ CREATE TABLE hostcomponentstate (
   service_name VARCHAR2(255) NOT NULL,
   upgrade_state VARCHAR2(32) DEFAULT 'NONE' NOT NULL,
   security_state VARCHAR2(32) DEFAULT 'UNSECURED' NOT NULL,
-  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id)
-);
+  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id),
+  CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id));
 
 CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, component_name, service_name, cluster_id);
 
-CREATE TABLE hosts (
-  host_id NUMBER(19) NOT NULL,
-  host_name VARCHAR2(255) NOT NULL,
-  cpu_count INTEGER NOT NULL,
-  cpu_info VARCHAR2(255) NULL,
-  discovery_status VARCHAR2(2000) NULL,
-  host_attributes CLOB NULL,
-  ipv4 VARCHAR2(255) NULL,
-  ipv6 VARCHAR2(255) NULL,
-  last_registration_time INTEGER NOT NULL,
-  os_arch VARCHAR2(255) NULL,
-  os_info VARCHAR2(1000) NULL,
-  os_type VARCHAR2(255) NULL,
-  ph_cpu_count INTEGER NOT NULL,
-  public_host_name VARCHAR2(255) NULL,
-  rack_info VARCHAR2(255) NOT NULL,
-  total_mem INTEGER NOT NULL,
-  PRIMARY KEY (host_id));
-
 CREATE TABLE hoststate (
   agent_version VARCHAR2(255) NULL,
   available_mem NUMBER(19) NOT NULL,
@@ -153,27 +213,17 @@ CREATE TABLE hoststate (
   host_id NUMBER(19) NOT NULL,
   time_in_state NUMBER(19) NOT NULL,
   maintenance_state VARCHAR2(512),
-  PRIMARY KEY (host_id));
+  CONSTRAINT PK_hoststate PRIMARY KEY (host_id),
+  CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE host_version (
   id NUMBER(19) NOT NULL,
   repo_version_id NUMBER(19) NOT NULL,
   host_id NUMBER(19) NOT NULL,
   state VARCHAR2(32) NOT NULL,
-  PRIMARY KEY (id));
-
-CREATE TABLE servicecomponentdesiredstate (
-  id NUMBER(19) NOT NULL,
-  component_name VARCHAR2(255) NOT NULL,
-  cluster_id NUMBER(19) NOT NULL,
-  desired_stack_id NUMBER(19) NOT NULL,
-  desired_state VARCHAR2(255) NOT NULL,
-  desired_version VARCHAR(255) DEFAULT 'UNKNOWN' NOT NULL,
-  service_name VARCHAR2(255) NOT NULL,
-  recovery_enabled SMALLINT DEFAULT 0 NOT NULL,
-  CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
-  CONSTRAINT unq_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id)
-);
+  CONSTRAINT PK_host_version PRIMARY KEY (id),
+  CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id));
 
 CREATE TABLE servicedesiredstate (
   cluster_id NUMBER(19) NOT NULL,
@@ -183,8 +233,20 @@ CREATE TABLE servicedesiredstate (
   service_name VARCHAR2(255) NOT NULL,
   maintenance_state VARCHAR2(32) NOT NULL,
   security_state VARCHAR2(32) DEFAULT 'UNSECURED' NOT NULL,
-  PRIMARY KEY (cluster_id, service_name)
-);
+  CONSTRAINT PK_servicedesiredstate PRIMARY KEY (cluster_id, service_name),
+  CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id),
+  CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id));
+
+CREATE TABLE adminprincipaltype (
+  principal_type_id NUMBER(10) NOT NULL,
+  principal_type_name VARCHAR(255) NOT NULL,
+  CONSTRAINT PK_adminprincipaltype PRIMARY KEY (principal_type_id));
+
+CREATE TABLE adminprincipal (
+  principal_id NUMBER(19) NOT NULL,
+  principal_type_id NUMBER(10) NOT NULL,
+  CONSTRAINT PK_adminprincipal PRIMARY KEY (principal_id),
+  CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id));
 
 CREATE TABLE users (
   user_id NUMBER(10) NOT NULL,
@@ -196,25 +258,79 @@ CREATE TABLE users (
   user_password VARCHAR2(255) NULL,
   active INTEGER DEFAULT 1 NOT NULL,
   active_widget_layouts VARCHAR2(1024) DEFAULT NULL,
-  PRIMARY KEY (user_id));
+  CONSTRAINT PK_users PRIMARY KEY (user_id),
+  CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type));
 
 CREATE TABLE groups (
   group_id NUMBER(10) NOT NULL,
   principal_id NUMBER(19) NOT NULL,
   group_name VARCHAR2(255) NOT NULL,
   ldap_group NUMBER(10) DEFAULT 0,
-  PRIMARY KEY (group_id));
+  CONSTRAINT PK_groups PRIMARY KEY (group_id),
+  CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group));
 
 CREATE TABLE members (
   member_id NUMBER(10),
   group_id NUMBER(10) NOT NULL,
   user_id NUMBER(10) NOT NULL,
-  PRIMARY KEY (member_id));
+  CONSTRAINT PK_members PRIMARY KEY (member_id),
+  CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id),
+  CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id),
+  CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id));
 
-CREATE TABLE execution_command (
-  task_id NUMBER(19) NOT NULL,
-  command BLOB NULL,
-  PRIMARY KEY (task_id));
+CREATE TABLE requestschedule (
+  schedule_id NUMBER(19),
+  cluster_id NUMBER(19) NOT NULL,
+  description VARCHAR2(255),
+  status VARCHAR2(255),
+  batch_separation_seconds smallint,
+  batch_toleration_limit smallint,
+  create_user VARCHAR2(255),
+  create_timestamp NUMBER(19),
+  update_user VARCHAR2(255),
+  update_timestamp NUMBER(19),
+  minutes VARCHAR2(10),
+  hours VARCHAR2(10),
+  days_of_month VARCHAR2(10),
+  month VARCHAR2(10),
+  day_of_week VARCHAR2(10),
+  yearToSchedule VARCHAR2(10),
+  startTime VARCHAR2(50),
+  endTime VARCHAR2(50),
+  last_execution_status VARCHAR2(255),
+  CONSTRAINT PK_requestschedule PRIMARY KEY (schedule_id));
+
+CREATE TABLE request (
+  request_id NUMBER(19) NOT NULL,
+  cluster_id NUMBER(19),
+  request_schedule_id NUMBER(19),
+  command_name VARCHAR(255),
+  create_time NUMBER(19) NOT NULL,
+  end_time NUMBER(19) NOT NULL,
+  exclusive_execution NUMBER(1) DEFAULT 0 NOT NULL,
+  inputs BLOB,
+  request_context VARCHAR(255),
+  request_type VARCHAR(255),
+  start_time NUMBER(19) NOT NULL,
+  status VARCHAR(255),
+  CONSTRAINT PK_request PRIMARY KEY (request_id),
+  CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id));
+
+CREATE TABLE stage (
+  stage_id NUMBER(19) NOT NULL,
+  request_id NUMBER(19) NOT NULL,
+  cluster_id NUMBER(19) NULL,
+  skippable NUMBER(1) DEFAULT 0 NOT NULL,
+  supports_auto_skip_failure NUMBER(1) DEFAULT 0 NOT NULL,
+  log_info VARCHAR2(255) NULL,
+  request_context VARCHAR2(255) NULL,
+  cluster_host_info BLOB NOT NULL,
+  command_params BLOB,
+  host_params BLOB,
+  CONSTRAINT PK_stage PRIMARY KEY (stage_id, request_id),
+  CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE host_role_command (
   task_id NUMBER(19) NOT NULL,
@@ -240,42 +356,23 @@ CREATE TABLE host_role_command (
   structured_out BLOB NULL,
   command_detail VARCHAR2(255) NULL,
   custom_command_name VARCHAR2(255) NULL,
-  PRIMARY KEY (task_id));
+  CONSTRAINT PK_host_role_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
+
+CREATE TABLE execution_command (
+  task_id NUMBER(19) NOT NULL,
+  command BLOB NULL,
+  CONSTRAINT PK_execution_command PRIMARY KEY (task_id),
+  CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE role_success_criteria (
   role VARCHAR2(255) NOT NULL,
   request_id NUMBER(19) NOT NULL,
   stage_id NUMBER(19) NOT NULL,
   success_factor NUMBER(19, 4) NOT NULL,
-  PRIMARY KEY (role, request_id, stage_id));
-
-CREATE TABLE stage (
-  stage_id NUMBER(19) NOT NULL,
-  request_id NUMBER(19) NOT NULL,
-  cluster_id NUMBER(19) NULL,
-  skippable NUMBER(1) DEFAULT 0 NOT NULL,
-  supports_auto_skip_failure NUMBER(1) DEFAULT 0 NOT NULL,
-  log_info VARCHAR2(255) NULL,
-  request_context VARCHAR2(255) NULL,
-  cluster_host_info BLOB NOT NULL,
-  command_params BLOB,
-  host_params BLOB,
-  PRIMARY KEY (stage_id, request_id));
-
-CREATE TABLE request (
-  request_id NUMBER(19) NOT NULL,
-  cluster_id NUMBER(19),
-  request_schedule_id NUMBER(19),
-  command_name VARCHAR(255),
-  create_time NUMBER(19) NOT NULL,
-  end_time NUMBER(19) NOT NULL,
-  exclusive_execution NUMBER(1) DEFAULT 0 NOT NULL,
-  inputs BLOB,
-  request_context VARCHAR(255),
-  request_type VARCHAR(255),
-  start_time NUMBER(19) NOT NULL,
-  status VARCHAR(255),
-  PRIMARY KEY (request_id));
+  CONSTRAINT PK_role_success_criteria PRIMARY KEY (role, request_id, stage_id),
+  CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id));
 
 CREATE TABLE requestresourcefilter (
   filter_id NUMBER(19) NOT NULL,
@@ -283,7 +380,8 @@ CREATE TABLE requestresourcefilter (
   service_name VARCHAR2(255),
   component_name VARCHAR2(255),
   hosts BLOB,
-  PRIMARY KEY (filter_id));
+  CONSTRAINT PK_requestresourcefilter PRIMARY KEY (filter_id),
+  CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE requestoperationlevel (
   operation_level_id NUMBER(19) NOT NULL,
@@ -293,12 +391,13 @@ CREATE TABLE requestoperationlevel (
   service_name VARCHAR2(255),
   host_component_name VARCHAR2(255),
   host_id NUMBER(19) NULL,      -- unlike most host_id columns, this one allows NULLs because the request can be at the service level
-  PRIMARY KEY (operation_level_id));
+  CONSTRAINT PK_requestoperationlevel PRIMARY KEY (operation_level_id),
+  CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id));
 
 CREATE TABLE key_value_store (
   "key" VARCHAR2(255) NOT NULL,
   "value" CLOB NULL,
-  PRIMARY KEY ("key"));
+  CONSTRAINT PK_key_value_store PRIMARY KEY ("key"));
 
 CREATE TABLE clusterconfigmapping (
   type_name VARCHAR2(255) NOT NULL,
@@ -307,7 +406,8 @@ CREATE TABLE clusterconfigmapping (
   selected NUMBER(10) NOT NULL,
   version_tag VARCHAR2(255) NOT NULL,
   user_name VARCHAR(255) DEFAULT '_db',
-  PRIMARY KEY (type_name, create_timestamp, cluster_id));
+  CONSTRAINT PK_clusterconfigmapping PRIMARY KEY (type_name, create_timestamp, cluster_id),
+  CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE hostconfigmapping (
   create_timestamp NUMBER(19) NOT NULL,
@@ -318,22 +418,26 @@ CREATE TABLE hostconfigmapping (
   service_name VARCHAR2(255) NULL,
   version_tag VARCHAR2(255) NOT NULL,
   user_name VARCHAR(255) DEFAULT '_db',
-  PRIMARY KEY (create_timestamp, host_id, cluster_id, type_name));
+  CONSTRAINT PK_hostconfigmapping PRIMARY KEY (create_timestamp, host_id, cluster_id, type_name),
+  CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE metainfo (
   "metainfo_key" VARCHAR2(255) NOT NULL,
   "metainfo_value" CLOB NULL,
-  PRIMARY KEY ("metainfo_key"));
+  CONSTRAINT PK_metainfo PRIMARY KEY ("metainfo_key"));
 
 CREATE TABLE ClusterHostMapping (
   cluster_id NUMBER(19) NOT NULL,
   host_id NUMBER(19) NOT NULL,
-  PRIMARY KEY (cluster_id, host_id));
+  CONSTRAINT PK_ClusterHostMapping PRIMARY KEY (cluster_id, host_id),
+  CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id),
+  CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE ambari_sequences (
   sequence_name VARCHAR2(50) NOT NULL,
   sequence_value NUMBER(38) NULL,
-  PRIMARY KEY (sequence_name));
+  CONSTRAINT PK_ambari_sequences PRIMARY KEY (sequence_name));
 
 CREATE TABLE configgroup (
   group_id NUMBER(19),
@@ -343,7 +447,8 @@ CREATE TABLE configgroup (
   description VARCHAR2(1024),
   create_timestamp NUMBER(19) NOT NULL,
   service_name VARCHAR(255),
-  PRIMARY KEY(group_id));
+  CONSTRAINT PK_configgroup PRIMARY KEY (group_id),
+  CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id));
 
 CREATE TABLE confgroupclusterconfigmapping (
   config_group_id NUMBER(19) NOT NULL,
@@ -352,34 +457,16 @@ CREATE TABLE confgroupclusterconfigmapping (
   version_tag VARCHAR2(255) NOT NULL,
   user_name VARCHAR2(255) DEFAULT '_db',
   create_timestamp NUMBER(19) NOT NULL,
-  PRIMARY KEY(config_group_id, cluster_id, config_type));
+  CONSTRAINT PK_confgroupclustercfgmapping PRIMARY KEY (config_group_id, cluster_id, config_type),
+  CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_confg FOREIGN KEY (version_tag, config_type, cluster_id) REFERENCES clusterconfig (version_tag, type_name, cluster_id));
 
 CREATE TABLE configgrouphostmapping (
   config_group_id NUMBER(19) NOT NULL,
   host_id NUMBER(19) NOT NULL,
-  PRIMARY KEY(config_group_id, host_id));
-
-CREATE TABLE requestschedule (
-  schedule_id NUMBER(19),
-  cluster_id NUMBER(19) NOT NULL,
-  description VARCHAR2(255),
-  status VARCHAR2(255),
-  batch_separation_seconds smallint,
-  batch_toleration_limit smallint,
-  create_user VARCHAR2(255),
-  create_timestamp NUMBER(19),
-  update_user VARCHAR2(255),
-  update_timestamp NUMBER(19),
-  minutes VARCHAR2(10),
-  hours VARCHAR2(10),
-  days_of_month VARCHAR2(10),
-  month VARCHAR2(10),
-  day_of_week VARCHAR2(10),
-  yearToSchedule VARCHAR2(10),
-  startTime VARCHAR2(50),
-  endTime VARCHAR2(50),
-  last_execution_status VARCHAR2(255),
-  PRIMARY KEY(schedule_id));
+  CONSTRAINT PK_configgrouphostmapping PRIMARY KEY (config_group_id, host_id),
+  CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id),
+  CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id));
 
 CREATE TABLE requestschedulebatchrequest (
   schedule_id NUMBER(19),
@@ -391,35 +478,39 @@ CREATE TABLE requestschedulebatchrequest (
   request_status VARCHAR2(255),
   return_code smallint,
   return_message VARCHAR2(2000),
-  PRIMARY KEY(schedule_id, batch_id));
+  CONSTRAINT PK_requestschedulebatchrequest PRIMARY KEY (schedule_id, batch_id),
+  CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id));
 
 CREATE TABLE blueprint (
   blueprint_name VARCHAR2(255) NOT NULL,
   stack_id NUMBER(19) NOT NULL,
   security_type VARCHAR2(32) DEFAULT 'NONE' NOT NULL,
   security_descriptor_reference VARCHAR(255),
-  PRIMARY KEY(blueprint_name)
-);
+  CONSTRAINT PK_blueprint PRIMARY KEY (blueprint_name),
+  CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id));
 
 CREATE TABLE hostgroup (
   blueprint_name VARCHAR2(255) NOT NULL,
   name VARCHAR2(255) NOT NULL,
   cardinality VARCHAR2(255) NOT NULL,
-  PRIMARY KEY(blueprint_name, name));
+  CONSTRAINT PK_hostgroup PRIMARY KEY (blueprint_name, name),
+  CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE hostgroup_component (
   blueprint_name VARCHAR2(255) NOT NULL,
   hostgroup_name VARCHAR2(255) NOT NULL,
   name VARCHAR2(255) NOT NULL,
   provision_action VARCHAR2(255),
-  PRIMARY KEY(blueprint_name, hostgroup_name, name));
+  CONSTRAINT PK_hostgroup_component PRIMARY KEY (blueprint_name, hostgroup_name, name),
+  CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup(blueprint_name, name));
 
 CREATE TABLE blueprint_configuration (
   blueprint_name VARCHAR2(255) NOT NULL,
   type_name VARCHAR2(255) NOT NULL,
   config_data CLOB NOT NULL,
   config_attributes CLOB,
-  PRIMARY KEY(blueprint_name, type_name));
+  CONSTRAINT PK_blueprint_configuration PRIMARY KEY (blueprint_name, type_name),
+  CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name));
 
 CREATE TABLE blueprint_setting (
   id NUMBER(19) NOT NULL,
@@ -436,7 +527,8 @@ CREATE TABLE hostgroup_configuration (
   type_name VARCHAR2(255) NOT NULL,
   config_data CLOB NOT NULL,
   config_attributes CLOB,
-  PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
+  CONSTRAINT PK_hostgroup_configuration PRIMARY KEY (blueprint_name, hostgroup_name, type_name),
+  CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup(blueprint_name, name));
 
 CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL,
   label VARCHAR(255),
@@ -449,16 +541,8 @@ CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL,
   archive VARCHAR(255),
   mask VARCHAR(255),
   system_view NUMBER(1) DEFAULT 0 NOT NULL,
-  PRIMARY KEY(view_name));
-
-CREATE TABLE viewinstancedata (
-  view_instance_id NUMBER(19),
-  view_name VARCHAR(255) NOT NULL,
-  view_instance_name VARCHAR(255) NOT NULL,
-  name VARCHAR(255) NOT NULL,
-  user_name VARCHAR(255) NOT NULL,
-  value VARCHAR(2000),
-  PRIMARY KEY(view_instance_id, name, user_name));
+  CONSTRAINT PK_viewmain PRIMARY KEY (view_name),
+  CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id));
 
 CREATE TABLE viewinstance (
   view_instance_id NUMBER(19),
@@ -474,14 +558,29 @@ CREATE TABLE viewinstance (
   alter_names NUMBER(1) DEFAULT 1 NOT NULL,
   cluster_handle VARCHAR(255),
   short_url VARCHAR (255),
-  PRIMARY KEY(view_instance_id));
+  CONSTRAINT PK_viewinstance PRIMARY KEY (view_instance_id),
+  CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name),
+  CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id),
+  CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name),
+  CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name));
+
+CREATE TABLE viewinstancedata (
+  view_instance_id NUMBER(19),
+  view_name VARCHAR(255) NOT NULL,
+  view_instance_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) NOT NULL,
+  value VARCHAR(2000),
+  CONSTRAINT PK_viewinstancedata PRIMARY KEY (view_instance_id, name, user_name),
+  CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name));
 
 CREATE TABLE viewinstanceproperty (
   view_name VARCHAR(255) NOT NULL,
   view_instance_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
   value VARCHAR(2000),
-  PRIMARY KEY(view_name, view_instance_name, name));
+  CONSTRAINT PK_viewinstanceproperty PRIMARY KEY (view_name, view_instance_name, name),
+  CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE viewparameter (
   view_name VARCHAR(255) NOT NULL,
@@ -493,7 +592,8 @@ CREATE TABLE viewparameter (
   cluster_config VARCHAR(255),
   required CHAR(1),
   masked CHAR(1),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewparameter PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewresource (view_name VARCHAR(255) NOT NULL,
   name VARCHAR(255) NOT NULL,
@@ -503,7 +603,8 @@ CREATE TABLE viewresource (view_name VARCHAR(255) NOT NULL,
   provider VARCHAR(255),
   service VARCHAR(255),
   "resource" VARCHAR(255),
-  PRIMARY KEY(view_name, name));
+  CONSTRAINT PK_viewresource PRIMARY KEY (view_name, name),
+  CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name));
 
 CREATE TABLE viewentity (
   id NUMBER(19) NOT NULL,
@@ -511,27 +612,8 @@ CREATE TABLE viewentity (
   view_instance_name VARCHAR(255) NOT NULL,
   class_name VARCHAR(255) NOT NULL,
   id_property VARCHAR(255),
-  PRIMARY KEY(id));
-
-CREATE TABLE adminresourcetype (
-  resource_type_id NUMBER(10) NOT NULL,
-  resource_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(resource_type_id));
-
-CREATE TABLE adminresource (
-  resource_id NUMBER(19) NOT NULL,
-  resource_type_id NUMBER(10) NOT NULL,
-  PRIMARY KEY(resource_id));
-
-CREATE TABLE adminprincipaltype (
-  principal_type_id NUMBER(10) NOT NULL,
-  principal_type_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(principal_type_id));
-
-CREATE TABLE adminprincipal (
-  principal_id NUMBER(19) NOT NULL,
-  principal_type_id NUMBER(10) NOT NULL,
-  PRIMARY KEY(principal_id));
+  CONSTRAINT PK_viewentity PRIMARY KEY (id),
+  CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name));
 
 CREATE TABLE adminpermission (
   permission_id NUMBER(19) NOT NULL,
@@ -539,38 +621,31 @@ CREATE TABLE adminpermission (
   resource_type_id NUMBER(10) NOT NULL,
   permission_label VARCHAR(255),
   sort_order SMALLINT DEFAULT 1 NOT NULL,
-  PRIMARY KEY(permission_id));
+  CONSTRAINT PK_adminpermission PRIMARY KEY (permission_id),
+  CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id),
+  CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id));
 
 CREATE TABLE roleauthorization (
   authorization_id VARCHAR(100) NOT NULL,
   authorization_name VARCHAR(255) NOT NULL,
-  PRIMARY KEY(authorization_id));
+  CONSTRAINT PK_roleauthorization PRIMARY KEY (authorization_id));
 
 CREATE TABLE permission_roleauthorization (
   permission_id NUMBER(19) NOT NULL,
   authorization_id VARCHAR(100) NOT NULL,
-  PRIMARY KEY(permission_id, authorization_id));
+  CONSTRAINT PK_permsn_roleauthorization PRIMARY KEY (permission_id, authorization_id),
+  CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id),
+  CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id));
 
 CREATE TABLE adminprivilege (
   privilege_id NUMBER(19),
   permission_id NUMBER(19) NOT NULL,
   resource_id NUMBER(19) NOT NULL,
   principal_id NUMBER(19) NOT NULL,
-  PRIMARY KEY(privilege_id));
-
-CREATE TABLE repo_version (
-  repo_version_id NUMBER(19) NOT NULL,
-  stack_id NUMBER(19) NOT NULL,
-  version VARCHAR2(255) NOT NULL,
-  display_name VARCHAR2(128) NOT NULL,
-  repositories CLOB NOT NULL,
-  repo_type VARCHAR2(255) DEFAULT 'STANDARD' NOT NULL,
-  version_url VARCHAR(1024),
-  version_xml CLOB,
-  version_xsd VARCHAR(512),
-  parent_id NUMBER(19),
-  PRIMARY KEY(repo_version_id)
-);
+  CONSTRAINT PK_adminprivilege PRIMARY KEY (privilege_id),
+  CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id),
+  CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id),
+  CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id));
 
 CREATE TABLE widget (
   id NUMBER(19) NOT NULL,
@@ -585,7 +660,7 @@ CREATE TABLE widget (
   widget_values CLOB,
   properties CLOB,
   cluster_id NUMBER(19) NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout (
@@ -596,21 +671,22 @@ CREATE TABLE widget_layout (
   user_name VARCHAR2(255) NOT NULL,
   display_name VARCHAR2(255),
   cluster_id NUMBER(19) NOT NULL,
-  PRIMARY KEY(id)
+  CONSTRAINT PK_widget_layout PRIMARY KEY (id)
 );
 
 CREATE TABLE widget_layout_user_widget (
   widget_layout_id NUMBER(19) NOT NULL,
   widget_id NUMBER(19) NOT NULL,
   widget_order smallint,
-  PRIMARY KEY(widget_layout_id, widget_id)
-);
+  CONSTRAINT PK_widget_layout_user_widget PRIMARY KEY (widget_layout_id, widget_id),
+  CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id),
+  CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id));
 
 CREATE TABLE artifact (
   artifact_name VARCHAR2(255) NOT NULL,
   foreign_keys VARCHAR2(255) NOT NULL,
   artifact_data CLOB NOT NULL,
-  PRIMARY KEY(artifact_name, foreign_keys));
+  CONSTRAINT PK_artifact PRIMARY KEY (artifact_name, foreign_keys));
 
 CREATE TABLE topology_request (
   id NUMBER(19) NOT NULL,
@@ -620,8 +696,8 @@ CREATE TABLE topology_request (
   cluster_properties CLOB,
   cluster_attributes CLOB,
   description VARCHAR(1024),
-  PRIMARY KEY(id)
-);
+  CONSTRAINT PK_topology_request PRIMARY KEY (id),
+  CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id));
 
 CREATE TABLE topology_hostgroup (
   id NUMBER(19) NOT NULL,
@@ -629,8 +705,8 @@ CREATE TABLE topology_hostgroup (
   group_properties CLOB,
   group_attributes CLOB,
   request_id NUMBER(19) NOT NULL,
-  PRIMARY KEY(id)
-);
+  CONSTRAINT PK_topology_hostgroup PRIMARY KEY (id),
+  CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_info (
   id NUMBER(19) NOT NULL,
@@ -640,15 +716,16 @@ CREATE TABLE topology_host_info (
   host_count INTEGER,
   predicate VARCHAR(2048),
   rack_info VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_info PRIMARY KEY (id),
+  CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id));
 
 CREATE TABLE topology_logical_request (
   id NUMBER(19) NOT NULL,
   request_id NUMBER(19) NOT NULL,
   description VARCHAR(1024),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_request PRIMARY KEY (id),
+  CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id));
 
 CREATE TABLE topology_host_request (
   id NUMBER(19) NOT NULL,
@@ -656,23 +733,25 @@ CREATE TABLE topology_host_request (
   group_id NUMBER(19) NOT NULL,
   stage_id NUMBER(19) NOT NULL,
   host_name VARCHAR(255),
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_request PRIMARY KEY (id),
+  CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id),
+  CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id));
 
 CREATE TABLE topology_host_task (
   id NUMBER(19) NOT NULL,
   host_request_id NUMBER(19) NOT NULL,
   type VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_host_task PRIMARY KEY (id),
+  CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id));
 
 CREATE TABLE topology_logical_task (
   id NUMBER(19) NOT NULL,
   host_task_id NUMBER(19) NOT NULL,
   physical_task_id NUMBER(19),
   component VARCHAR(255) NOT NULL,
-  PRIMARY KEY (id)
-);
+  CONSTRAINT PK_topology_logical_task PRIMARY KEY (id),
+  CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id),
+  CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id));
 
 CREATE TABLE setting (
   id NUMBER(19) NOT NULL,
@@ -681,7 +760,7 @@ CREATE TABLE setting (
   content CLOB NOT NULL,
   updated_by VARCHAR(255) DEFAULT '_db' NOT NULL,
   update_timestamp NUMBER(19) NOT NULL,
-  PRIMARY KEY (id)
+  CONSTRAINT PK_setting PRIMARY KEY (id)
 );
 
 
@@ -699,7 +778,7 @@ CREATE TABLE upgrade (
   skip_sc_failures NUMBER(1) DEFAULT 0 NOT NULL,
   downgrade_allowed NUMBER(1) DEFAULT 1 NOT NULL,
   suspended NUMBER(1) DEFAULT 0 NOT NULL,
-  PRIMARY KEY (upgrade_id),
+  CONSTRAINT PK_upgrade PRIMARY KEY (upgrade_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   FOREIGN KEY (request_id) REFERENCES request(request_id)
 );
@@ -709,7 +788,7 @@ CREATE TABLE upgrade_group (
   upgrade_id NUMBER(19) NOT NULL,
   group_name VARCHAR2(255) DEFAULT '' NOT NULL,
   group_title VARCHAR2(1024) DEFAULT '' NOT NULL,
-  PRIMARY KEY (upgrade_group_id),
+  CONSTRAINT PK_upgrade_group PRIMARY KEY (upgrade_group_id),
   FOREIGN KEY (upgrade_id) REFERENCES upgrade(upgrade_id)
 );
 
@@ -721,7 +800,7 @@ CREATE TABLE upgrade_item (
   hosts CLOB,
   tasks CLOB,
   item_text VARCHAR2(1024),
-  PRIMARY KEY (upgrade_item_id),
+  CONSTRAINT PK_upgrade_item PRIMARY KEY (upgrade_item_id),
   FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
 );
 
@@ -745,132 +824,34 @@ CREATE INDEX idx_hrc_request_id ON host_role_command (request_id);
 CREATE INDEX idx_hrc_status_role ON host_role_command (status, role);
 CREATE INDEX idx_rsc_request_id ON role_success_criteria (request_id);
 
---------altering tables by creating unique constraints----------
-ALTER TABLE users ADD CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type);
-ALTER TABLE groups ADD CONSTRAINT UNQ_groups_0 UNIQUE (group_name, ldap_group);
-ALTER TABLE members ADD CONSTRAINT UNQ_members_0 UNIQUE (group_id, user_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag);
-ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version);
-ALTER TABLE hosts ADD CONSTRAINT UQ_hosts_host_name UNIQUE (host_name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name);
-ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name);
-ALTER TABLE serviceconfig ADD CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version);
-ALTER TABLE adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name);
-ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version);
-ALTER TABLE stack ADD CONSTRAINT unq_stack UNIQUE (stack_name, stack_version);
-
---------altering tables by creating foreign keys----------
--- Note, Oracle has a limitation of 32 chars in the FK name, and we should use the same FK name in all DB types.
-ALTER TABLE members ADD CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id);
-ALTER TABLE members ADD CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id);
+-------- altering tables by creating foreign keys ----------
+-- #1: This should always be an exceptional case. FK constraints should be inlined in table definitions when possible
+--     (reorder table definitions if necessary).
+-- #2: Oracle has a limitation of 30 chars in the constraint names name, and we should use the same constraint names in all DB types.
 ALTER TABLE clusters ADD CONSTRAINT FK_clusters_upgrade_id FOREIGN KEY (upgrade_id) REFERENCES upgrade (upgrade_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE clusterservices ADD CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterconfigmapping ADD CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, service_name, cluster_id) REFERENCES servicecomponentdesiredstate (component_name, service_name, cluster_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE host_version ADD CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
-ALTER TABLE execution_command ADD CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE role_success_criteria ADD CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
-ALTER TABLE stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
-ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id);
-ALTER TABLE configgroup ADD CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_confg FOREIGN KEY (version_tag, config_type, cluster_id) REFERENCES clusterconfig (version_tag, type_name, cluster_id);
-ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
-ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE requestschedulebatchrequest ADD CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id);
-ALTER TABLE hostgroup ADD CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_component ADD CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup(blueprint_name, name);
-ALTER TABLE blueprint_configuration ADD CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
-ALTER TABLE hostgroup_configuration ADD CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup(blueprint_name, name);
-ALTER TABLE requestresourcefilter ADD CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE requestoperationlevel ADD CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
-ALTER TABLE viewparameter ADD CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewresource ADD CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
-ALTER TABLE viewinstanceproperty ADD CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE viewinstancedata ADD CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name);
-ALTER TABLE viewentity ADD CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
-ALTER TABLE adminresource ADD CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE adminprincipal ADD CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id);
-ALTER TABLE adminpermission ADD CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE viewmain ADD CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
-ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE users ADD CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE groups ADD CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id);
-ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id);
-ALTER TABLE topology_request ADD CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id);
-ALTER TABLE topology_hostgroup ADD CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
-ALTER TABLE topology_logical_request ADD CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id);
-ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
-ALTER TABLE topology_host_task ADD CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id);
-ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id);
-ALTER TABLE clusters ADD CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE serviceconfig ADD CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE clusterstate ADD CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE servicedesiredstate ADD CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
-ALTER TABLE blueprint ADD CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
-ALTER TABLE repo_version ADD CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
 
 -- Kerberos
 CREATE TABLE kerberos_principal (
   principal_name VARCHAR2(255) NOT NULL,
   is_service NUMBER(1) DEFAULT 1 NOT NULL,
   cached_keytab_path VARCHAR2(255),
-  PRIMARY KEY(principal_name)
+  CONSTRAINT PK_kerberos_principal PRIMARY KEY (principal_name)
 );
 
 CREATE TABLE kerberos_principal_host (
   principal_name VARCHAR2(255) NOT NULL,
   host_id NUMBER(19) NOT NULL,
-  PRIMARY KEY(principal_name, host_id)
-);
+  CONSTRAINT PK_kerberos_principal_host PRIMARY KEY (principal_name, host_id),
+  CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id),
+  CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name));
 
 CREATE TABLE kerberos_descriptor
 (
    kerberos_descriptor_name   VARCHAR2(255) NOT NULL,
    kerberos_descriptor        CLOB NOT NULL,
-   PRIMARY KEY (kerberos_descriptor_name)
+   CONSTRAINT PK_kerberos_descriptor PRIMARY KEY (kerberos_descriptor_name)
 );
 
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
-ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name);
 -- Kerberos (end)
 
 -- Alerting Framework
@@ -892,7 +873,7 @@ CREATE TABLE alert_definition (
   ignore_host NUMBER(1) DEFAULT 0 NOT NULL,
   repeat_tolerance NUMBER(10) DEFAULT 1 NOT NULL,
   repeat_tolerance_enabled NUMBER(1) DEFAULT 0 NOT NULL,
-  PRIMARY KEY (definition_id),
+  CONSTRAINT PK_alert_definition PRIMARY KEY (definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
   CONSTRAINT uni_alert_def_name UNIQUE(cluster_id,definition_name)
 );
@@ -909,7 +890,7 @@ CREATE TABLE alert_history (
   alert_label VARCHAR2(1024),
   alert_state VARCHAR2(255) NOT NULL,
   alert_text CLOB,
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_history PRIMARY KEY (alert_id),
   FOREIGN KEY (alert_definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
 );
@@ -924,7 +905,7 @@ CREATE TABLE alert_current (
   latest_text CLOB,
   occurrences NUMBER(19) DEFAULT 1 NOT NULL,
   firmness VARCHAR2(255) DEFAULT 'HARD' NOT NULL,
-  PRIMARY KEY (alert_id),
+  CONSTRAINT PK_alert_current PRIMARY KEY (alert_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -935,7 +916,7 @@ CREATE TABLE alert_group (
   group_name VARCHAR2(255) NOT NULL,
   is_default NUMBER(1) DEFAULT 0 NOT NULL,
   service_name VARCHAR2(255),
-  PRIMARY KEY (group_id),
+  CONSTRAINT PK_alert_group PRIMARY KEY (group_id),
   CONSTRAINT uni_alert_group_name UNIQUE(cluster_id,group_name)
 );
 
@@ -946,7 +927,7 @@ CREATE TABLE alert_target (
   properties CLOB,
   description VARCHAR2(1024),
   is_global NUMBER(1) DEFAULT 0 NOT NULL,
-  PRIMARY KEY (target_id)
+  CONSTRAINT PK_alert_target PRIMARY KEY (target_id)
 );
 
 CREATE TABLE alert_target_states (
@@ -958,7 +939,7 @@ CREATE TABLE alert_target_states (
 CREATE TABLE alert_group_target (
   group_id NUMBER(19) NOT NULL,
   target_id NUMBER(19) NOT NULL,
-  PRIMARY KEY (group_id, target_id),
+  CONSTRAINT PK_alert_group_target PRIMARY KEY (group_id, target_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id)
 );
@@ -966,7 +947,7 @@ CREATE TABLE alert_group_target (
 CREATE TABLE alert_grouping (
   definition_id NUMBER(19) NOT NULL,
   group_id NUMBER(19) NOT NULL,
-  PRIMARY KEY (group_id, definition_id),
+  CONSTRAINT PK_alert_grouping PRIMARY KEY (group_id, definition_id),
   FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (group_id) REFERENCES alert_group(group_id)
 );
@@ -977,7 +958,7 @@ CREATE TABLE alert_notice (
   history_id NUMBER(19) NOT NULL,
   notify_state VARCHAR2(255) NOT NULL,
   uuid VARCHAR2(64) NOT NULL UNIQUE,
-  PRIMARY KEY (notification_id),
+  CONSTRAINT PK_alert_notice PRIMARY KEY (notification_id),
   FOREIGN KEY (target_id) REFERENCES alert_target(target_id),
   FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
 );
@@ -1335,7 +1316,7 @@ CREATE TABLE workflow (
   numJobsTotal INTEGER, numJobsCompleted INTEGER,
   inputBytes INTEGER, outputBytes INTEGER,
   duration INTEGER,
-  PRIMARY KEY (workflowId),
+  CONSTRAINT PK_workflow PRIMARY KEY (workflowId),
   FOREIGN KEY (parentWorkflowId) REFERENCES workflow(workflowId) ON DELETE CASCADE
 );
 
@@ -1349,7 +1330,7 @@ CREATE TABLE job (
   mapsRuntime INTEGER, reducesRuntime INTEGER,
   mapCounters VARCHAR2(4000), reduceCounters VARCHAR2(4000), jobCounters VARCHAR2(4000),
   inputBytes INTEGER, outputBytes INTEGER,
-  PRIMARY KEY(jobId),
+  CONSTRAINT PK_job PRIMARY KEY (jobId),
   FOREIGN KEY(workflowId) REFERENCES workflow(workflowId) ON DELETE CASCADE
 );
 
@@ -1357,7 +1338,7 @@ CREATE TABLE task (
   taskId VARCHAR2(4000), jobId VARCHAR2(4000), taskType VARCHAR2(4000), splits VARCHAR2(4000),
   startTime INTEGER, finishTime INTEGER, status VARCHAR2(4000), error CLOB, counters VARCHAR2(4000),
   failedAttempt VARCHAR2(4000),
-  PRIMARY KEY(taskId),
+  CONSTRAINT PK_task PRIMARY KEY (taskId),
   FOREIGN KEY(jobId) REFERENCES job(jobId) ON DELETE CASCADE
 );
 
@@ -1368,7 +1349,7 @@ CREATE TABLE taskAttempt (
   locality VARCHAR2(4000), avataar VARCHAR2(4000),
   status VARCHAR2(4000), error CLOB, counters VARCHAR2(4000),
   inputBytes INTEGER, outputBytes INTEGER,
-  PRIMARY KEY(taskAttemptId),
+  CONSTRAINT PK_taskAttempt PRIMARY KEY (taskAttemptId),
   FOREIGN KEY(jobId) REFERENCES job(jobId) ON DELETE CASCADE,
   FOREIGN KEY(taskId) REFERENCES task(taskId) ON DELETE CASCADE
 );