diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/SqlTable.java b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/SqlTable.java
index 46781b4..c9cb1e0 100644
--- a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/SqlTable.java
+++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/enums/SqlTable.java
@@ -19,6 +19,7 @@
 import java.util.Arrays;
 import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.osee.framework.core.data.OseeCodeVersion;
 import org.eclipse.osee.framework.jdk.core.type.ChainingArrayList;
 import org.eclipse.osee.framework.jdk.core.type.NamedBase;
 import org.eclipse.osee.framework.jdk.core.util.Collections;
@@ -136,21 +137,15 @@
    public static final SqlColumn TX_DETAILS_TX_TYPE = TX_DETAILS_TABLE.addColumn("TX_TYPE", JDBCType.SMALLINT);
    public static final SqlColumn TX_DETAILS_TX_COMMIT_ART_ID =
       TX_DETAILS_TABLE.addColumn("COMMIT_ART_ID", JDBCType.BIGINT, true);
+   public static final SqlColumn TX_DETAILS_BUILD_ID = TX_DETAILS_TABLE.addColumn("BUILD_ID", JDBCType.BIGINT);
    static {
       TX_DETAILS_TABLE.setPrimaryKeyConstraint(TX_DETAILS_TRANSACTION_ID);
       TX_DETAILS_TABLE.setForeignKeyConstraint("BRANCH_ID_FK1", TX_DETAILS_TX_BRANCH_ID, BRANCH_TABLE, BRANCH_ID);
       TX_DETAILS_TABLE.createIndex("OSEE_TX_DETAILS_B_TX_IDX", true, TX_DETAILS_TX_BRANCH_ID.getName(),
          TX_DETAILS_TRANSACTION_ID.getName());
       TX_DETAILS_TABLE.addStatement("INSERT INTO OSEE_TX_DETAILS (" + Collections.toString(",",
-         (TX_DETAILS_TABLE.columns)) + ") VALUES (1,1,-1,CURRENT_TIMESTAMP,'" + CoreBranches.SYSTEM_ROOT.getName() + " Creation',1,NULL)");
-
-      TX_DETAILS_TABLE.addStatement(
-         "ALTER TABLE " + BRANCH_TABLE.getName() + " ADD CONSTRAINT PARENT_TX_ID_FK1 FOREIGN KEY(" + BRANCH_PARENT_TRANSACTION_ID.getName() + ") REFERENCES " + TX_DETAILS_TABLE.getName() + "(" + TX_DETAILS_TRANSACTION_ID.getName() + ")");
-      TX_DETAILS_TABLE.addStatement(
-         "ALTER TABLE " + BRANCH_TABLE.getName() + " ADD CONSTRAINT BASELINE_TX_ID_FK1 FOREIGN KEY(" + BRANCH_BASELINE_TRANSACTION_ID.getName() + ") REFERENCES " + TX_DETAILS_TABLE.getName() + "(" + TX_DETAILS_TRANSACTION_ID.getName() + ")");
-
+         (TX_DETAILS_TABLE.columns)) + ") VALUES (1,1,-1,CURRENT_TIMESTAMP,'" + CoreBranches.SYSTEM_ROOT.getName() + " Creation',1,NULL," + OseeCodeVersion.getVersionId() + ")");
    }
-   public static final SqlColumn TX_DETAILS_BUILD_ID = TX_DETAILS_TABLE.addColumn("BUILD_ID", JDBCType.BIGINT);
 
    public static final SqlTable OSEE_PERMISSION_TABLE = new SqlTable("osee_permission", "per");
    public static final SqlColumn OSEE_PERMISSION_PERMISSION_NAME =
@@ -187,8 +182,8 @@
       OSEE_BRANCH_ACL_TABLE.addColumn("PERMISSION_ID", JDBCType.INTEGER);
    static {
       OSEE_BRANCH_ACL_TABLE.setPrimaryKeyConstraint(OSEE_BRANCH_ACL_BRANCH_ID, OSEE_BRANCH_ACL_PRIVILEGE_ENTITY_ID);
-      OSEE_BRANCH_ACL_TABLE.setForeignKeyConstraint("BRANCH_ACL_FK", OSEE_BRANCH_ACL_BRANCH_ID, BRANCH_TABLE, BRANCH_ID,
-         "ON DELETE CASCADE");
+      OSEE_BRANCH_ACL_TABLE.setForeignKeyConstraintCascadeDelete("BRANCH_ACL_FK", OSEE_BRANCH_ACL_BRANCH_ID,
+         BRANCH_TABLE, BRANCH_ID);
       OSEE_BRANCH_ACL_TABLE.setForeignKeyConstraint("BRANCH_ACL_PERM_FK", OSEE_BRANCH_ACL_PERMISSION_ID,
          OSEE_PERMISSION_TABLE, OSEE_PERMISSION_PERMISSION_ID);
 
@@ -631,9 +626,9 @@
       OSEE_OAUTH_AUTHORIZATION_TABLE.addVarCharColumn("CODE", 512, true);
    static {
       OSEE_OAUTH_AUTHORIZATION_TABLE.setPrimaryKeyConstraint(OSEE_OAUTH_AUTHORIZATION_ID);
-      OSEE_OAUTH_AUTHORIZATION_TABLE.setForeignKeyConstraint("OSEE_OAUTH_AUTH__CI_FK",
-         OSEE_OAUTH_AUTHORIZATION_CLIENT_ID, OSEE_OAUTH_CLIENT_CREDENTIAL_TABLE, OSEE_OAUTH_CLIENT_CREDENTIAL_CLIENT_ID,
-         "ON DELETE CASCADE");
+      OSEE_OAUTH_AUTHORIZATION_TABLE.setForeignKeyConstraintCascadeDelete("OSEE_OAUTH_AUTH__CI_FK",
+         OSEE_OAUTH_AUTHORIZATION_CLIENT_ID, OSEE_OAUTH_CLIENT_CREDENTIAL_TABLE,
+         OSEE_OAUTH_CLIENT_CREDENTIAL_CLIENT_ID);
       OSEE_OAUTH_AUTHORIZATION_TABLE.createIndex("OSEE_OAUTH_AUTH__C_IDX", false,
          OSEE_OAUTH_AUTHORIZATION_CODE.getName());
    }
@@ -662,8 +657,8 @@
       OSEE_OAUTH_TOKEN_TABLE.addVarCharColumn("TOKEN_TYPE", 255, true);
    static {
       OSEE_OAUTH_TOKEN_TABLE.setPrimaryKeyConstraint(OSEE_OAUTH_TOKEN_ID);
-      OSEE_OAUTH_TOKEN_TABLE.setForeignKeyConstraint("OSEE_OAUTH_TOKEN__CI_FK", OSEE_OAUTH_TOKEN_CLIENT_ID,
-         OSEE_OAUTH_CLIENT_CREDENTIAL_TABLE, OSEE_OAUTH_CLIENT_CREDENTIAL_CLIENT_ID, "ON DELETE CASCADE");
+      OSEE_OAUTH_TOKEN_TABLE.setForeignKeyConstraintCascadeDelete("OSEE_OAUTH_TOKEN__CI_FK", OSEE_OAUTH_TOKEN_CLIENT_ID,
+         OSEE_OAUTH_CLIENT_CREDENTIAL_TABLE, OSEE_OAUTH_CLIENT_CREDENTIAL_CLIENT_ID);
       OSEE_OAUTH_TOKEN_TABLE.createIndex("OSEE_OAUTH_TOKEN__TK_IDX", false, OSEE_OAUTH_TOKEN_TOKEN_KEY.getName());
    }
 
@@ -673,7 +668,7 @@
    private final ArrayList<String> constraints;
    private final ArrayList<String> statements;
    private final int indexLevel;
-   private boolean hasJoinTblSp = false;
+   private final boolean hasJoinTblSp;
    private String tableExtras;
 
    private SqlTable(String tableName, String aliasPrefix) {
@@ -689,13 +684,7 @@
    }
 
    private SqlTable(String tableName, String aliasPrefix, ObjectType objectType, int indexLevel) {
-      super(tableName);
-      this.aliasPrefix = aliasPrefix;
-      this.objectType = objectType;
-      columns = new ChainingArrayList<>();
-      constraints = new ArrayList<>();
-      statements = new ArrayList<>();
-      this.indexLevel = indexLevel;
+      this(tableName, aliasPrefix, objectType, indexLevel, false);
    }
 
    private SqlTable(String tableName, String aliasPrefix, ObjectType objectType, int indexLevel, boolean hasJoinTblSp) {
@@ -768,14 +757,9 @@
          "CONSTRAINT " + constraintName + " FOREIGN KEY (" + column + ") REFERENCES " + refTable + " (" + refColumn + ")");
    }
 
-   public void setForeignKeyConstraint(String constraintName, SqlColumn column, SqlTable refTable, SqlColumn refColumn, String extras) {
+   public void setForeignKeyConstraintCascadeDelete(String constraintName, SqlColumn column, SqlTable refTable, SqlColumn refColumn) {
       constraints.add(
-         "CONSTRAINT " + constraintName + " FOREIGN KEY (" + column + ") REFERENCES " + refTable + " (" + refColumn + ") " + extras);
-   }
-
-   public void setForeignKeyConstraint(SqlColumn column, SqlTable refTable, SqlColumn refColumn) {
-      constraints.add(
-         "CONSTRAINT " + getName() + "FOREIGN KEY (" + column + ") REFERENCES " + refTable + " (" + refColumn + ")");
+         "CONSTRAINT " + constraintName + " FOREIGN KEY (" + column + ") REFERENCES " + refTable + " (" + refColumn + ") ON DELETE CASCADE");
    }
 
    public void setUniqueKeyConstraint(String constraintName, String columnName) {
@@ -784,10 +768,10 @@
 
    public void createIndex(String indexName, boolean hasIndexTablespace, String... columns) {
       if (hasIndexTablespace) {
-         statements.add("CREATE INDEX " + indexName + " ON " + getName() + " (" + Collections.toString(",",
+         addStatement("CREATE INDEX " + indexName + " ON " + getName() + " (" + Collections.toString(",",
             Arrays.asList(columns)) + ")");
       } else {
-         statements.add("CREATE INDEX " + indexName + " ON " + getName() + " (" + Collections.toString(",",
+         addStatement("CREATE INDEX " + indexName + " ON " + getName() + " (" + Collections.toString(",",
             Arrays.asList(columns)) + ")");
       }
    }
diff --git a/plugins/org.eclipse.osee.jdbc/src/org/eclipse/osee/jdbc/internal/DatabaseCreation.java b/plugins/org.eclipse.osee.jdbc/src/org/eclipse/osee/jdbc/internal/DatabaseCreation.java
index 3be8869..08428f5 100644
--- a/plugins/org.eclipse.osee.jdbc/src/org/eclipse/osee/jdbc/internal/DatabaseCreation.java
+++ b/plugins/org.eclipse.osee.jdbc/src/org/eclipse/osee/jdbc/internal/DatabaseCreation.java
@@ -13,9 +13,51 @@
 
 package org.eclipse.osee.jdbc.internal;
 
+import static org.eclipse.osee.framework.core.enums.SqlTable.ARTIFACT_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.ATTRIBUTE_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.BRANCH_BASELINE_TRANSACTION_ID;
+import static org.eclipse.osee.framework.core.enums.SqlTable.BRANCH_PARENT_TRANSACTION_ID;
+import static org.eclipse.osee.framework.core.enums.SqlTable.BRANCH_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.LDAP_DETAILS_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_ACTIVITY_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_ACTIVITY_TYPE_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_ARTIFACT_ACL_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_BRANCH_ACL_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_BRANCH_GROUP_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_CONFLICT_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_IMPORT_INDEX_MAP_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_IMPORT_MAP_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_IMPORT_SAVE_POINT_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_IMPORT_SOURCE_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_INFO_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_JOIN_ARTIFACT_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_JOIN_CHAR_ID_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_JOIN_CLEANUP_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_JOIN_EXPORT_IMPORT_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_JOIN_ID4_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_JOIN_ID_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_JOIN_TRANSACTION_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_KEY_VALUE_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_MERGE_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_OAUTH_AUTHORIZATION_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_OAUTH_CLIENT_CREDENTIAL_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_OAUTH_TOKEN_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_PERMISSION_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_SEARCH_TAGS_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_SEQUENCE_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_SERVER_LOOKUP_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_SESSION_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.OSEE_TAG_GAMMA_QUEUE_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.RELATION_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.TUPLE2;
+import static org.eclipse.osee.framework.core.enums.SqlTable.TUPLE3;
+import static org.eclipse.osee.framework.core.enums.SqlTable.TUPLE4;
+import static org.eclipse.osee.framework.core.enums.SqlTable.TXS_ARCHIVED_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.TXS_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.TX_DETAILS_TABLE;
+import static org.eclipse.osee.framework.core.enums.SqlTable.TX_DETAILS_TRANSACTION_ID;
 import java.sql.JDBCType;
 import java.util.logging.Level;
-
 import org.eclipse.osee.framework.core.enums.SqlColumn;
 import org.eclipse.osee.framework.core.enums.SqlTable;
 import org.eclipse.osee.framework.jdk.core.util.Collections;
@@ -45,46 +87,52 @@
    public void createDataStore() {
       dropTables();
 
-      createTable(SqlTable.ARTIFACT_TABLE);
-      createTable(SqlTable.ATTRIBUTE_TABLE);
-      createTable(SqlTable.RELATION_TABLE);
-      createTable(SqlTable.BRANCH_TABLE);
-      createTable(SqlTable.TXS_TABLE);
-      createTable(SqlTable.TXS_ARCHIVED_TABLE);
-      createTable(SqlTable.TX_DETAILS_TABLE);
-      createTable(SqlTable.OSEE_PERMISSION_TABLE);
-      createTable(SqlTable.OSEE_ARTIFACT_ACL_TABLE);
-      createTable(SqlTable.OSEE_BRANCH_ACL_TABLE);
-      createTable(SqlTable.OSEE_SEARCH_TAGS_TABLE);
-      createTable(SqlTable.OSEE_TAG_GAMMA_QUEUE_TABLE);
-      createTable(SqlTable.OSEE_SEQUENCE_TABLE);
-      createTable(SqlTable.OSEE_INFO_TABLE);
-      createTable(SqlTable.OSEE_MERGE_TABLE);
-      createTable(SqlTable.OSEE_CONFLICT_TABLE);
-      createTable(SqlTable.OSEE_JOIN_EXPORT_IMPORT_TABLE);
-      createTable(SqlTable.OSEE_IMPORT_SOURCE_TABLE);
-      createTable(SqlTable.OSEE_IMPORT_SAVE_POINT_TABLE);
-      createTable(SqlTable.OSEE_IMPORT_MAP_TABLE);
-      createTable(SqlTable.OSEE_IMPORT_INDEX_MAP_TABLE);
-      createTable(SqlTable.OSEE_JOIN_ARTIFACT_TABLE);
-      createTable(SqlTable.OSEE_JOIN_ID_TABLE);
-      createTable(SqlTable.OSEE_JOIN_CLEANUP_TABLE);
-      createTable(SqlTable.OSEE_JOIN_CHAR_ID_TABLE);
-      createTable(SqlTable.OSEE_JOIN_TRANSACTION_TABLE);
-      createTable(SqlTable.OSEE_BRANCH_GROUP_TABLE);
-      createTable(SqlTable.LDAP_DETAILS_TABLE);
-      createTable(SqlTable.TUPLE2);
-      createTable(SqlTable.TUPLE3);
-      createTable(SqlTable.TUPLE4);
-      createTable(SqlTable.OSEE_KEY_VALUE_TABLE);
-      createTable(SqlTable.OSEE_JOIN_ID4_TABLE);
-      createTable(SqlTable.OSEE_SERVER_LOOKUP_TABLE);
-      createTable(SqlTable.OSEE_SESSION_TABLE);
-      createTable(SqlTable.OSEE_ACTIVITY_TYPE_TABLE);
-      createTable(SqlTable.OSEE_ACTIVITY_TABLE);
-      createTable(SqlTable.OSEE_OAUTH_CLIENT_CREDENTIAL_TABLE);
-      createTable(SqlTable.OSEE_OAUTH_AUTHORIZATION_TABLE);
-      createTable(SqlTable.OSEE_OAUTH_TOKEN_TABLE);
+      createTable(ARTIFACT_TABLE);
+      createTable(ATTRIBUTE_TABLE);
+      createTable(RELATION_TABLE);
+      createTable(BRANCH_TABLE);
+      createTable(TXS_TABLE);
+      createTable(TXS_ARCHIVED_TABLE);
+      createTable(TX_DETAILS_TABLE);
+
+      alterForeignKeyConstraint("PARENT_TX_ID_FK1", BRANCH_TABLE, BRANCH_PARENT_TRANSACTION_ID, TX_DETAILS_TABLE,
+         TX_DETAILS_TRANSACTION_ID, "");
+      deferredForeignKeyConstraint("BASELINE_TX_ID_FK1", BRANCH_TABLE, BRANCH_BASELINE_TRANSACTION_ID, TX_DETAILS_TABLE,
+         TX_DETAILS_TRANSACTION_ID);
+
+      createTable(OSEE_PERMISSION_TABLE);
+      createTable(OSEE_ARTIFACT_ACL_TABLE);
+      createTable(OSEE_BRANCH_ACL_TABLE);
+      createTable(OSEE_SEARCH_TAGS_TABLE);
+      createTable(OSEE_TAG_GAMMA_QUEUE_TABLE);
+      createTable(OSEE_SEQUENCE_TABLE);
+      createTable(OSEE_INFO_TABLE);
+      createTable(OSEE_MERGE_TABLE);
+      createTable(OSEE_CONFLICT_TABLE);
+      createTable(OSEE_JOIN_EXPORT_IMPORT_TABLE);
+      createTable(OSEE_IMPORT_SOURCE_TABLE);
+      createTable(OSEE_IMPORT_SAVE_POINT_TABLE);
+      createTable(OSEE_IMPORT_MAP_TABLE);
+      createTable(OSEE_IMPORT_INDEX_MAP_TABLE);
+      createTable(OSEE_JOIN_ARTIFACT_TABLE);
+      createTable(OSEE_JOIN_ID_TABLE);
+      createTable(OSEE_JOIN_CLEANUP_TABLE);
+      createTable(OSEE_JOIN_CHAR_ID_TABLE);
+      createTable(OSEE_JOIN_TRANSACTION_TABLE);
+      createTable(OSEE_BRANCH_GROUP_TABLE);
+      createTable(LDAP_DETAILS_TABLE);
+      createTable(TUPLE2);
+      createTable(TUPLE3);
+      createTable(TUPLE4);
+      createTable(OSEE_KEY_VALUE_TABLE);
+      createTable(OSEE_JOIN_ID4_TABLE);
+      createTable(OSEE_SERVER_LOOKUP_TABLE);
+      createTable(OSEE_SESSION_TABLE);
+      createTable(OSEE_ACTIVITY_TYPE_TABLE);
+      createTable(OSEE_ACTIVITY_TABLE);
+      createTable(OSEE_OAUTH_CLIENT_CREDENTIAL_TABLE);
+      createTable(OSEE_OAUTH_AUTHORIZATION_TABLE);
+      createTable(OSEE_OAUTH_TOKEN_TABLE);
    }
 
    private void dropTable(SqlTable table) {
@@ -96,61 +144,61 @@
    }
 
    private void dropTables() {
-      dropConstraint(SqlTable.TX_DETAILS_TABLE, "BRANCH_ID_FK1");
-      dropConstraint(SqlTable.OSEE_ARTIFACT_ACL_TABLE, "ARTIFACT_ACL_PERM_FK");
-      dropConstraint(SqlTable.OSEE_BRANCH_ACL_TABLE, "BRANCH_ACL_PERM_FK");
-      dropConstraint(SqlTable.OSEE_PERMISSION_TABLE, SqlTable.OSEE_PERMISSION_TABLE.getName() + "_PK");
-      dropConstraint(SqlTable.OSEE_MERGE_TABLE, "OSEE_MERGE__MBI_FK");
-      dropConstraint(SqlTable.OSEE_MERGE_TABLE, "OSEE_MERGE__DBI_FK");
-      dropConstraint(SqlTable.OSEE_BRANCH_ACL_TABLE, "BRANCH_ACL_FK");
-      dropConstraint(SqlTable.BRANCH_TABLE, SqlTable.BRANCH_TABLE.getName() + "_PK");
-      dropConstraint(SqlTable.TUPLE2, SqlTable.TUPLE2.getName() + "_PK");
-      dropConstraint(SqlTable.OSEE_IMPORT_SAVE_POINT_TABLE, "OSEE_IMP_SAVE_POINT_II_FK");
-      dropConstraint(SqlTable.OSEE_IMPORT_MAP_TABLE, "OSEE_IMPORT_MAP_II_FK");
-      dropConstraint(SqlTable.OSEE_IMPORT_INDEX_MAP_TABLE, "OSEE_IMPORT_INDEX_MAP_II_FK");
-      dropConstraint(SqlTable.OSEE_OAUTH_AUTHORIZATION_TABLE, "OSEE_OAUTH_AUTH__CI_FK");
-      dropConstraint(SqlTable.OSEE_OAUTH_TOKEN_TABLE, "OSEE_OAUTH_TOKEN__CI_FK");
+      dropConstraint(TX_DETAILS_TABLE, "BRANCH_ID_FK1");
+      dropConstraint(OSEE_ARTIFACT_ACL_TABLE, "ARTIFACT_ACL_PERM_FK");
+      dropConstraint(OSEE_BRANCH_ACL_TABLE, "BRANCH_ACL_PERM_FK");
+      dropConstraint(OSEE_PERMISSION_TABLE, OSEE_PERMISSION_TABLE.getName() + "_PK");
+      dropConstraint(OSEE_MERGE_TABLE, "OSEE_MERGE__MBI_FK");
+      dropConstraint(OSEE_MERGE_TABLE, "OSEE_MERGE__DBI_FK");
+      dropConstraint(OSEE_BRANCH_ACL_TABLE, "BRANCH_ACL_FK");
+      dropConstraint(BRANCH_TABLE, BRANCH_TABLE.getName() + "_PK");
+      dropConstraint(TUPLE2, TUPLE2.getName() + "_PK");
+      dropConstraint(OSEE_IMPORT_SAVE_POINT_TABLE, "OSEE_IMP_SAVE_POINT_II_FK");
+      dropConstraint(OSEE_IMPORT_MAP_TABLE, "OSEE_IMPORT_MAP_II_FK");
+      dropConstraint(OSEE_IMPORT_INDEX_MAP_TABLE, "OSEE_IMPORT_INDEX_MAP_II_FK");
+      dropConstraint(OSEE_OAUTH_AUTHORIZATION_TABLE, "OSEE_OAUTH_AUTH__CI_FK");
+      dropConstraint(OSEE_OAUTH_TOKEN_TABLE, "OSEE_OAUTH_TOKEN__CI_FK");
 
-      dropTable(SqlTable.OSEE_ARTIFACT_ACL_TABLE);
-      dropTable(SqlTable.OSEE_BRANCH_ACL_TABLE);
-      dropTable(SqlTable.OSEE_CONFLICT_TABLE);
-      dropTable(SqlTable.OSEE_MERGE_TABLE);
-      dropTable(SqlTable.ARTIFACT_TABLE);
-      dropTable(SqlTable.ATTRIBUTE_TABLE);
-      dropTable(SqlTable.RELATION_TABLE);
-      dropTable(SqlTable.BRANCH_TABLE);
-      dropTable(SqlTable.TXS_TABLE);
-      dropTable(SqlTable.TXS_ARCHIVED_TABLE);
-      dropTable(SqlTable.TX_DETAILS_TABLE);
-      dropTable(SqlTable.OSEE_PERMISSION_TABLE);
-      dropTable(SqlTable.OSEE_SEARCH_TAGS_TABLE);
-      dropTable(SqlTable.OSEE_TAG_GAMMA_QUEUE_TABLE);
-      dropTable(SqlTable.OSEE_SEQUENCE_TABLE);
-      dropTable(SqlTable.OSEE_INFO_TABLE);
-      dropTable(SqlTable.OSEE_JOIN_EXPORT_IMPORT_TABLE);
-      dropTable(SqlTable.OSEE_IMPORT_SOURCE_TABLE);
-      dropTable(SqlTable.OSEE_IMPORT_SAVE_POINT_TABLE);
-      dropTable(SqlTable.OSEE_IMPORT_MAP_TABLE);
-      dropTable(SqlTable.OSEE_IMPORT_INDEX_MAP_TABLE);
-      dropTable(SqlTable.OSEE_JOIN_ARTIFACT_TABLE);
-      dropTable(SqlTable.OSEE_JOIN_ID_TABLE);
-      dropTable(SqlTable.OSEE_JOIN_CLEANUP_TABLE);
-      dropTable(SqlTable.OSEE_JOIN_CHAR_ID_TABLE);
-      dropTable(SqlTable.OSEE_JOIN_TRANSACTION_TABLE);
-      dropTable(SqlTable.OSEE_BRANCH_GROUP_TABLE);
-      dropTable(SqlTable.LDAP_DETAILS_TABLE);
-      dropTable(SqlTable.TUPLE2);
-      dropTable(SqlTable.TUPLE3);
-      dropTable(SqlTable.TUPLE4);
-      dropTable(SqlTable.OSEE_KEY_VALUE_TABLE);
-      dropTable(SqlTable.OSEE_JOIN_ID4_TABLE);
-      dropTable(SqlTable.OSEE_SERVER_LOOKUP_TABLE);
-      dropTable(SqlTable.OSEE_SESSION_TABLE);
-      dropTable(SqlTable.OSEE_ACTIVITY_TYPE_TABLE);
-      dropTable(SqlTable.OSEE_ACTIVITY_TABLE);
-      dropTable(SqlTable.OSEE_OAUTH_CLIENT_CREDENTIAL_TABLE);
-      dropTable(SqlTable.OSEE_OAUTH_AUTHORIZATION_TABLE);
-      dropTable(SqlTable.OSEE_OAUTH_TOKEN_TABLE);
+      dropTable(OSEE_ARTIFACT_ACL_TABLE);
+      dropTable(OSEE_BRANCH_ACL_TABLE);
+      dropTable(OSEE_CONFLICT_TABLE);
+      dropTable(OSEE_MERGE_TABLE);
+      dropTable(ARTIFACT_TABLE);
+      dropTable(ATTRIBUTE_TABLE);
+      dropTable(RELATION_TABLE);
+      dropTable(BRANCH_TABLE);
+      dropTable(TXS_TABLE);
+      dropTable(TXS_ARCHIVED_TABLE);
+      dropTable(TX_DETAILS_TABLE);
+      dropTable(OSEE_PERMISSION_TABLE);
+      dropTable(OSEE_SEARCH_TAGS_TABLE);
+      dropTable(OSEE_TAG_GAMMA_QUEUE_TABLE);
+      dropTable(OSEE_SEQUENCE_TABLE);
+      dropTable(OSEE_INFO_TABLE);
+      dropTable(OSEE_JOIN_EXPORT_IMPORT_TABLE);
+      dropTable(OSEE_IMPORT_SOURCE_TABLE);
+      dropTable(OSEE_IMPORT_SAVE_POINT_TABLE);
+      dropTable(OSEE_IMPORT_MAP_TABLE);
+      dropTable(OSEE_IMPORT_INDEX_MAP_TABLE);
+      dropTable(OSEE_JOIN_ARTIFACT_TABLE);
+      dropTable(OSEE_JOIN_ID_TABLE);
+      dropTable(OSEE_JOIN_CLEANUP_TABLE);
+      dropTable(OSEE_JOIN_CHAR_ID_TABLE);
+      dropTable(OSEE_JOIN_TRANSACTION_TABLE);
+      dropTable(OSEE_BRANCH_GROUP_TABLE);
+      dropTable(LDAP_DETAILS_TABLE);
+      dropTable(TUPLE2);
+      dropTable(TUPLE3);
+      dropTable(TUPLE4);
+      dropTable(OSEE_KEY_VALUE_TABLE);
+      dropTable(OSEE_JOIN_ID4_TABLE);
+      dropTable(OSEE_SERVER_LOOKUP_TABLE);
+      dropTable(OSEE_SESSION_TABLE);
+      dropTable(OSEE_ACTIVITY_TYPE_TABLE);
+      dropTable(OSEE_ACTIVITY_TABLE);
+      dropTable(OSEE_OAUTH_CLIENT_CREDENTIAL_TABLE);
+      dropTable(OSEE_OAUTH_AUTHORIZATION_TABLE);
+      dropTable(OSEE_OAUTH_TOKEN_TABLE);
    }
 
    public String columnToSql(SqlColumn column) {
@@ -192,6 +240,7 @@
    }
 
    public void createTable(SqlTable table) {
+
       StringBuilder sql = new StringBuilder(200);
       sql.append("CREATE TABLE ");
       sql.append(table.getName());
@@ -205,7 +254,9 @@
       }
       sql.append(Collections.toString(",\n\t", table.getConstraints()));
       sql.append("\n)");
-      if (jdbcClient.getDbType().equals(JdbcDbType.oracle)) {
+
+      JdbcDbType dbType = jdbcClient.getDbType();
+      if (dbType.equals(JdbcDbType.oracle)) {
          if (table.getIndexLevel() != -1) {
             sql.append("\tORGANIZATION INDEX ");
             if (table.getIndexLevel() > 0) {
@@ -216,26 +267,25 @@
             sql.append("\n\t" + table.getTableExtras());
          }
       }
-      sql.append("\n\n");
-      for (int i = 0; i < table.getStatements().size(); i++) {
-         if (table.getStatements().get(i).contains("BASELINE_TX_ID_FK1")) {
-            if (jdbcClient.getDbType().equals(JdbcDbType.oracle) || jdbcClient.getDbType().equals(
-               JdbcDbType.postgresql)) {
-               table.getStatements().set(i, table.getStatements().get(i) + "DEFERRABLE INITIALLY DEFERRED");
-            }
-         }
-      }
-
-      sql.append("\n");
       jdbcClient.runPreparedUpdate(sql.toString());
+
       for (String statement : table.getStatements()) {
-         if (statement.contains("CREATE INDEX")) {
-            if (jdbcClient.getDbType().equals(JdbcDbType.oracle)) {
-               statement += " TABLESPACE osee_index";
-            }
+         if (statement.contains("CREATE INDEX") && dbType.equals(JdbcDbType.oracle)) {
+            statement += " TABLESPACE osee_index";
          }
          jdbcClient.runPreparedUpdate(statement);
       }
-
    }
-}
+
+   private void deferredForeignKeyConstraint(String constraintName, SqlTable table, SqlColumn column, SqlTable refTable, SqlColumn refColumn) {
+      String defered = jdbcClient.getDbType().matches(JdbcDbType.oracle,
+         JdbcDbType.postgresql) ? " DEFERRABLE INITIALLY DEFERRED" : "";
+      alterForeignKeyConstraint(constraintName, table, column, refTable, refColumn, defered);
+   }
+
+   private void alterForeignKeyConstraint(String constraintName, SqlTable table, SqlColumn column, SqlTable refTable, SqlColumn refColumn, String defered) {
+      String statement = String.format("ALTER TABLE %s ADD CONSTRAINT %s FOREIGN KEY(%s) REFERENCES %s(%s)%s", table,
+         constraintName, column, refTable, refColumn, defered);
+      jdbcClient.runPreparedUpdate(statement);
+   }
+}
\ No newline at end of file
