diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 7ca021a..024cb17 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -90,6 +90,7 @@
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DatasetFullyQualifiedName;
 import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.common.metadata.IDataset;
 import org.apache.asterix.common.metadata.IMetadataLockUtil;
 import org.apache.asterix.common.metadata.MetadataConstants;
@@ -824,6 +825,8 @@
             DataverseName metaItemTypeDataverseName, String metaItemTypeName, IHyracksClientConnection hcc,
             IRequestParameters requestParameters) throws Exception {
         String database = MetadataUtil.resolveDatabase(null, dataverseName);
+        String itemTypeDatabase = MetadataUtil.resolveDatabase(null, itemTypeDataverseName);
+        String metaItemDatabase = MetadataUtil.resolveDatabase(null, metaItemTypeDataverseName);
         MutableObject<ProgressState> progress = new MutableObject<>(ProgressState.NO_PROGRESS);
         SourceLocation sourceLoc = dd.getSourceLocation();
         DatasetType dsType = dd.getDatasetType();
@@ -951,9 +954,10 @@
             }
 
             // #. add a new dataset with PendingAddOp
-            dataset = (Dataset) createDataset(dd, database, dataverseName, datasetName, itemTypeDataverseName,
-                    itemTypeName, metaItemTypeDataverseName, metaItemTypeName, dsType, compactionPolicy,
-                    compactionPolicyProperties, compressionScheme, datasetFormatInfo, datasetDetails, ngName);
+            dataset = (Dataset) createDataset(dd, database, dataverseName, datasetName, itemTypeDatabase,
+                    itemTypeDataverseName, itemTypeName, metaItemDatabase, metaItemTypeDataverseName, metaItemTypeName,
+                    dsType, compactionPolicy, compactionPolicyProperties, compressionScheme, datasetFormatInfo,
+                    datasetDetails, ngName);
             MetadataManager.INSTANCE.addDataset(metadataProvider.getMetadataTxnContext(), dataset);
 
             if (itemTypeIsInline) {
@@ -1046,14 +1050,14 @@
     }
 
     protected IDataset createDataset(DatasetDecl dd, String database, DataverseName dataverseName, String datasetName,
-            DataverseName itemTypeDataverseName, String itemTypeName, DataverseName metaItemTypeDataverseName,
-            String metaItemTypeName, DatasetType dsType, String compactionPolicy,
-            Map<String, String> compactionPolicyProperties, String compressionScheme,
-            DatasetFormatInfo datasetFormatInfo, IDatasetDetails datasetDetails, String ngName)
-            throws AlgebricksException {
-        return new Dataset(database, dataverseName, datasetName, itemTypeDataverseName, itemTypeName,
-                metaItemTypeDataverseName, metaItemTypeName, ngName, compactionPolicy, compactionPolicyProperties,
-                datasetDetails, dd.getHints(), dsType, DatasetIdFactory.generateDatasetId(),
+            String itemTypeDatabase, DataverseName itemTypeDataverseName, String itemTypeName,
+            String metaItemTypeDatabase, DataverseName metaItemTypeDataverseName, String metaItemTypeName,
+            DatasetType dsType, String compactionPolicy, Map<String, String> compactionPolicyProperties,
+            String compressionScheme, DatasetFormatInfo datasetFormatInfo, IDatasetDetails datasetDetails,
+            String ngName) throws AlgebricksException {
+        return new Dataset(database, dataverseName, datasetName, itemTypeDatabase, itemTypeDataverseName, itemTypeName,
+                metaItemTypeDatabase, metaItemTypeDataverseName, metaItemTypeName, ngName, compactionPolicy,
+                compactionPolicyProperties, datasetDetails, dd.getHints(), dsType, DatasetIdFactory.generateDatasetId(),
                 MetadataUtil.PENDING_ADD_OP, compressionScheme, datasetFormatInfo);
     }
 
@@ -2658,6 +2662,7 @@
             DataverseName dataverseName, String viewName, DataverseName itemTypeDataverseName, String itemTypeName,
             IStatementRewriter stmtRewriter, IRequestParameters requestParameters) throws Exception {
         String database = MetadataUtil.resolveDatabase(null, dataverseName);
+        String itemTypeDatabase = MetadataUtil.resolveDatabase(null, itemTypeDataverseName);
         SourceLocation sourceLoc = cvs.getSourceLocation();
         MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxnCtx);
@@ -2808,14 +2813,14 @@
             apiFramework.reWriteQuery(langRewritingContext, wrappedQuery, sessionOutput, false, false,
                     Collections.emptyList());
 
-            List<List<Triple<DataverseName, String, String>>> dependencies =
+            List<List<DependencyFullyQualifiedName>> dependencies =
                     ViewUtil.getViewDependencies(viewDecl, foreignKeys, queryRewriter);
 
             ViewDetails viewDetails = new ViewDetails(cvs.getViewBody(), dependencies, cvs.getDefaultNull(),
                     primaryKeyFields, foreignKeys, datetimeFormat, dateFormat, timeFormat);
 
-            Dataset view = new Dataset(database, dataverseName, viewName, itemTypeDataverseName, itemTypeName,
-                    MetadataConstants.METADATA_NODEGROUP_NAME, "", Collections.emptyMap(), viewDetails,
+            Dataset view = new Dataset(database, dataverseName, viewName, itemTypeDatabase, itemTypeDataverseName,
+                    itemTypeName, MetadataConstants.METADATA_NODEGROUP_NAME, "", Collections.emptyMap(), viewDetails,
                     Collections.emptyMap(), DatasetType.VIEW, 0, MetadataUtil.PENDING_NO_OP);
             if (existingDataset == null) {
                 if (itemTypeIsInline) {
@@ -2889,11 +2894,11 @@
                         DatasetUtil.getFullyQualifiedDisplayName(dataverseName, viewName));
             }
             MetadataManager.INSTANCE.dropDataset(mdTxnCtx, database, dataverseName, viewName, false);
-            if (TypeUtil.isDatasetInlineTypeName(dataset, dataset.getItemTypeDataverseName(),
+            String itemTypeDatabaseName = dataset.getItemTypeDatabaseName();
+            if (TypeUtil.isDatasetInlineTypeName(dataset, itemTypeDatabaseName, dataset.getItemTypeDataverseName(),
                     dataset.getItemTypeName())) {
-                String itemDatabase = MetadataUtil.resolveDatabase(null, dataset.getItemTypeDataverseName());
-                MetadataManager.INSTANCE.dropDatatype(mdTxnCtx, itemDatabase, dataset.getItemTypeDataverseName(),
-                        dataset.getItemTypeName());
+                MetadataManager.INSTANCE.dropDatatype(mdTxnCtx, itemTypeDatabaseName,
+                        dataset.getItemTypeDataverseName(), dataset.getItemTypeName());
             }
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             return true;
@@ -3053,12 +3058,12 @@
                 List<String> externalIdentifier = cfs.getExternalIdentifier();
                 ExternalFunctionCompilerUtil.validateExternalIdentifier(externalIdentifier, language,
                         cfs.getSourceLocation());
-                List<List<Triple<DataverseName, String, String>>> dependencies =
+                List<List<DependencyFullyQualifiedName>> dependencies =
                         FunctionUtil.getExternalFunctionDependencies(depTypes);
 
                 function = new Function(functionSignature, paramNames, paramTypes, returnTypeSignature, null,
-                        FunctionKind.SCALAR.toString(), library.getLanguage(), libraryDataverseName, libraryName,
-                        externalIdentifier, cfs.getNullCall(), cfs.getDeterministic(), cfs.getResources(),
+                        FunctionKind.SCALAR.toString(), library.getLanguage(), libraryDatabase, libraryDataverseName,
+                        libraryName, externalIdentifier, cfs.getNullCall(), cfs.getDeterministic(), cfs.getResources(),
                         dependencies);
             } else {
                 List<Pair<VarIdentifier, TypeExpression>> paramList = cfs.getParameters();
@@ -3091,13 +3096,13 @@
                 apiFramework.reWriteQuery(langRewritingContext, wrappedQuery, sessionOutput, false, false,
                         Collections.emptyList());
 
-                List<List<Triple<DataverseName, String, String>>> dependencies =
+                List<List<DependencyFullyQualifiedName>> dependencies =
                         FunctionUtil.getFunctionDependencies(fd, queryRewriter);
 
                 newInlineTypes = Collections.emptyMap();
                 function = new Function(functionSignature, paramNames, null, null, cfs.getFunctionBody(),
                         FunctionKind.SCALAR.toString(), compilationProvider.getParserFactory().getLanguage(), null,
-                        null, null, null, null, null, dependencies);
+                        null, null, null, null, null, null, dependencies);
             }
 
             if (existingFunction == null) {
@@ -3662,7 +3667,9 @@
                 }
                 throw new CompilationException(ErrorCode.SYNONYM_EXISTS, css.getSourceLocation(), synonymName);
             }
-            synonym = new Synonym(database, dataverseName, synonymName, objectDataverseName, objectName);
+            String objectDatabaseName = MetadataUtil.resolveDatabase(null, objectDataverseName);
+            synonym = new Synonym(database, dataverseName, synonymName, objectDatabaseName, objectDataverseName,
+                    objectName);
             MetadataManager.INSTANCE.addSynonym(metadataProvider.getMetadataTxnContext(), synonym);
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             return CreateResult.CREATED;
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java
index 9cf4ec6..13dc4f9 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java
@@ -84,6 +84,7 @@
     static String[] nodes = { "node1", "node2" };
     static ActiveNotificationHandler handler;
     static DataverseName dataverseName = MetadataConstants.DEFAULT_DATAVERSE_NAME;
+    static String recordTypeDatabaseName = null;
     static String database = MetadataUtil.databaseFor(dataverseName);
     static String entityName = "entityName";
     static EntityId entityId = new EntityId(Feed.EXTENSION_NAME, database, dataverseName, entityName);
@@ -112,10 +113,10 @@
         jobIdFactory = new JobIdFactory(CcId.valueOf((short) 0));
         handler = new ActiveNotificationHandler();
         allDatasets = new ArrayList<>();
-        firstDataset = new Dataset(database, dataverseName, "firstDataset", null, null, null, null, null, null, null,
-                null, 0, 0);
-        secondDataset = new Dataset(database, dataverseName, "secondDataset", null, null, null, null, null, null, null,
-                null, 0, 0);
+        firstDataset = new Dataset(database, dataverseName, "firstDataset", recordTypeDatabaseName, null, null, null,
+                null, null, null, null, null, 0, 0);
+        secondDataset = new Dataset(database, dataverseName, "secondDataset", recordTypeDatabaseName, null, null, null,
+                null, null, null, null, null, 0, 0);
         allDatasets.add(firstDataset);
         allDatasets.add(secondDataset);
         AtomicInteger threadCounter = new AtomicInteger(0);
@@ -990,8 +991,8 @@
         WaitForStateSubscriber recoveringSubscriber =
                 new WaitForStateSubscriber(listener, EnumSet.of(ActivityState.RECOVERING));
         recoveringSubscriber.sync();
-        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", null, null, null, null, null, null,
-                null, null, 0, 0);
+        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", recordTypeDatabaseName, null, null,
+                null, null, null, null, null, null, 0, 0);
         Action add = users[1].addDataset(newDataset, listener);
         listener.allowStep();
         runningSubscriber.sync();
@@ -1017,8 +1018,8 @@
                 new WaitForStateSubscriber(listener, EnumSet.of(ActivityState.RECOVERING));
         recoveringSubscriber.sync();
         tempFailSubscriber = new WaitForStateSubscriber(listener, EnumSet.of(ActivityState.TEMPORARILY_FAILED));
-        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", null, null, null, null, null, null,
-                null, null, 0, 0);
+        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", recordTypeDatabaseName, null, null,
+                null, null, null, null, null, null, 0, 0);
         Action add = users[1].addDataset(newDataset, listener);
         listener.allowStep();
         tempFailSubscriber.sync();
@@ -1044,8 +1045,8 @@
                 new WaitForStateSubscriber(listener, EnumSet.of(ActivityState.RECOVERING));
         recoveringSubscriber.sync();
         tempFailSubscriber = new WaitForStateSubscriber(listener, EnumSet.of(ActivityState.TEMPORARILY_FAILED));
-        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", null, null, null, null, null, null,
-                null, null, 0, 0);
+        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", recordTypeDatabaseName, null, null,
+                null, null, null, null, null, null, 0, 0);
         Action add = users[1].addDataset(newDataset, listener);
         listener.allowStep();
         tempFailSubscriber.sync();
@@ -1063,8 +1064,8 @@
         WaitForStateSubscriber subscriber =
                 new WaitForStateSubscriber(listener, Collections.singleton(ActivityState.STARTING));
         subscriber.sync();
-        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", null, null, null, null, null, null,
-                null, null, 0, 0);
+        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", recordTypeDatabaseName, null, null,
+                null, null, null, null, null, null, 0, 0);
         Action createDatasetAction = users[1].addDataset(newDataset, listener);
         listener.allowStep();
         startAction.sync();
@@ -1079,8 +1080,8 @@
     @Test
     public void testCreateNewDatasetWhileRunning() throws Exception {
         testStartWhenStartSucceed();
-        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", null, null, null, null, null, null,
-                null, null, 0, 0);
+        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", recordTypeDatabaseName, null, null,
+                null, null, null, null, null, null, 0, 0);
         Action createDatasetAction = users[1].addDataset(newDataset, listener);
         createDatasetAction.sync();
         assertFailure(createDatasetAction, ErrorCode.CANNOT_ADD_DATASET_TO_ACTIVE_ENTITY);
@@ -1099,8 +1100,8 @@
         WaitForStateSubscriber subscriber =
                 new WaitForStateSubscriber(listener, EnumSet.of(ActivityState.SUSPENDING, ActivityState.SUSPENDED));
         subscriber.sync();
-        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", null, null, null, null, null, null,
-                null, null, 0, 0);
+        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", recordTypeDatabaseName, null, null,
+                null, null, null, null, null, null, 0, 0);
         Action createDatasetAction = users[0].addDataset(newDataset, listener);
         listener.allowStep();
         listener.allowStep();
@@ -1118,8 +1119,8 @@
     public void testCreateNewDatasetWhilePermanentFailure() throws Exception {
         testRecoveryFailureAfterOneAttemptCompilationFailure();
         Assert.assertEquals(ActivityState.STOPPED, listener.getState());
-        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", null, null, null, null, null, null,
-                null, null, 0, 0);
+        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", recordTypeDatabaseName, null, null,
+                null, null, null, null, null, null, 0, 0);
         Action createDatasetAction = users[0].addDataset(newDataset, listener);
         createDatasetAction.sync();
         assertSuccess(createDatasetAction);
@@ -1551,8 +1552,8 @@
         Action query = users[1].query(firstDataset, new Semaphore(1));
         query.sync();
         assertSuccess(query);
-        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", null, null, null, null, null, null,
-                null, null, 0, 0);
+        Dataset newDataset = new Dataset(database, dataverseName, "newDataset", recordTypeDatabaseName, null, null,
+                null, null, null, null, null, null, 0, 0);
         Action addDataset = users[1].addDataset(newDataset, listener);
         // blocked by suspension
         Assert.assertFalse(addDataset.isDone());
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestDataset.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestDataset.java
index 9175a1c..210440d 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestDataset.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestDataset.java
@@ -51,9 +51,10 @@
             String recordTypeName, String nodeGroupName, String compactionPolicy,
             Map<String, String> compactionPolicyProperties, IDatasetDetails datasetDetails, Map<String, String> hints,
             DatasetType datasetType, int datasetId, int pendingOp) {
-        super(MetadataUtil.databaseFor(dataverseName), dataverseName, datasetName, recordTypeDataverseName,
-                recordTypeName, nodeGroupName, compactionPolicy, compactionPolicyProperties, datasetDetails, hints,
-                datasetType, datasetId, pendingOp);
+        super(MetadataUtil.databaseFor(dataverseName), dataverseName, datasetName,
+                MetadataUtil.databaseFor(recordTypeDataverseName), recordTypeDataverseName, recordTypeName,
+                nodeGroupName, compactionPolicy, compactionPolicyProperties, datasetDetails, hints, datasetType,
+                datasetId, pendingOp);
     }
 
     @Override
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTxnTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTxnTest.java
index 0900f03..7583307 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTxnTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/metadata/MetadataTxnTest.java
@@ -322,9 +322,9 @@
     private void addDataset(ICcApplicationContext appCtx, Dataset source, int datasetPostfix, boolean abort)
             throws Exception {
         Dataset dataset = new Dataset(source.getDatabaseName(), source.getDataverseName(), "ds_" + datasetPostfix,
-                source.getDataverseName(), source.getDatasetType().name(), source.getNodeGroupName(),
-                NoMergePolicyFactory.NAME, null, source.getDatasetDetails(), source.getHints(),
-                DatasetConfig.DatasetType.INTERNAL, datasetPostfix, 0);
+                source.getDatabaseName(), source.getDataverseName(), source.getDatasetType().name(),
+                source.getNodeGroupName(), NoMergePolicyFactory.NAME, null, source.getDatasetDetails(),
+                source.getHints(), DatasetConfig.DatasetType.INTERNAL, datasetPostfix, 0);
         MetadataProvider metadataProvider = MetadataProvider.create(appCtx, null);
         final MetadataTransactionContext writeTxn = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(writeTxn);
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java
index 26e6798..d5c8465 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java
@@ -109,8 +109,8 @@
             String database = MetadataUtil.databaseFor(dvName);
             List<List<String>> partitioningKeys = new ArrayList<>();
             partitioningKeys.add(Collections.singletonList("key"));
-            Dataset dataset = new Dataset(database, dvName, DATASET_NAME, dvName, DATA_TYPE_NAME, NODE_GROUP_NAME,
-                    NoMergePolicyFactory.NAME, null,
+            Dataset dataset = new Dataset(database, dvName, DATASET_NAME, database, dvName, DATA_TYPE_NAME,
+                    NODE_GROUP_NAME, NoMergePolicyFactory.NAME, null,
                     new InternalDatasetDetails(null, InternalDatasetDetails.PartitioningStrategy.HASH, partitioningKeys,
                             null, null, null, false, null, null),
                     null, DatasetConfig.DatasetType.INTERNAL, DATASET_ID, 0);
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/synonym/synonym-01/synonym-01.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/synonym/synonym-01/synonym-01.9.adm
index 0ff7309..6427b88 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/synonym/synonym-01/synonym-01.9.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/synonym/synonym-01/synonym-01.9.adm
@@ -1,4 +1,4 @@
-{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": "TweetMessagesSynonym", "ObjectDataverseName": "test", "ObjectName": "TweetMessages" }
-{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": "TweetMessagesSynonym2", "ObjectDataverseName": "test", "ObjectName": "TweetMessagesSynonym" }
-{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": "TwitterUsersSynonym", "ObjectDataverseName": "test", "ObjectName": "TwitterUsers" }
-{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": "TwitterUsersSynonym2", "ObjectDataverseName": "test", "ObjectName": "TwitterUsersSynonym" }
\ No newline at end of file
+{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": "TweetMessagesSynonym", "ObjectDataverseName": "test", "ObjectName": "TweetMessages", "ObjectDatabaseName": "Default" }
+{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": "TweetMessagesSynonym2", "ObjectDataverseName": "test", "ObjectName": "TweetMessagesSynonym", "ObjectDatabaseName": "Default" }
+{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": "TwitterUsersSynonym", "ObjectDataverseName": "test", "ObjectName": "TwitterUsers", "ObjectDatabaseName": "Default" }
+{ "DatabaseName": "Default", "DataverseName": "test", "SynonymName": "TwitterUsersSynonym2", "ObjectDataverseName": "test", "ObjectName": "TwitterUsersSynonym", "ObjectDatabaseName": "Default" }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/check-dependencies-1/check-dependencies-1.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/check-dependencies-1/check-dependencies-1.1.adm
new file mode 100644
index 0000000..79599c6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/check-dependencies-1/check-dependencies-1.1.adm
@@ -0,0 +1,7 @@
+{ "DataverseName": "B", "Name": "f0", "Dependencies": [ [  ], [  ], [  ] ] }
+{ "DataverseName": "B", "Name": "f5", "Dependencies": [ [ [ "", "Default", "B", "TweetMessages2" ], [ "", "Default", "C", "TweetMessages" ] ], [ [ "", "Default", "C", "f1", "2" ], [ "", "Default", "B", "f0", "2" ] ], [  ] ] }
+{ "DataverseName": "C", "Name": "f1", "Dependencies": [ [  ], [  ], [  ] ] }
+{ "DataverseName": "C", "Name": "f2", "Dependencies": [ [ [ "", "Default", "C", "TweetMessages" ] ], [ [ "", "Default", "C", "f1", "2" ], [ "", "Default", "B", "f0", "2" ] ], [  ] ] }
+{ "DataverseName": "C", "Name": "f3", "Dependencies": [ [  ], [ [ "", "Default", "C", "f2", "2" ] ], [  ] ] }
+{ "DataverseName": "C", "Name": "f4", "Dependencies": [ [ [ "", "Default", "C", "TweetMessages" ] ], [  ], [  ] ] }
+{ "DataverseName": "C", "Name": "f5", "Dependencies": [ [  ], [  ], [  ], [ [ "", "Default", "C", "TweetMessagesSyn1" ], [ "", "Default", "C", "TweetMessagesSyn2" ] ] ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/check-dependencies-1/check-dependencies-1.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/check-dependencies-1/check-dependencies-1.2.adm
new file mode 100644
index 0000000..2188fd8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/check-dependencies-1/check-dependencies-1.2.adm
@@ -0,0 +1,5 @@
+{ "DataverseName": "X", "Name": "fx1", "Dependencies": [ [  ], [  ], [  ] ] }
+{ "DataverseName": "X", "Name": "fx2", "Dependencies": [ [  ], [  ], [  ] ] }
+{ "DataverseName": "X", "Name": "fx3", "Dependencies": [ [  ], [ [ "", "Default", "X", "fx1", "1" ], [ "", "Default", "X", "fx2", "-1" ] ], [  ] ] }
+{ "DataverseName": "Y", "Name": "fy1", "Dependencies": [ [  ], [  ], [  ] ] }
+{ "DataverseName": "Y", "Name": "fy3", "Dependencies": [ [  ], [ [ "", "Default", "Y", "fy1", "1" ], [ "", "Default", "X", "fx2", "-1" ] ], [  ] ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/udf23/udf23.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/udf23/udf23.1.adm
index e4d644b..784e825 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/udf23/udf23.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/user-defined-functions/udf23/udf23.1.adm
@@ -1,6 +1,6 @@
-{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "CompactionPolicy", "DatatypeDataverseName": "Metadata", "DatatypeName": "CompactionPolicyRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "CompactionPolicy" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "CompactionPolicy" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Sat Sep 30 23:42:12 PDT 2023", "DatasetId": 13, "PendingOp": 0, "DatasetFormat": { "Format": "ROW" } }
-{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "Database", "DatatypeDataverseName": "Metadata", "DatatypeName": "DatabaseRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ] ], "PrimaryKey": [ [ "DatabaseName" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Sat Sep 30 23:42:12 PDT 2023", "DatasetId": 18, "PendingOp": 0, "DatasetFormat": { "Format": "ROW" } }
-{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "Dataset", "DatatypeDataverseName": "Metadata", "DatatypeName": "DatasetRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "DatasetName" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "DatasetName" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Sat Sep 30 23:42:12 PDT 2023", "DatasetId": 2, "PendingOp": 0, "DatasetFormat": { "Format": "ROW" } }
-{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "DatasourceAdapter", "DatatypeDataverseName": "Metadata", "DatatypeName": "DatasourceAdapterRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "Name" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "Name" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Sat Sep 30 23:42:12 PDT 2023", "DatasetId": 8, "PendingOp": 0, "DatasetFormat": { "Format": "ROW" } }
-{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "Datatype", "DatatypeDataverseName": "Metadata", "DatatypeName": "DatatypeRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "DatatypeName" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "DatatypeName" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Sat Sep 30 23:42:12 PDT 2023", "DatasetId": 3, "PendingOp": 0, "DatasetFormat": { "Format": "ROW" } }
-{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "Dataverse", "DatatypeDataverseName": "Metadata", "DatatypeName": "DataverseRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Sat Sep 30 23:42:12 PDT 2023", "DatasetId": 1, "PendingOp": 0, "DatasetFormat": { "Format": "ROW" } }
\ No newline at end of file
+{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "CompactionPolicy", "DatatypeDataverseName": "Metadata", "DatatypeName": "CompactionPolicyRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "CompactionPolicy" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "CompactionPolicy" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Oct 03 12:04:25 PDT 2023", "DatasetId": 13, "PendingOp": 0, "DatatypeDatabaseName": "System", "DatasetFormat": { "Format": "ROW" } }
+{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "Database", "DatatypeDataverseName": "Metadata", "DatatypeName": "DatabaseRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ] ], "PrimaryKey": [ [ "DatabaseName" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Oct 03 12:04:25 PDT 2023", "DatasetId": 18, "PendingOp": 0, "DatatypeDatabaseName": "System", "DatasetFormat": { "Format": "ROW" } }
+{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "Dataset", "DatatypeDataverseName": "Metadata", "DatatypeName": "DatasetRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "DatasetName" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "DatasetName" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Oct 03 12:04:25 PDT 2023", "DatasetId": 2, "PendingOp": 0, "DatatypeDatabaseName": "System", "DatasetFormat": { "Format": "ROW" } }
+{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "DatasourceAdapter", "DatatypeDataverseName": "Metadata", "DatatypeName": "DatasourceAdapterRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "Name" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "Name" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Oct 03 12:04:25 PDT 2023", "DatasetId": 8, "PendingOp": 0, "DatatypeDatabaseName": "System", "DatasetFormat": { "Format": "ROW" } }
+{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "Datatype", "DatatypeDataverseName": "Metadata", "DatatypeName": "DatatypeRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "DatatypeName" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ], [ "DatatypeName" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Oct 03 12:04:25 PDT 2023", "DatasetId": 3, "PendingOp": 0, "DatatypeDatabaseName": "System", "DatasetFormat": { "Format": "ROW" } }
+{ "DatabaseName": "System", "DataverseName": "Metadata", "DatasetName": "Dataverse", "DatatypeDataverseName": "Metadata", "DatatypeName": "DataverseRecordType", "DatasetType": "INTERNAL", "GroupName": "MetadataGroup", "CompactionPolicy": "concurrent", "CompactionPolicyProperties": [ { "Name": "max-component-count", "Value": "30" }, { "Name": "min-merge-component-count", "Value": "3" }, { "Name": "max-merge-component-count", "Value": "10" }, { "Name": "size-ratio", "Value": "1.2" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "DatabaseName" ], [ "DataverseName" ] ], "PrimaryKey": [ [ "DatabaseName" ], [ "DataverseName" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Tue Oct 03 12:04:25 PDT 2023", "DatasetId": 1, "PendingOp": 0, "DatatypeDatabaseName": "System", "DatasetFormat": { "Format": "ROW" } }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-1/create-view-1.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-1/create-view-1.3.adm
new file mode 100644
index 0000000..561966e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-1/create-view-1.3.adm
@@ -0,0 +1,3 @@
+{ "DataverseName": "test1", "DatasetName": "v1", "DatatypeDataverseName": "Metadata", "DatatypeName": "AnyObject", "ViewDetails": { "Definition": "select sum(r) as v1 from range(1,3) r", "Dependencies": [ [  ], [  ], [  ] ] } }
+{ "DataverseName": "test1", "DatasetName": "vA", "DatatypeDataverseName": "Metadata", "DatatypeName": "AnyObject", "ViewDetails": { "Definition": "select v1.*, v2.*, f1.*, f2.*, s1.*, s2.*, d1.*\n  from\n    v1 v1,\n    test2.v2 v2,\n    f1() f1,\n    test2.f2() f2,\n    (\n      select count(*) as s1 from DataverseSyn1\n        where DataverseName like \"te%\"\n    ) s1,\n    (\n      select count(*) as s2 from test2.DataverseSyn2\n        where DataverseName like \"tes%\"\n    ) s2,\n    (\n      select count(*) as d1 from Metadata.`Dataverse`\n      where DataverseName like \"test%\"\n    ) d1", "Dependencies": [ [ [ "", "Default", "test1", "v1" ], [ "", "Default", "test2", "v2" ], [ "", "System", "Metadata", "Dataverse" ] ], [ [ "", "Default", "test1", "f1", "0" ], [ "", "Default", "test2", "f2", "0" ] ], [  ], [ [ "", "Default", "test1", "DataverseSyn1" ], [ "", "Default", "test2", "DataverseSyn2" ] ] ] } }
+{ "DataverseName": "test2", "DatasetName": "v2", "DatatypeDataverseName": "Metadata", "DatatypeName": "AnyObject", "ViewDetails": { "Definition": "select sum(r) as v2 from range(1,2) r", "Dependencies": [ [  ], [  ], [  ] ] } }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-1/create-view-1.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-1/create-view-1.6.adm
new file mode 100644
index 0000000..e725a89
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-1/create-view-1.6.adm
@@ -0,0 +1 @@
+{ "DataverseName": "test1", "DatasetName": "vA", "DatatypeDataverseName": "Metadata", "DatatypeName": "AnyObject", "ViewDetails": { "Definition": "select v1.*, v2.*, f1.*, f2.*, s1.*, s2.*, d1.*\n  from\n    v1 v1,\n    test2.v2 v2,\n    f1() f1,\n    test2.f2() f2,\n    (\n      select count(*) as s1 from DataverseSyn1\n        where DataverseName like \"te%\"\n    ) s1,\n    (\n      select count(*) as s2 from test2.DataverseSyn2\n        where DataverseName like \"tes%\"\n    ) s2,\n    (\n      select count(*) as d1 from Metadata.`Dataverse`\n      where DataverseName like \"test%\"\n    ) d1", "Dependencies": [ [ [ "", "Default", "test1", "v1" ], [ "", "Default", "test2", "v2" ], [ "", "System", "Metadata", "Dataverse" ] ], [ [ "", "Default", "test1", "f1", "0" ], [ "", "Default", "test2", "f2", "0" ] ], [  ], [ [ "", "Default", "test1", "DataverseSyn1" ], [ "", "Default", "test2", "DataverseSyn2" ] ] ] } }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-3-typed/create-view-3-typed.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-3-typed/create-view-3-typed.12.adm
new file mode 100644
index 0000000..49fefa4
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-3-typed/create-view-3-typed.12.adm
@@ -0,0 +1,9 @@
+{ "DataverseName": "test1", "DatasetName": "v1", "DatatypeFields": [ { "FieldName": "c_id", "FieldType": "int32", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_i8", "FieldType": "int8", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_i16", "FieldType": "int16", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_i32", "FieldType": "int32", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_i64", "FieldType": "int64", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_f", "FieldType": "float", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_d", "FieldType": "double", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_b", "FieldType": "boolean", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_s", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_datetime", "FieldType": "datetime", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_date", "FieldType": "date", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_time", "FieldType": "time", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_dur", "FieldType": "duration", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_ymdur", "FieldType": "year-month-duration", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_dtdur", "FieldType": "day-time-duration", "IsNullable": true, "IsMissable": true } ], "ViewDetails": { "Definition": "t1", "Dependencies": [ [ [ "", "Default", "test1", "t1" ] ], [  ], [  ] ], "Default": null } }
+{ "DataverseName": "test1", "DatasetName": "v2_ref_type", "DatatypeFields": [ { "FieldName": "c_id", "FieldType": "int32", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_i8", "FieldType": "int8", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_i16", "FieldType": "int16", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_i32", "FieldType": "int32", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_i64", "FieldType": "int64", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_f", "FieldType": "float", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_d", "FieldType": "double", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_b", "FieldType": "boolean", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_s", "FieldType": "string", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_datetime", "FieldType": "datetime", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_date", "FieldType": "date", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_time", "FieldType": "time", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_dur", "FieldType": "duration", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_ymdur", "FieldType": "year-month-duration", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_dtdur", "FieldType": "day-time-duration", "IsNullable": true, "IsMissable": true } ], "ViewDetails": { "Definition": "select c_id,\n    c_i8, c_i16, c_i32, c_i64, c_f, c_d,\n    c_b, c_s,\n    c_datetime, c_date, c_time,\n    c_dur, c_ymdur, c_dtdur\n  from t1", "Dependencies": [ [ [ "", "Default", "test1", "t1" ] ], [  ], [  ] ], "Default": null } }
+{ "DataverseName": "test1", "DatasetName": "v3_datetime_format", "DatatypeFields": [ { "FieldName": "c_id", "FieldType": "int32", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_datetime", "FieldType": "datetime", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_date", "FieldType": "date", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_time", "FieldType": "time", "IsNullable": true, "IsMissable": true } ], "ViewDetails": { "Definition": "t2", "Dependencies": [ [ [ "", "Default", "test1", "t2" ] ], [  ], [  ] ], "Default": null, "DataFormat": [ "MM/DD/YYYY hh:mm:ss.nnna", "MM/DD/YYYY", "hh:mm:ss.nnna" ] } }
+{ "DataverseName": "test1", "DatasetName": "v4_date_format_only", "DatatypeFields": [ { "FieldName": "c_id", "FieldType": "int32", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_datetime", "FieldType": "datetime", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_date", "FieldType": "date", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_time", "FieldType": "time", "IsNullable": true, "IsMissable": true } ], "ViewDetails": { "Definition": "t2", "Dependencies": [ [ [ "", "Default", "test1", "t2" ] ], [  ], [  ] ], "Default": null, "DataFormat": [ null, "MM/DD/YYYY", null ] } }
+{ "DataverseName": "test1", "DatasetName": "v5_pk", "DatatypeFields": [ { "FieldName": "c_id", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_datetime", "FieldType": "datetime", "IsNullable": true, "IsMissable": true } ], "ViewDetails": { "Definition": "t2", "Dependencies": [ [ [ "", "Default", "test1", "t2" ] ], [  ], [  ] ], "Default": null, "PrimaryKey": [ [ "c_id" ] ], "PrimaryKeyEnforced": false, "DataFormat": [ "MM/DD/YYYY hh:mm:ss.nnna", null, null ] } }
+{ "DataverseName": "test1", "DatasetName": "v6_pk_no_nulls", "DatatypeFields": [ { "FieldName": "c_i64", "FieldType": "int64", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_id", "FieldType": "int32", "IsNullable": true, "IsMissable": true } ], "ViewDetails": { "Definition": "t1", "Dependencies": [ [ [ "", "Default", "test1", "t1" ] ], [  ], [  ] ], "Default": null, "PrimaryKey": [ [ "c_i64" ] ], "PrimaryKeyEnforced": false } }
+{ "DataverseName": "test1", "DatasetName": "v7_no_nulls", "DatatypeFields": [ { "FieldName": "c_i64", "FieldType": "int64", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_id", "FieldType": "int32", "IsNullable": true, "IsMissable": true } ], "ViewDetails": { "Definition": "t1", "Dependencies": [ [ [ "", "Default", "test1", "t1" ] ], [  ], [  ] ], "Default": null } }
+{ "DataverseName": "test1", "DatasetName": "v8_no_nulls_multi", "DatatypeFields": [ { "FieldName": "c_id", "FieldType": "int32", "IsNullable": true, "IsMissable": true }, { "FieldName": "c_x", "FieldType": "int64", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_y", "FieldType": "int64", "IsNullable": false, "IsMissable": false } ], "ViewDetails": { "Definition": "select\n    c_id,\n    case when to_bigint(c_i32) >= 0 then to_bigint(c_i32) when to_bigint(c_i32) < 0 then null else 0 end as c_x,\n    case when to_bigint(c_i64) >= 0 then null when to_bigint(c_i64) < 0 then to_bigint(c_i64) else 0 end as c_y\n  from t1", "Dependencies": [ [ [ "", "Default", "test1", "t1" ] ], [  ], [  ] ], "Default": null } }
+{ "DataverseName": "test1", "DatasetName": "v9_pk_composite", "DatatypeFields": [ { "FieldName": "c_id1", "FieldType": "int32", "IsNullable": false, "IsMissable": false }, { "FieldName": "c_id2", "FieldType": "int32", "IsNullable": false, "IsMissable": false } ], "ViewDetails": { "Definition": "select c_id as c_id1, -c_id as c_id2\n  from t1", "Dependencies": [ [ [ "", "Default", "test1", "t1" ] ], [  ], [  ] ], "Default": null, "PrimaryKey": [ [ "c_id1" ], [ "c_id2" ] ], "PrimaryKeyEnforced": false } }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-7-foreign-key/create-view-7-foreign-key.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-7-foreign-key/create-view-7-foreign-key.2.adm
new file mode 100644
index 0000000..e2cef78
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-7-foreign-key/create-view-7-foreign-key.2.adm
@@ -0,0 +1,3 @@
+{ "DataverseName": "test1", "DatasetName": "employee_v1", "ViewDetails": { "Definition": "employee", "Dependencies": [ [ [ "", "Default", "test1", "employee" ] ], [  ], [  ] ], "Default": null, "PrimaryKey": [ [ "e_id" ] ], "PrimaryKeyEnforced": false, "ForeignKeys": [ { "ForeignKey": [ [ "e_mgr_id" ] ], "RefDatabaseName": "Default", "RefDataverseName": "test1", "RefDatasetName": "employee_v1", "IsEnforced": false } ] } }
+{ "DataverseName": "test1", "DatasetName": "employee_v2", "ViewDetails": { "Definition": "employee", "Dependencies": [ [ [ "", "Default", "test1", "employee" ] ], [  ], [  ] ], "Default": null, "PrimaryKey": [ [ "e_id" ] ], "PrimaryKeyEnforced": false, "ForeignKeys": [ { "ForeignKey": [ [ "e_mgr_id" ] ], "RefDatabaseName": "Default", "RefDataverseName": "test1", "RefDatasetName": "employee_v2", "IsEnforced": false }, { "ForeignKey": [ [ "e_hrr_id" ] ], "RefDatabaseName": "Default", "RefDataverseName": "test1", "RefDatasetName": "employee_v2", "IsEnforced": false } ] } }
+{ "DataverseName": "test2", "DatasetName": "employee2_v1", "ViewDetails": { "Definition": "employee2", "Dependencies": [ [ [ "", "Default", "test2", "employee2" ] ], [  ], [  ] ], "Default": null, "PrimaryKey": [ [ "e_id1" ], [ "e_id2" ] ], "PrimaryKeyEnforced": false, "ForeignKeys": [ { "ForeignKey": [ [ "e_mgr_id1" ], [ "e_mgr_id2" ] ], "RefDatabaseName": "Default", "RefDataverseName": "test2", "RefDatasetName": "employee2_v1", "IsEnforced": false }, { "ForeignKey": [ [ "e_hrr_id1" ], [ "e_hrr_id2" ] ], "RefDatabaseName": "Default", "RefDataverseName": "test2", "RefDatasetName": "employee2_v1", "IsEnforced": false } ] } }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-7-foreign-key/create-view-7-foreign-key.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-7-foreign-key/create-view-7-foreign-key.4.adm
new file mode 100644
index 0000000..fd736eb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/create-view-7-foreign-key/create-view-7-foreign-key.4.adm
@@ -0,0 +1,3 @@
+{ "DataverseName": "test1", "DatasetName": "orders_v", "ViewDetails": { "Definition": "test2.orders", "Dependencies": [ [ [ "", "Default", "test2", "orders" ], [ "", "Default", "test2", "customers_v" ], [ "", "Default", "test1", "stores_v" ] ], [  ], [  ] ], "Default": null, "PrimaryKey": [ [ "o_id" ] ], "PrimaryKeyEnforced": false, "ForeignKeys": [ { "ForeignKey": [ [ "o_cid" ] ], "RefDatabaseName": "Default", "RefDataverseName": "test2", "RefDatasetName": "customers_v", "IsEnforced": false }, { "ForeignKey": [ [ "o_sidX" ], [ "o_sidY" ] ], "RefDatabaseName": "Default", "RefDataverseName": "test1", "RefDatasetName": "stores_v", "IsEnforced": false } ] } }
+{ "DataverseName": "test1", "DatasetName": "stores_v", "ViewDetails": { "Definition": "test2.stores", "Dependencies": [ [ [ "", "Default", "test2", "stores" ] ], [  ], [  ] ], "Default": null, "PrimaryKey": [ [ "s_id1" ], [ "s_id2" ] ], "PrimaryKeyEnforced": false } }
+{ "DataverseName": "test2", "DatasetName": "customers_v", "ViewDetails": { "Definition": "customers", "Dependencies": [ [ [ "", "Default", "test2", "customers" ] ], [  ], [  ] ], "Default": null, "PrimaryKey": [ [ "c_id" ] ], "PrimaryKeyEnforced": false } }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/view-1/view-1.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/view-1/view-1.4.adm
new file mode 100644
index 0000000..53346c4
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/view-1/view-1.4.adm
@@ -0,0 +1,3 @@
+{ "Kind": "FUNCTION", "Name": "f5", "Definition": "select c1, c2 from s4", "Dependencies": [ [  ], [  ], [  ], [ [ "", "Default", "test1", "s4" ] ] ] }
+{ "Kind": "VIEW", "Name": "v3", "Definition": "select c1, c2 from s2", "Dependencies": [ [  ], [  ], [  ], [ [ "", "Default", "test1", "s2" ] ] ] }
+{ "Kind": "VIEW", "Name": "v6", "Definition": "select c1, c2 from f5() f5", "Dependencies": [ [  ], [ [ "", "Default", "test1", "f5", "0" ] ], [  ] ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/view-1/view-1.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/view-1/view-1.8.adm
new file mode 100644
index 0000000..36193ee
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/view/view-1/view-1.8.adm
@@ -0,0 +1,5 @@
+{ "Kind": "FUNCTION", "Name": "f5", "Dependencies": [ [ [ "", "Default", "test2", "v3" ] ], [  ], [  ] ] }
+{ "Kind": "FUNCTION", "Name": "f6", "Dependencies": [ [ [ "", "Default", "test2", "v4" ] ], [  ], [  ] ] }
+{ "Kind": "VIEW", "Name": "v3", "Dependencies": [ [ [ "", "Default", "test2", "ds1" ], [ "", "Default", "test2", "ds2" ] ], [  ], [  ] ] }
+{ "Kind": "VIEW", "Name": "v4", "Dependencies": [ [ [ "", "Default", "test2", "ds1" ], [ "", "Default", "test2", "ds2" ] ], [  ], [  ] ] }
+{ "Kind": "VIEW", "Name": "v9", "Dependencies": [ [ [ "", "Default", "test2", "ds1" ], [ "", "Default", "test2", "ds2" ], [ "", "Default", "test2", "v3" ], [ "", "Default", "test2", "v4" ] ], [ [ "", "Default", "test2", "f5", "0" ], [ "", "Default", "test2", "f6", "0" ] ], [  ], [ [ "", "Default", "test2", "s7" ], [ "", "Default", "test2", "s8" ] ] ] }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/DependencyFullyQualifiedName.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/DependencyFullyQualifiedName.java
new file mode 100644
index 0000000..7e810b0
--- /dev/null
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/DependencyFullyQualifiedName.java
@@ -0,0 +1,79 @@
+/*
+ * 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.asterix.common.metadata;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class DependencyFullyQualifiedName implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private final String databaseName;
+    private final DataverseName dataverseName;
+    private final String subName1;
+    private final String subName2;
+
+    public DependencyFullyQualifiedName(String databaseName, DataverseName dataverseName, String subName1,
+            String subName2) {
+        this.databaseName = databaseName;
+        this.dataverseName = dataverseName;
+        this.subName1 = subName1;
+        this.subName2 = subName2;
+    }
+
+    public String getDatabaseName() {
+        return databaseName;
+    }
+
+    public DataverseName getDataverseName() {
+        return dataverseName;
+    }
+
+    public String getSubName1() {
+        return subName1;
+    }
+
+    public String getSubName2() {
+        return subName2;
+    }
+
+    @Override
+    public String toString() {
+        return databaseName + "." + dataverseName + "." + subName1 + "." + subName2;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o instanceof DependencyFullyQualifiedName) {
+            DependencyFullyQualifiedName that = (DependencyFullyQualifiedName) o;
+            return Objects.equals(databaseName, that.databaseName) && Objects.equals(dataverseName, that.dataverseName)
+                    && Objects.equals(subName1, that.subName1) && Objects.equals(subName2, that.subName2);
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(databaseName, dataverseName, subName1, subName2);
+    }
+}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
index 5c91aef..925fada 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
@@ -32,7 +32,7 @@
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DatasetFullyQualifiedName;
-import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.lang.common.base.AbstractStatement;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.IQueryRewriter;
@@ -244,9 +244,9 @@
     }
 
     public static void collectDependencies(Expression expression, IQueryRewriter rewriter,
-            List<Triple<DataverseName, String, String>> outDatasetDependencies,
-            List<Triple<DataverseName, String, String>> outSynonymDependencies,
-            List<Triple<DataverseName, String, String>> outFunctionDependencies) throws CompilationException {
+            List<DependencyFullyQualifiedName> outDatasetDependencies,
+            List<DependencyFullyQualifiedName> outSynonymDependencies,
+            List<DependencyFullyQualifiedName> outFunctionDependencies) throws CompilationException {
         // Duplicate elimination
         Set<DatasetFullyQualifiedName> seenDatasets = new HashSet<>();
         Set<DatasetFullyQualifiedName> seenSynonyms = new HashSet<>();
@@ -266,21 +266,24 @@
                             if (synonymReference != null) {
                                 // resolved via synonym -> store synonym name as a dependency
                                 if (seenSynonyms.add(synonymReference)) {
-                                    outSynonymDependencies.add(new Triple<>(synonymReference.getDataverseName(),
+                                    outSynonymDependencies.add(new DependencyFullyQualifiedName(
+                                            synonymReference.getDatabaseName(), synonymReference.getDataverseName(),
                                             synonymReference.getDatasetName(), null));
                                 }
                             } else {
                                 // resolved directly -> store dataset (or view) name as a dependency
                                 DatasetFullyQualifiedName datasetReference = dsArgs.first;
                                 if (seenDatasets.add(datasetReference)) {
-                                    outDatasetDependencies.add(new Triple<>(datasetReference.getDataverseName(),
+                                    outDatasetDependencies.add(new DependencyFullyQualifiedName(
+                                            datasetReference.getDatabaseName(), datasetReference.getDataverseName(),
                                             datasetReference.getDatasetName(), null));
                                 }
                             }
                         }
                     } else {
                         if (seenFunctions.add(signature)) {
-                            outFunctionDependencies.add(new Triple<>(signature.getDataverseName(), signature.getName(),
+                            outFunctionDependencies.add(new DependencyFullyQualifiedName(signature.getDatabaseName(),
+                                    signature.getDataverseName(), signature.getName(),
                                     Integer.toString(signature.getArity())));
                         }
                     }
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
index 1fb314c..8fba54e 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
@@ -37,6 +37,7 @@
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DatasetFullyQualifiedName;
 import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.common.metadata.MetadataUtil;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.IParser;
@@ -206,7 +207,7 @@
         };
     }
 
-    public static List<List<Triple<DataverseName, String, String>>> getFunctionDependencies(FunctionDecl fd,
+    public static List<List<DependencyFullyQualifiedName>> getFunctionDependencies(FunctionDecl fd,
             IQueryRewriter rewriter) throws CompilationException {
         Expression normBody = fd.getNormalizedFuncBody();
         if (normBody == null) {
@@ -215,25 +216,26 @@
         }
 
         // Get the list of used functions and used datasets
-        List<Triple<DataverseName, String, String>> datasetDependencies = new ArrayList<>();
-        List<Triple<DataverseName, String, String>> synonymDependencies = new ArrayList<>();
-        List<Triple<DataverseName, String, String>> functionDependencies = new ArrayList<>();
+        List<DependencyFullyQualifiedName> datasetDependencies = new ArrayList<>();
+        List<DependencyFullyQualifiedName> synonymDependencies = new ArrayList<>();
+        List<DependencyFullyQualifiedName> functionDependencies = new ArrayList<>();
         ExpressionUtils.collectDependencies(normBody, rewriter, datasetDependencies, synonymDependencies,
                 functionDependencies);
 
-        List<Triple<DataverseName, String, String>> typeDependencies = Collections.emptyList();
+        List<DependencyFullyQualifiedName> typeDependencies = Collections.emptyList();
         return Function.createDependencies(datasetDependencies, functionDependencies, typeDependencies,
                 synonymDependencies);
     }
 
-    public static List<List<Triple<DataverseName, String, String>>> getExternalFunctionDependencies(
+    public static List<List<DependencyFullyQualifiedName>> getExternalFunctionDependencies(
             Collection<TypeSignature> dependentTypes) {
-        List<Triple<DataverseName, String, String>> datasetDependencies = Collections.emptyList();
-        List<Triple<DataverseName, String, String>> functionDependencies = Collections.emptyList();
-        List<Triple<DataverseName, String, String>> typeDependencies = new ArrayList<>(dependentTypes.size());
-        List<Triple<DataverseName, String, String>> synonymDependencies = Collections.emptyList();
+        List<DependencyFullyQualifiedName> datasetDependencies = Collections.emptyList();
+        List<DependencyFullyQualifiedName> functionDependencies = Collections.emptyList();
+        List<DependencyFullyQualifiedName> typeDependencies = new ArrayList<>(dependentTypes.size());
+        List<DependencyFullyQualifiedName> synonymDependencies = Collections.emptyList();
         for (TypeSignature t : dependentTypes) {
-            typeDependencies.add(new Triple<>(t.getDataverseName(), t.getName(), null));
+            typeDependencies.add(
+                    new DependencyFullyQualifiedName(t.getDatabaseName(), t.getDataverseName(), t.getName(), null));
         }
         return Function.createDependencies(datasetDependencies, functionDependencies, typeDependencies,
                 synonymDependencies);
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ViewUtil.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ViewUtil.java
index 975a387..23a2d1a 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ViewUtil.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ViewUtil.java
@@ -30,7 +30,7 @@
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DatasetFullyQualifiedName;
-import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.IParserFactory;
@@ -78,7 +78,7 @@
         }
     }
 
-    public static List<List<Triple<DataverseName, String, String>>> getViewDependencies(ViewDecl viewDecl,
+    public static List<List<DependencyFullyQualifiedName>> getViewDependencies(ViewDecl viewDecl,
             List<ViewDetails.ForeignKey> foreignKeys, IQueryRewriter rewriter) throws CompilationException {
         Expression normBody = viewDecl.getNormalizedViewBody();
         if (normBody == null) {
@@ -87,9 +87,9 @@
         }
 
         // Get the list of used functions and used datasets
-        List<Triple<DataverseName, String, String>> datasetDependencies = new ArrayList<>();
-        List<Triple<DataverseName, String, String>> synonymDependencies = new ArrayList<>();
-        List<Triple<DataverseName, String, String>> functionDependencies = new ArrayList<>();
+        List<DependencyFullyQualifiedName> datasetDependencies = new ArrayList<>();
+        List<DependencyFullyQualifiedName> synonymDependencies = new ArrayList<>();
+        List<DependencyFullyQualifiedName> functionDependencies = new ArrayList<>();
         ExpressionUtils.collectDependencies(normBody, rewriter, datasetDependencies, synonymDependencies,
                 functionDependencies);
 
@@ -101,19 +101,22 @@
                 if (isSelfReference || containsDependency(datasetDependencies, refName)) {
                     continue;
                 }
-                datasetDependencies.add(new Triple<>(refName.getDataverseName(), refName.getDatasetName(), null));
+                datasetDependencies.add(new DependencyFullyQualifiedName(refName.getDatabaseName(),
+                        refName.getDataverseName(), refName.getDatasetName(), null));
             }
         }
 
-        List<Triple<DataverseName, String, String>> typeDependencies = Collections.emptyList();
+        List<DependencyFullyQualifiedName> typeDependencies = Collections.emptyList();
         return ViewDetails.createDependencies(datasetDependencies, functionDependencies, typeDependencies,
                 synonymDependencies);
     }
 
-    private static boolean containsDependency(List<Triple<DataverseName, String, String>> inList,
+    private static boolean containsDependency(List<DependencyFullyQualifiedName> inList,
             DatasetFullyQualifiedName searchName) {
-        for (Triple<DataverseName, String, String> d : inList) {
-            if (d.first.equals(searchName.getDataverseName()) && d.second.equals(searchName.getDatasetName())) {
+        for (DependencyFullyQualifiedName d : inList) {
+            if (d.getDatabaseName().equals(searchName.getDatabaseName())
+                    && d.getDataverseName().equals(searchName.getDataverseName())
+                    && d.getSubName1().equals(searchName.getDatasetName())) {
                 return true;
             }
         }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/IDatasetDetails.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/IDatasetDetails.java
index 47c6432..c7de084 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/IDatasetDetails.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/IDatasetDetails.java
@@ -22,11 +22,12 @@
 import java.io.Serializable;
 
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
+import org.apache.asterix.metadata.bootstrap.DatasetEntity;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 public interface IDatasetDetails extends Serializable {
 
     DatasetType getDatasetType();
 
-    void writeDatasetDetailsRecordType(DataOutput out) throws HyracksDataException;
+    void writeDatasetDetailsRecordType(DataOutput out, DatasetEntity datasetEntity) throws HyracksDataException;
 }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
index 37053bf..e895465 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
@@ -39,6 +39,7 @@
 import org.apache.asterix.common.exceptions.MetadataException;
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.common.metadata.MetadataIndexImmutableProperties;
 import org.apache.asterix.common.metadata.MetadataUtil;
 import org.apache.asterix.common.transactions.IRecoveryManager.ResourceType;
@@ -124,7 +125,6 @@
 import org.apache.asterix.transaction.management.opcallbacks.UpsertOperationCallback;
 import org.apache.asterix.transaction.management.service.transaction.DatasetIdFactory;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.common.utils.Triple;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
@@ -1255,10 +1255,10 @@
             if (dataset.getDatasetType() == DatasetType.VIEW) {
                 ViewDetails viewDetails = (ViewDetails) dataset.getDatasetDetails();
                 List<DependencyKind> dependenciesSchema = ViewDetails.DEPENDENCIES_SCHEMA;
-                List<List<Triple<DataverseName, String, String>>> dependencies = viewDetails.getDependencies();
+                List<List<DependencyFullyQualifiedName>> dependencies = viewDetails.getDependencies();
                 for (int i = 0, n = dependencies.size(); i < n; i++) {
-                    for (Triple<DataverseName, String, String> dependency : dependencies.get(i)) {
-                        if (dependency.first.equals(dataverseName)) {
+                    for (DependencyFullyQualifiedName dependency : dependencies.get(i)) {
+                        if (dependency.getDataverseName().equals(dataverseName)) {
                             DependencyKind dependencyKind = dependenciesSchema.get(i);
                             throw new AsterixException(
                                     org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
@@ -1278,10 +1278,10 @@
                 continue;
             }
             List<DependencyKind> dependenciesSchema = Function.DEPENDENCIES_SCHEMA;
-            List<List<Triple<DataverseName, String, String>>> dependencies = function.getDependencies();
+            List<List<DependencyFullyQualifiedName>> dependencies = function.getDependencies();
             for (int i = 0, n = dependencies.size(); i < n; i++) {
-                for (Triple<DataverseName, String, String> dependency : dependencies.get(i)) {
-                    if (dependency.first.equals(dataverseName)) {
+                for (DependencyFullyQualifiedName dependency : dependencies.get(i)) {
+                    if (dependency.getDataverseName().equals(dataverseName)) {
                         DependencyKind dependencyKind = dependenciesSchema.get(i);
                         throw new AsterixException(
                                 org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_DATAVERSE_DEPENDENT_EXISTS,
@@ -1355,14 +1355,15 @@
             throw new AlgebricksException(ErrorCode.ILLEGAL_STATE);
         }
         for (Function function : allFunctions) {
-            List<List<Triple<DataverseName, String, String>>> functionDependencies = function.getDependencies();
+            List<List<DependencyFullyQualifiedName>> functionDependencies = function.getDependencies();
             if (functionDependencyIdx < functionDependencies.size()) {
-                List<Triple<DataverseName, String, String>> functionObjectDependencies =
+                List<DependencyFullyQualifiedName> functionObjectDependencies =
                         functionDependencies.get(functionDependencyIdx);
                 if (functionObjectDependencies != null) {
-                    for (Triple<DataverseName, String, String> dependency : functionObjectDependencies) {
-                        if (dependency.first.equals(dataverseName) && dependency.second.equals(objectName)
-                                && (objectArg == null || objectArg.equals(dependency.third))) {
+                    for (DependencyFullyQualifiedName dependency : functionObjectDependencies) {
+                        if (dependency.getDataverseName().equals(dataverseName)
+                                && dependency.getSubName1().equals(objectName)
+                                && (objectArg == null || objectArg.equals(dependency.getSubName2()))) {
                             throw new AsterixException(
                                     org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
                                     objectKindDisplayName, dependencyKind.getDependencyDisplayName(dependency),
@@ -1393,14 +1394,14 @@
         for (Dataset dataset : allDatasets) {
             if (dataset.getDatasetType() == DatasetType.VIEW) {
                 ViewDetails viewDetails = (ViewDetails) dataset.getDatasetDetails();
-                List<List<Triple<DataverseName, String, String>>> viewDependencies = viewDetails.getDependencies();
+                List<List<DependencyFullyQualifiedName>> viewDependencies = viewDetails.getDependencies();
                 if (viewDependencyIdx < viewDependencies.size()) {
-                    List<Triple<DataverseName, String, String>> viewObjectDependencies =
-                            viewDependencies.get(viewDependencyIdx);
+                    List<DependencyFullyQualifiedName> viewObjectDependencies = viewDependencies.get(viewDependencyIdx);
                     if (viewObjectDependencies != null) {
-                        for (Triple<DataverseName, String, String> dependency : viewObjectDependencies) {
-                            if (dependency.first.equals(dataverseName) && dependency.second.equals(objectName)
-                                    && (objectArg == null || objectArg.equals(dependency.third))) {
+                        for (DependencyFullyQualifiedName dependency : viewObjectDependencies) {
+                            if (dependency.getDataverseName().equals(dataverseName)
+                                    && dependency.getSubName1().equals(objectName)
+                                    && (objectArg == null || objectArg.equals(dependency.getSubName2()))) {
                                 throw new AsterixException(
                                         org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS,
                                         objectKindDisplayName, dependencyKind.getDependencyDisplayName(dependency),
@@ -1474,7 +1475,7 @@
             String libraryName) throws AlgebricksException {
         List<Function> functions = getAllFunctions(txnId);
         for (Function function : functions) {
-            if (libraryName.equals(function.getLibraryName())
+            if (libraryName.equals(function.getLibraryName()) && database.equals(function.getLibraryDatabaseName())
                     && dataverseName.equals(function.getLibraryDataverseName())) {
                 throw new AsterixException(
                         org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "library",
@@ -1488,7 +1489,7 @@
             String libraryName) throws AlgebricksException {
         List<DatasourceAdapter> adapters = getAllAdapters(txnId);
         for (DatasourceAdapter adapter : adapters) {
-            if (libraryName.equals(adapter.getLibraryName())
+            if (libraryName.equals(adapter.getLibraryName()) && database.equals(adapter.getLibraryDatabaseName())
                     && dataverseName.equals(adapter.getLibraryDataverseName())) {
                 throw new AsterixException(
                         org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "library",
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java
index 71015fc..aeb6d13 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java
@@ -165,7 +165,7 @@
 
     public void dropDataset(String database, DataverseName dataverseName, String datasetName) {
         Dataset dataset = new Dataset(database, dataverseName, datasetName, null, null, null, null, null, null, null,
-                null, -1, MetadataUtil.PENDING_NO_OP);
+                null, null, -1, MetadataUtil.PENDING_NO_OP);
         droppedCache.addDatasetIfNotExists(dataset);
         logAndApply(new MetadataLogicalOperation(dataset, false));
     }
@@ -202,8 +202,8 @@
     }
 
     public void dropFunction(FunctionSignature signature) {
-        Function function =
-                new Function(signature, null, null, null, null, null, null, null, null, null, false, false, null, null);
+        Function function = new Function(signature, null, null, null, null, null, null, null, null, null, null, false,
+                false, null, null);
         droppedCache.addFunctionIfNotExists(function);
         logAndApply(new MetadataLogicalOperation(function, false));
     }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
index 94ee46f..4bab4c9 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBootstrap.java
@@ -220,9 +220,9 @@
                     indexes[i].getPartitioningExprType(), false, null, null);
             MetadataManager.INSTANCE.addDataset(mdTxnCtx,
                     new Dataset(indexes[i].getDatabaseName(), indexes[i].getDataverseName(),
-                            indexes[i].getIndexedDatasetName(), indexes[i].getDataverseName(),
-                            indexes[i].getPayloadRecordType().getTypeName(), indexes[i].getNodeGroupName(),
-                            StorageConstants.DEFAULT_COMPACTION_POLICY_NAME,
+                            indexes[i].getIndexedDatasetName(), indexes[i].getDatabaseName(),
+                            indexes[i].getDataverseName(), indexes[i].getPayloadRecordType().getTypeName(),
+                            indexes[i].getNodeGroupName(), StorageConstants.DEFAULT_COMPACTION_POLICY_NAME,
                             StorageConstants.DEFAULT_COMPACTION_POLICY_PROPERTIES, id, new HashMap<>(),
                             DatasetType.INTERNAL, indexes[i].getDatasetId().getId(), MetadataUtil.PENDING_NO_OP));
         }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
index 5ae18ca..cecf3d3 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
@@ -42,6 +42,7 @@
     public static final String FIELD_NAME_DATASET_NAME = "DatasetName";
     public static final String FIELD_NAME_DATASET_TYPE = "DatasetType";
     public static final String FIELD_NAME_DATASOURCE_ADAPTER = "DatasourceAdapter";
+    public static final String FIELD_NAME_DATATYPE_DATABASE_NAME = "DatatypeDatabaseName";
     public static final String FIELD_NAME_DATATYPE_DATAVERSE_NAME = "DatatypeDataverseName";
     public static final String FIELD_NAME_DATATYPE_NAME = "DatatypeName";
     public static final String FIELD_NAME_DATABASE_NAME = "DatabaseName";
@@ -80,15 +81,18 @@
     public static final String FIELD_NAME_KIND = "Kind";
     public static final String FIELD_NAME_LANGUAGE = "Language";
     public static final String FIELD_NAME_HASH = "MD5Hash";
+    public static final String FIELD_NAME_LIBRARY_DATABASE_NAME = "LibraryDatabaseName";
     public static final String FIELD_NAME_LIBRARY_DATAVERSE_NAME = "LibraryDataverseName";
     public static final String FIELD_NAME_LIBRARY_NAME = "LibraryName";
     public static final String FIELD_NAME_LAST_REFRESH_TIME = "LastRefreshTime";
+    public static final String FIELD_NAME_METATYPE_DATABASE_NAME = "MetatypeDatabaseName";
     public static final String FIELD_NAME_METATYPE_DATAVERSE_NAME = "MetatypeDataverseName";
     public static final String FIELD_NAME_METATYPE_NAME = "MetatypeName";
     public static final String FIELD_NAME_NAME = "Name";
     public static final String FIELD_NAME_NODE_NAME = "NodeName";
     public static final String FIELD_NAME_NODE_NAMES = "NodeNames";
     public static final String FIELD_NAME_NUMBER_OF_CORES = "NumberOfCores";
+    public static final String FIELD_NAME_OBJECT_DATABASE_NAME = "ObjectDatabaseName";
     public static final String FIELD_NAME_OBJECT_DATAVERSE_NAME = "ObjectDataverseName";
     public static final String FIELD_NAME_OBJECT_NAME = "ObjectName";
     public static final String FIELD_NAME_ORDERED_LIST = "OrderedList";
@@ -101,9 +105,11 @@
     public static final String FIELD_NAME_PRIMARY_KEY_ENFORCED = "PrimaryKeyEnforced";
     public static final String FIELD_NAME_PROPERTIES = "Properties";
     public static final String FIELD_NAME_RECORD = "Record";
+    public static final String FIELD_NAME_REF_DATABASE_NAME = "RefDatabaseName";
     public static final String FIELD_NAME_REF_DATAVERSE_NAME = "RefDataverseName";
     public static final String FIELD_NAME_REF_DATASET_NAME = "RefDatasetName";
     public static final String FIELD_NAME_RETURN_TYPE = "ReturnType";
+    public static final String FIELD_NAME_RETURN_TYPE_DATABASE_NAME = "ReturnTypeDatabaseName";
     public static final String FIELD_NAME_RETURN_TYPE_DATAVERSE_NAME = "ReturnTypeDataverseName";
     public static final String FIELD_NAME_SEARCH_KEY = "SearchKey";
     public static final String FIELD_NAME_SYNONYM_NAME = "SynonymName";
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
index 9604f09..85fbad1 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
@@ -145,6 +145,7 @@
     private final String databaseName;
     private final DataverseName dataverseName;
     private final String datasetName;
+    private final String recordTypeDatabaseName;
     private final DataverseName recordTypeDataverseName;
     private final String recordTypeName;
     private final String nodeGroupName;
@@ -153,6 +154,7 @@
     private final Map<String, String> compactionPolicyProperties;
     private final DatasetType datasetType;
     private final IDatasetDetails datasetDetails;
+    private final String metaTypeDatabaseName;
     private final DataverseName metaTypeDataverseName;
     private final String metaTypeName;
     private final long rebalanceCount;
@@ -161,46 +163,50 @@
     private final DatasetFullyQualifiedName datasetFullyQualifiedName;
     private final DatasetFormatInfo datasetFormatInfo;
 
-    public Dataset(String databaseName, DataverseName dataverseName, String datasetName,
+    public Dataset(String databaseName, DataverseName dataverseName, String datasetName, String recordTypeDatabaseName,
             DataverseName recordTypeDataverseName, String recordTypeName, String nodeGroupName, String compactionPolicy,
             Map<String, String> compactionPolicyProperties, IDatasetDetails datasetDetails, Map<String, String> hints,
             DatasetType datasetType, int datasetId, int pendingOp) {
-        this(databaseName, dataverseName, datasetName, recordTypeDataverseName, recordTypeName,
-                /*metaTypeDataverseName*/null, /*metaTypeName*/null, nodeGroupName, compactionPolicy,
+        this(databaseName, dataverseName, datasetName, recordTypeDatabaseName, recordTypeDataverseName, recordTypeName,
+                null, /*metaTypeDataverseName*/null, /*metaTypeName*/null, nodeGroupName, compactionPolicy,
                 compactionPolicyProperties, datasetDetails, hints, datasetType, datasetId, pendingOp,
                 CompressionManager.NONE, DatasetFormatInfo.SYSTEM_DEFAULT);
     }
 
-    public Dataset(String databaseName, DataverseName dataverseName, String datasetName,
-            DataverseName itemTypeDataverseName, String itemTypeName, DataverseName metaItemTypeDataverseName,
-            String metaItemTypeName, String nodeGroupName, String compactionPolicy,
-            Map<String, String> compactionPolicyProperties, IDatasetDetails datasetDetails, Map<String, String> hints,
-            DatasetType datasetType, int datasetId, int pendingOp, String compressionScheme,
+    public Dataset(String databaseName, DataverseName dataverseName, String datasetName, String itemTypeDatabaseName,
+            DataverseName itemTypeDataverseName, String itemTypeName, String metaItemTypeDatabaseName,
+            DataverseName metaItemTypeDataverseName, String metaItemTypeName, String nodeGroupName,
+            String compactionPolicy, Map<String, String> compactionPolicyProperties, IDatasetDetails datasetDetails,
+            Map<String, String> hints, DatasetType datasetType, int datasetId, int pendingOp, String compressionScheme,
             DatasetFormatInfo datasetFormatInfo) {
-        this(databaseName, dataverseName, datasetName, itemTypeDataverseName, itemTypeName, metaItemTypeDataverseName,
-                metaItemTypeName, nodeGroupName, compactionPolicy, compactionPolicyProperties, datasetDetails, hints,
-                datasetType, datasetId, pendingOp, 0L, compressionScheme, datasetFormatInfo);
+        this(databaseName, dataverseName, datasetName, itemTypeDatabaseName, itemTypeDataverseName, itemTypeName,
+                metaItemTypeDatabaseName, metaItemTypeDataverseName, metaItemTypeName, nodeGroupName, compactionPolicy,
+                compactionPolicyProperties, datasetDetails, hints, datasetType, datasetId, pendingOp, 0L,
+                compressionScheme, datasetFormatInfo);
     }
 
     public Dataset(Dataset dataset) {
-        this(dataset.databaseName, dataset.dataverseName, dataset.datasetName, dataset.recordTypeDataverseName,
-                dataset.recordTypeName, dataset.metaTypeDataverseName, dataset.metaTypeName, dataset.nodeGroupName,
+        this(dataset.databaseName, dataset.dataverseName, dataset.datasetName, dataset.recordTypeDatabaseName,
+                dataset.recordTypeDataverseName, dataset.recordTypeName, dataset.metaTypeDatabaseName,
+                dataset.metaTypeDataverseName, dataset.metaTypeName, dataset.nodeGroupName,
                 dataset.compactionPolicyFactory, dataset.compactionPolicyProperties, dataset.datasetDetails,
                 dataset.hints, dataset.datasetType, dataset.datasetId, dataset.pendingOp, dataset.rebalanceCount,
                 dataset.compressionScheme, dataset.datasetFormatInfo);
     }
 
-    public Dataset(String databaseName, DataverseName dataverseName, String datasetName,
-            DataverseName itemTypeDataverseName, String itemTypeName, DataverseName metaItemTypeDataverseName,
-            String metaItemTypeName, String nodeGroupName, String compactionPolicy,
-            Map<String, String> compactionPolicyProperties, IDatasetDetails datasetDetails, Map<String, String> hints,
-            DatasetType datasetType, int datasetId, int pendingOp, long rebalanceCount, String compressionScheme,
-            DatasetFormatInfo datasetFormatInfo) {
+    public Dataset(String databaseName, DataverseName dataverseName, String datasetName, String itemTypeDatabaseName,
+            DataverseName itemTypeDataverseName, String itemTypeName, String metaItemTypeDatabaseName,
+            DataverseName metaItemTypeDataverseName, String metaItemTypeName, String nodeGroupName,
+            String compactionPolicy, Map<String, String> compactionPolicyProperties, IDatasetDetails datasetDetails,
+            Map<String, String> hints, DatasetType datasetType, int datasetId, int pendingOp, long rebalanceCount,
+            String compressionScheme, DatasetFormatInfo datasetFormatInfo) {
         this.databaseName = Objects.requireNonNull(databaseName);
         this.dataverseName = dataverseName;
         this.datasetName = datasetName;
         this.recordTypeName = itemTypeName;
+        this.recordTypeDatabaseName = itemTypeDatabaseName;
         this.recordTypeDataverseName = itemTypeDataverseName;
+        this.metaTypeDatabaseName = metaItemTypeDatabaseName;
         this.metaTypeDataverseName = metaItemTypeDataverseName;
         this.metaTypeName = metaItemTypeName;
         this.nodeGroupName = nodeGroupName;
@@ -235,6 +241,10 @@
         return recordTypeName;
     }
 
+    public String getItemTypeDatabaseName() {
+        return recordTypeDatabaseName;
+    }
+
     public DataverseName getItemTypeDataverseName() {
         return recordTypeDataverseName;
     }
@@ -271,6 +281,10 @@
         return pendingOp;
     }
 
+    public String getMetaItemTypeDatabaseName() {
+        return metaTypeDatabaseName;
+    }
+
     public DataverseName getMetaItemTypeDataverseName() {
         return metaTypeDataverseName;
     }
@@ -310,7 +324,8 @@
             return false;
         }
         Dataset otherDataset = (Dataset) other;
-        return Objects.equals(dataverseName, otherDataset.dataverseName)
+        return Objects.equals(databaseName, otherDataset.databaseName)
+                && Objects.equals(dataverseName, otherDataset.dataverseName)
                 && Objects.equals(datasetName, otherDataset.datasetName);
     }
 
@@ -371,7 +386,8 @@
             // #. mark the existing dataset as PendingDropOp
             MetadataManager.INSTANCE.dropDataset(mdTxnCtx.getValue(), databaseName, dataverseName, datasetName, force);
             MetadataManager.INSTANCE.addDataset(mdTxnCtx.getValue(),
-                    new Dataset(databaseName, dataverseName, datasetName, getItemTypeDataverseName(), getItemTypeName(),
+                    new Dataset(databaseName, dataverseName, datasetName, getItemTypeDatabaseName(),
+                            getItemTypeDataverseName(), getItemTypeName(), getMetaItemTypeDatabaseName(),
                             getMetaItemTypeDataverseName(), getMetaItemTypeName(), getNodeGroupName(),
                             getCompactionPolicy(), getCompactionPolicyProperties(), getDatasetDetails(), getHints(),
                             getDatasetType(), getDatasetId(), MetadataUtil.PENDING_DROP_OP, getCompressionScheme(),
@@ -396,14 +412,13 @@
         MetadataManager.INSTANCE.dropDataset(mdTxnCtx.getValue(), databaseName, dataverseName, datasetName, force);
 
         // drop inline types
-        String recordTypeDatabase = MetadataUtil.resolveDatabase(null, recordTypeDataverseName);
-        if (TypeUtil.isDatasetInlineTypeName(this, recordTypeDataverseName, recordTypeName)) {
-            MetadataManager.INSTANCE.dropDatatype(mdTxnCtx.getValue(), recordTypeDatabase, recordTypeDataverseName,
+        if (TypeUtil.isDatasetInlineTypeName(this, recordTypeDatabaseName, recordTypeDataverseName, recordTypeName)) {
+            MetadataManager.INSTANCE.dropDatatype(mdTxnCtx.getValue(), recordTypeDatabaseName, recordTypeDataverseName,
                     recordTypeName);
         }
-        String metaTypeDatabase = MetadataUtil.resolveDatabase(null, metaTypeDataverseName);
-        if (hasMetaPart() && TypeUtil.isDatasetInlineTypeName(this, metaTypeDataverseName, metaTypeName)) {
-            MetadataManager.INSTANCE.dropDatatype(mdTxnCtx.getValue(), metaTypeDatabase, metaTypeDataverseName,
+        if (hasMetaPart()
+                && TypeUtil.isDatasetInlineTypeName(this, metaTypeDatabaseName, metaTypeDataverseName, metaTypeName)) {
+            MetadataManager.INSTANCE.dropDatatype(mdTxnCtx.getValue(), metaTypeDatabaseName, metaTypeDataverseName,
                     metaTypeName);
         }
 
@@ -621,6 +636,7 @@
 
     public Map<String, Object> toMap() {
         Map<String, Object> tree = new HashMap<>();
+        //TODO(DB):
         tree.put("datasetId", Integer.toString(datasetId));
         tree.put("dataverseName", dataverseName);
         tree.put("datasetName", datasetName);
@@ -643,7 +659,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(dataverseName, datasetName);
+        return Objects.hash(databaseName, dataverseName, datasetName);
     }
 
     /**
@@ -831,11 +847,12 @@
 
     // Gets the target dataset for the purpose of rebalance.
     public Dataset getTargetDatasetForRebalance(String targetNodeGroupName) {
-        return new Dataset(this.databaseName, this.dataverseName, this.datasetName, this.recordTypeDataverseName,
-                this.recordTypeName, this.metaTypeDataverseName, this.metaTypeName, targetNodeGroupName,
-                this.compactionPolicyFactory, this.compactionPolicyProperties, this.datasetDetails, this.hints,
-                this.datasetType, DatasetIdFactory.generateAlternatingDatasetId(this.datasetId), this.pendingOp,
-                this.rebalanceCount + 1, this.compressionScheme, this.datasetFormatInfo);
+        return new Dataset(this.databaseName, this.dataverseName, this.datasetName, this.recordTypeDatabaseName,
+                this.recordTypeDataverseName, this.recordTypeName, this.metaTypeDatabaseName,
+                this.metaTypeDataverseName, this.metaTypeName, targetNodeGroupName, this.compactionPolicyFactory,
+                this.compactionPolicyProperties, this.datasetDetails, this.hints, this.datasetType,
+                DatasetIdFactory.generateAlternatingDatasetId(this.datasetId), this.pendingOp, this.rebalanceCount + 1,
+                this.compressionScheme, this.datasetFormatInfo);
     }
 
     // Gets an array of partition numbers for this dataset.
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/DependencyKind.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/DependencyKind.java
index 5eef0dc..2837c94 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/DependencyKind.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/DependencyKind.java
@@ -22,28 +22,30 @@
 import static org.apache.asterix.common.utils.IdentifierUtil.dataset;
 
 import org.apache.asterix.common.functions.FunctionSignature;
-import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.common.metadata.MetadataUtil;
 import org.apache.asterix.metadata.utils.DatasetUtil;
 import org.apache.asterix.metadata.utils.TypeUtil;
-import org.apache.hyracks.algebricks.common.utils.Triple;
 
 public enum DependencyKind {
-    DATASET(dependency -> DatasetUtil.getFullyQualifiedDisplayName(dependency.first, dependency.second)),
+    DATASET(
+            dependency -> DatasetUtil.getFullyQualifiedDisplayName(dependency.getDataverseName(),
+                    dependency.getSubName1())),
     FUNCTION(
-            dependency -> new FunctionSignature(dependency.first, dependency.second, Integer.parseInt(dependency.third))
-                    .toString()),
-    TYPE(dependency -> TypeUtil.getFullyQualifiedDisplayName(dependency.first, dependency.second)),
-    SYNONYM(dependency -> MetadataUtil.getFullyQualifiedDisplayName(dependency.first, dependency.second));
+            dependency -> new FunctionSignature(dependency.getDataverseName(), dependency.getSubName1(),
+                    Integer.parseInt(dependency.getSubName2())).toString()),
+    TYPE(dependency -> TypeUtil.getFullyQualifiedDisplayName(dependency.getDataverseName(), dependency.getSubName1())),
+    SYNONYM(
+            dependency -> MetadataUtil.getFullyQualifiedDisplayName(dependency.getDataverseName(),
+                    dependency.getSubName1()));
 
-    private final java.util.function.Function<Triple<DataverseName, String, String>, String> dependencyDisplayNameAccessor;
+    private final java.util.function.Function<DependencyFullyQualifiedName, String> dependencyDisplayNameAccessor;
 
-    DependencyKind(
-            java.util.function.Function<Triple<DataverseName, String, String>, String> dependencyDisplayNameAccessor) {
+    DependencyKind(java.util.function.Function<DependencyFullyQualifiedName, String> dependencyDisplayNameAccessor) {
         this.dependencyDisplayNameAccessor = dependencyDisplayNameAccessor;
     }
 
-    public String getDependencyDisplayName(Triple<DataverseName, String, String> dependency) {
+    public String getDependencyDisplayName(DependencyFullyQualifiedName dependency) {
         return dependencyDisplayNameAccessor.apply(dependency);
     }
 
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/ExternalDatasetDetails.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/ExternalDatasetDetails.java
index d1cd1fa..22aa431 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/ExternalDatasetDetails.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/ExternalDatasetDetails.java
@@ -32,6 +32,7 @@
 import org.apache.asterix.external.util.ExternalDataConstants;
 import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
 import org.apache.asterix.metadata.IDatasetDetails;
+import org.apache.asterix.metadata.bootstrap.DatasetEntity;
 import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
 import org.apache.asterix.metadata.utils.DatasetUtil;
 import org.apache.asterix.om.base.ADateTime;
@@ -83,7 +84,7 @@
 
     @SuppressWarnings("unchecked")
     @Override
-    public void writeDatasetDetailsRecordType(DataOutput out) throws HyracksDataException {
+    public void writeDatasetDetailsRecordType(DataOutput out, DatasetEntity datasetEntity) throws HyracksDataException {
         IARecordBuilder externalRecordBuilder = new RecordBuilder();
         OrderedListBuilder listBuilder = new OrderedListBuilder();
         ArrayBackedValueStorage fieldValue = new ArrayBackedValueStorage();
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Feed.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Feed.java
index 5796df9..75c171e 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Feed.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Feed.java
@@ -39,6 +39,7 @@
     /** A string representation of the instance **/
     private final String displayName;
     /** Feed configurations */
+    //TODO(DB): check for keys in the map that are using dataverse and need to include database
     private final Map<String, String> feedConfiguration;
 
     public Feed(String databaseName, DataverseName dataverseName, String feedName,
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
index af78e0e..82c9514 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
@@ -26,10 +26,10 @@
 
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.metadata.MetadataCache;
 import org.apache.asterix.metadata.api.IMetadataEntity;
 import org.apache.asterix.om.types.TypeSignature;
-import org.apache.hyracks.algebricks.common.utils.Triple;
 
 public class Function implements IMetadataEntity<Function> {
     private static final long serialVersionUID = 5L;
@@ -41,20 +41,20 @@
     private final String body;
     private final String language;
     private final String kind;
-    private final String databaseName = null;
+    private final String libraryDatabaseName;
     private final DataverseName libraryDataverseName;
     private final String libraryName;
     private final List<String> externalIdentifier;
     private final Boolean deterministic; // null for SQL++ and AQL functions
     private final Boolean nullCall; // null for SQL++ and AQL functions
     private final Map<String, String> resources;
-    private final List<List<Triple<DataverseName, String, String>>> dependencies;
+    private final List<List<DependencyFullyQualifiedName>> dependencies;
 
     public Function(FunctionSignature signature, List<String> paramNames, List<TypeSignature> paramTypes,
             TypeSignature returnType, String functionBody, String functionKind, String language,
-            DataverseName libraryDataverseName, String libraryName, List<String> externalIdentifier, Boolean nullCall,
-            Boolean deterministic, Map<String, String> resources,
-            List<List<Triple<DataverseName, String, String>>> dependencies) {
+            String libraryDatabaseName, DataverseName libraryDataverseName, String libraryName,
+            List<String> externalIdentifier, Boolean nullCall, Boolean deterministic, Map<String, String> resources,
+            List<List<DependencyFullyQualifiedName>> dependencies) {
         this.signature = signature;
         this.paramNames = paramNames;
         this.paramTypes = paramTypes;
@@ -62,6 +62,7 @@
         this.returnType = returnType;
         this.language = language;
         this.kind = functionKind;
+        this.libraryDatabaseName = libraryDatabaseName;
         this.libraryDataverseName = libraryDataverseName;
         this.libraryName = libraryName;
         this.externalIdentifier = externalIdentifier;
@@ -128,6 +129,10 @@
         return externalIdentifier != null;
     }
 
+    public String getLibraryDatabaseName() {
+        return libraryDatabaseName;
+    }
+
     public DataverseName getLibraryDataverseName() {
         return libraryDataverseName;
     }
@@ -152,7 +157,7 @@
         return resources;
     }
 
-    public List<List<Triple<DataverseName, String, String>>> getDependencies() {
+    public List<List<DependencyFullyQualifiedName>> getDependencies() {
         return dependencies;
     }
 
@@ -169,12 +174,12 @@
     public static List<DependencyKind> DEPENDENCIES_SCHEMA =
             Arrays.asList(DependencyKind.DATASET, DependencyKind.FUNCTION, DependencyKind.TYPE, DependencyKind.SYNONYM);
 
-    public static List<List<Triple<DataverseName, String, String>>> createDependencies(
-            List<Triple<DataverseName, String, String>> datasetDependencies,
-            List<Triple<DataverseName, String, String>> functionDependencies,
-            List<Triple<DataverseName, String, String>> typeDependencies,
-            List<Triple<DataverseName, String, String>> synonymDependencies) {
-        List<List<Triple<DataverseName, String, String>>> depList = new ArrayList<>(DEPENDENCIES_SCHEMA.size());
+    public static List<List<DependencyFullyQualifiedName>> createDependencies(
+            List<DependencyFullyQualifiedName> datasetDependencies,
+            List<DependencyFullyQualifiedName> functionDependencies,
+            List<DependencyFullyQualifiedName> typeDependencies,
+            List<DependencyFullyQualifiedName> synonymDependencies) {
+        List<List<DependencyFullyQualifiedName>> depList = new ArrayList<>(DEPENDENCIES_SCHEMA.size());
         depList.add(datasetDependencies);
         depList.add(functionDependencies);
         depList.add(typeDependencies);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/InternalDatasetDetails.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/InternalDatasetDetails.java
index 5abad5d..113060e 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/InternalDatasetDetails.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/InternalDatasetDetails.java
@@ -30,6 +30,7 @@
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
 import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
 import org.apache.asterix.metadata.IDatasetDetails;
+import org.apache.asterix.metadata.bootstrap.DatasetEntity;
 import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
 import org.apache.asterix.om.base.ABoolean;
 import org.apache.asterix.om.base.AInt8;
@@ -155,7 +156,7 @@
     }
 
     @Override
-    public void writeDatasetDetailsRecordType(DataOutput out) throws HyracksDataException {
+    public void writeDatasetDetailsRecordType(DataOutput out, DatasetEntity datasetEntity) throws HyracksDataException {
 
         IARecordBuilder internalRecordBuilder = new RecordBuilder();
         OrderedListBuilder listBuilder = new OrderedListBuilder();
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Synonym.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Synonym.java
index 135356a..ebe780a 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Synonym.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Synonym.java
@@ -35,15 +35,18 @@
 
     private final String synonymName;
 
+    private final String objectDatabaseName;
+
     private final DataverseName objectDataverseName;
 
     private final String objectName;
 
-    public Synonym(String databaseName, DataverseName dataverseName, String synonymName,
+    public Synonym(String databaseName, DataverseName dataverseName, String synonymName, String objectDatabaseName,
             DataverseName objectDataverseName, String objectName) {
         this.databaseName = Objects.requireNonNull(databaseName);
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.synonymName = Objects.requireNonNull(synonymName);
+        this.objectDatabaseName = Objects.requireNonNull(objectDatabaseName);
         this.objectDataverseName = Objects.requireNonNull(objectDataverseName);
         this.objectName = Objects.requireNonNull(objectName);
     }
@@ -60,6 +63,10 @@
         return synonymName;
     }
 
+    public String getObjectDatabaseName() {
+        return objectDatabaseName;
+    }
+
     public DataverseName getObjectDataverseName() {
         return objectDataverseName;
     }
@@ -76,13 +83,15 @@
             return false;
         Synonym synonym = (Synonym) o;
         return Objects.equals(databaseName, synonym.databaseName) && dataverseName.equals(synonym.dataverseName)
-                && synonymName.equals(synonym.synonymName) && objectDataverseName.equals(synonym.objectDataverseName)
-                && objectName.equals(synonym.objectName);
+                && synonymName.equals(synonym.synonymName)
+                && Objects.equals(objectDatabaseName, synonym.objectDatabaseName)
+                && objectDataverseName.equals(synonym.objectDataverseName) && objectName.equals(synonym.objectName);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(databaseName, dataverseName, synonymName, objectDataverseName, objectName);
+        return Objects.hash(databaseName, dataverseName, synonymName, objectDatabaseName, objectDataverseName,
+                objectName);
     }
 
     @Override
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/ViewDetails.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/ViewDetails.java
index 76c6b4d..0196369 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/ViewDetails.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/ViewDetails.java
@@ -20,6 +20,7 @@
 package org.apache.asterix.metadata.entities;
 
 import static org.apache.asterix.metadata.entitytupletranslators.AbstractTupleTranslator.writeDateTimeFormats;
+import static org.apache.asterix.metadata.entitytupletranslators.AbstractTupleTranslator.writeDeps;
 import static org.apache.asterix.om.types.AOrderedListType.FULL_OPEN_ORDEREDLIST_TYPE;
 
 import java.io.DataOutput;
@@ -34,32 +35,31 @@
 import org.apache.asterix.builders.RecordBuilder;
 import org.apache.asterix.common.config.DatasetConfig;
 import org.apache.asterix.common.metadata.DatasetFullyQualifiedName;
-import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
 import org.apache.asterix.metadata.IDatasetDetails;
+import org.apache.asterix.metadata.bootstrap.DatasetEntity;
 import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
-import org.apache.asterix.metadata.entitytupletranslators.AbstractTupleTranslator;
 import org.apache.asterix.om.base.ABoolean;
 import org.apache.asterix.om.base.AMutableString;
 import org.apache.asterix.om.base.ANull;
 import org.apache.asterix.om.base.AString;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.utils.RecordUtil;
-import org.apache.hyracks.algebricks.common.utils.Triple;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 
 public class ViewDetails implements IDatasetDetails {
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 2L;
 
     public static List<DependencyKind> DEPENDENCIES_SCHEMA =
             Arrays.asList(DependencyKind.DATASET, DependencyKind.FUNCTION, DependencyKind.TYPE, DependencyKind.SYNONYM);
 
     private final String viewBody;
 
-    private final List<List<Triple<DataverseName, String, String>>> dependencies;
+    private final List<List<DependencyFullyQualifiedName>> dependencies;
 
     // Typed view parameters
 
@@ -75,9 +75,9 @@
 
     private final List<ForeignKey> foreignKeys;
 
-    public ViewDetails(String viewBody, List<List<Triple<DataverseName, String, String>>> dependencies,
-            Boolean defaultNull, List<String> primaryKeyFields, List<ForeignKey> foreignKeys, String datetimeFormat,
-            String dateFormat, String timeFormat) {
+    public ViewDetails(String viewBody, List<List<DependencyFullyQualifiedName>> dependencies, Boolean defaultNull,
+            List<String> primaryKeyFields, List<ForeignKey> foreignKeys, String datetimeFormat, String dateFormat,
+            String timeFormat) {
         this.viewBody = Objects.requireNonNull(viewBody);
         this.dependencies = Objects.requireNonNull(dependencies);
         this.defaultNull = defaultNull;
@@ -97,7 +97,7 @@
         return viewBody;
     }
 
-    public List<List<Triple<DataverseName, String, String>>> getDependencies() {
+    public List<List<DependencyFullyQualifiedName>> getDependencies() {
         return dependencies;
     }
 
@@ -128,7 +128,7 @@
     }
 
     @Override
-    public void writeDatasetDetailsRecordType(DataOutput out) throws HyracksDataException {
+    public void writeDatasetDetailsRecordType(DataOutput out, DatasetEntity datasetEntity) throws HyracksDataException {
         IARecordBuilder viewRecordBuilder = new RecordBuilder();
         viewRecordBuilder.reset(RecordUtil.FULLY_OPEN_RECORD_TYPE);
 
@@ -162,25 +162,14 @@
             OrderedListBuilder dependenciesListBuilder = new OrderedListBuilder();
             OrderedListBuilder dependencyListBuilder = new OrderedListBuilder();
             OrderedListBuilder dependencyNameListBuilder = new OrderedListBuilder();
-            List<String> dependencySubnames = new ArrayList<>(3);
 
+            boolean writeDatabase = datasetEntity.databaseNameIndex() >= 0;
             dependenciesListBuilder.reset(FULL_OPEN_ORDEREDLIST_TYPE);
-            for (List<Triple<DataverseName, String, String>> dependenciesList : dependencies) {
+            for (List<DependencyFullyQualifiedName> dependenciesList : dependencies) {
                 dependencyListBuilder.reset(FULL_OPEN_ORDEREDLIST_TYPE);
-                for (Triple<DataverseName, String, String> dependency : dependenciesList) {
-                    dependencyNameListBuilder.reset(FULL_OPEN_ORDEREDLIST_TYPE);
-                    dependencySubnames.clear();
-                    AbstractTupleTranslator.getDependencySubNames(dependency, dependencySubnames);
-                    for (String subName : dependencySubnames) {
-                        itemValue.reset();
-                        aString.setValue(subName);
-                        stringSerde.serialize(aString, itemValue.getDataOutput());
-                        dependencyNameListBuilder.addItem(itemValue);
-                    }
-                    itemValue.reset();
-                    dependencyNameListBuilder.write(itemValue.getDataOutput(), true);
-                    dependencyListBuilder.addItem(itemValue);
-                }
+                writeDeps(dependencyListBuilder, itemValue, dependenciesList, dependencyNameListBuilder,
+                        FULL_OPEN_ORDEREDLIST_TYPE, writeDatabase, aString, stringSerde);
+
                 itemValue.reset();
                 dependencyListBuilder.write(itemValue.getDataOutput(), true);
                 dependenciesListBuilder.addItem(itemValue);
@@ -246,6 +235,17 @@
                 keyListBuilder.write(fieldValue.getDataOutput(), true);
                 foreignKeyRecordBuilder.addField(fieldName, fieldValue);
 
+                // write field 'RefDatabaseName'
+                if (datasetEntity.databaseNameIndex() >= 0) {
+                    fieldName.reset();
+                    aString.setValue(MetadataRecordTypes.FIELD_NAME_REF_DATABASE_NAME);
+                    stringSerde.serialize(aString, fieldName.getDataOutput());
+                    fieldValue.reset();
+                    aString.setValue(foreignKey.getReferencedDatasetName().getDatabaseName());
+                    stringSerde.serialize(aString, fieldValue.getDataOutput());
+                    foreignKeyRecordBuilder.addField(fieldName, fieldValue);
+                }
+
                 // write field 'RefDataverseName'
                 fieldName.reset();
                 aString.setValue(MetadataRecordTypes.FIELD_NAME_REF_DATAVERSE_NAME);
@@ -308,12 +308,12 @@
         }
     }
 
-    public static List<List<Triple<DataverseName, String, String>>> createDependencies(
-            List<Triple<DataverseName, String, String>> datasetDependencies,
-            List<Triple<DataverseName, String, String>> functionDependencies,
-            List<Triple<DataverseName, String, String>> typeDependencies,
-            List<Triple<DataverseName, String, String>> synonymDependencies) {
-        List<List<Triple<DataverseName, String, String>>> depList = new ArrayList<>(DEPENDENCIES_SCHEMA.size());
+    public static List<List<DependencyFullyQualifiedName>> createDependencies(
+            List<DependencyFullyQualifiedName> datasetDependencies,
+            List<DependencyFullyQualifiedName> functionDependencies,
+            List<DependencyFullyQualifiedName> typeDependencies,
+            List<DependencyFullyQualifiedName> synonymDependencies) {
+        List<List<DependencyFullyQualifiedName>> depList = new ArrayList<>(DEPENDENCIES_SCHEMA.size());
         depList.add(datasetDependencies);
         depList.add(functionDependencies);
         depList.add(typeDependencies);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractDatatypeTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractDatatypeTupleTranslator.java
index 047abfe..5056340 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractDatatypeTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractDatatypeTupleTranslator.java
@@ -25,7 +25,6 @@
 import org.apache.asterix.builders.OrderedListBuilder;
 import org.apache.asterix.builders.RecordBuilder;
 import org.apache.asterix.common.metadata.DataverseName;
-import org.apache.asterix.common.metadata.MetadataUtil;
 import org.apache.asterix.common.transactions.TxnId;
 import org.apache.asterix.metadata.MetadataNode;
 import org.apache.asterix.metadata.api.IMetadataIndex;
@@ -63,8 +62,8 @@
         this.metadataNode = metadataNode;
     }
 
-    protected void writeDerivedTypeRecord(DataverseName dataverseName, AbstractComplexType derivedDatatype,
-            DataOutput out, boolean isAnonymous) throws HyracksDataException {
+    protected void writeDerivedTypeRecord(String databaseName, DataverseName dataverseName,
+            AbstractComplexType derivedDatatype, DataOutput out, boolean isAnonymous) throws HyracksDataException {
         DerivedTypeTag tag;
         IARecordBuilder derivedRecordBuilder = new RecordBuilder();
         ArrayBackedValueStorage fieldValue = new ArrayBackedValueStorage();
@@ -99,18 +98,18 @@
         switch (tag) {
             case RECORD:
                 fieldValue.reset();
-                writeRecordType(dataverseName, derivedDatatype, fieldValue.getDataOutput());
+                writeRecordType(databaseName, dataverseName, derivedDatatype, fieldValue.getDataOutput());
                 derivedRecordBuilder.addField(MetadataRecordTypes.DERIVEDTYPE_ARECORD_RECORD_FIELD_INDEX, fieldValue);
                 break;
             case UNORDEREDLIST:
                 fieldValue.reset();
-                writeCollectionType(dataverseName, derivedDatatype, fieldValue.getDataOutput());
+                writeCollectionType(databaseName, dataverseName, derivedDatatype, fieldValue.getDataOutput());
                 derivedRecordBuilder.addField(MetadataRecordTypes.DERIVEDTYPE_ARECORD_UNORDEREDLIST_FIELD_INDEX,
                         fieldValue);
                 break;
             case ORDEREDLIST:
                 fieldValue.reset();
-                writeCollectionType(dataverseName, derivedDatatype, fieldValue.getDataOutput());
+                writeCollectionType(databaseName, dataverseName, derivedDatatype, fieldValue.getDataOutput());
                 derivedRecordBuilder.addField(MetadataRecordTypes.DERIVEDTYPE_ARECORD_ORDEREDLIST_FIELD_INDEX,
                         fieldValue);
                 break;
@@ -118,19 +117,20 @@
         derivedRecordBuilder.write(out, true);
     }
 
-    private void writeCollectionType(DataverseName dataverseName, AbstractComplexType type, DataOutput out)
-            throws HyracksDataException {
+    private void writeCollectionType(String databaseName, DataverseName dataverseName, AbstractComplexType type,
+            DataOutput out) throws HyracksDataException {
         AbstractCollectionType listType = (AbstractCollectionType) type;
         IAType itemType = listType.getItemType();
         if (itemType.getTypeTag().isDerivedType()) {
-            handleNestedDerivedType(dataverseName, itemType.getTypeName(), (AbstractComplexType) itemType);
+            handleNestedDerivedType(databaseName, dataverseName, itemType.getTypeName(),
+                    (AbstractComplexType) itemType);
         }
         aString.setValue(listType.getItemType().getTypeName());
         stringSerde.serialize(aString, out);
     }
 
-    private void writeRecordType(DataverseName dataverseName, AbstractComplexType type, DataOutput out)
-            throws HyracksDataException {
+    private void writeRecordType(String databaseName, DataverseName dataverseName, AbstractComplexType type,
+            DataOutput out) throws HyracksDataException {
 
         ArrayBackedValueStorage fieldValue = new ArrayBackedValueStorage();
         ArrayBackedValueStorage itemValue = new ArrayBackedValueStorage();
@@ -153,7 +153,8 @@
                 fieldType = fieldUnionType.getActualType();
             }
             if (fieldType.getTypeTag().isDerivedType()) {
-                handleNestedDerivedType(dataverseName, fieldType.getTypeName(), (AbstractComplexType) fieldType);
+                handleNestedDerivedType(databaseName, dataverseName, fieldType.getTypeName(),
+                        (AbstractComplexType) fieldType);
             }
 
             itemValue.reset();
@@ -207,10 +208,9 @@
         recordRecordBuilder.write(out, true);
     }
 
-    protected void handleNestedDerivedType(DataverseName dataverseName, String typeName, AbstractComplexType nestedType)
-            throws HyracksDataException {
+    protected void handleNestedDerivedType(String database, DataverseName dataverseName, String typeName,
+            AbstractComplexType nestedType) throws HyracksDataException {
         try {
-            String database = MetadataUtil.databaseFor(dataverseName);
             metadataNode.addDatatype(txnId, new Datatype(database, dataverseName, typeName, nestedType, true));
         } catch (AlgebricksException e) {
             // The nested record type may have been inserted by a previous DDL statement or
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractTupleTranslator.java
index 1ae2430..b0db901 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/AbstractTupleTranslator.java
@@ -25,11 +25,14 @@
 import java.io.DataInput;
 import java.io.DataInputStream;
 import java.util.Collection;
+import java.util.List;
 
 import org.apache.asterix.builders.IARecordBuilder;
 import org.apache.asterix.builders.OrderedListBuilder;
 import org.apache.asterix.builders.RecordBuilder;
 import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
+import org.apache.asterix.common.metadata.MetadataUtil;
 import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
 import org.apache.asterix.metadata.api.IMetadataEntityTupleTranslator;
 import org.apache.asterix.metadata.api.IMetadataIndex;
@@ -45,6 +48,7 @@
 import org.apache.asterix.om.base.AString;
 import org.apache.asterix.om.base.IACursor;
 import org.apache.asterix.om.base.IAObject;
+import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.BuiltinType;
@@ -129,30 +133,49 @@
     protected abstract T createMetadataEntityFromARecord(ARecord aRecord)
             throws HyracksDataException, AlgebricksException;
 
-    public static void getDependencySubNames(Triple<DataverseName, String, String> dependency,
+    public static void getDependencySubNames(DependencyFullyQualifiedName dependency,
             Collection<? super String> outSubnames) {
-        outSubnames.add(dependency.first.getCanonicalForm());
-        if (dependency.second != null) {
-            outSubnames.add(dependency.second);
+        outSubnames.add(dependency.getDatabaseName());
+        outSubnames.add(dependency.getDataverseName().getCanonicalForm());
+        if (dependency.getSubName1() != null) {
+            outSubnames.add(dependency.getSubName1());
         }
-        if (dependency.third != null) {
-            outSubnames.add(dependency.third);
+        if (dependency.getSubName2() != null) {
+            outSubnames.add(dependency.getSubName2());
         }
     }
 
-    public static Triple<DataverseName, String, String> getDependency(AOrderedList dependencySubnames)
+    public static DependencyFullyQualifiedName getDependency(AOrderedList dependencySubnames)
             throws AlgebricksException {
-        String dataverseCanonicalName = ((AString) dependencySubnames.getItem(0)).getStringValue();
-        DataverseName dataverseName = DataverseName.createFromCanonicalForm(dataverseCanonicalName);
+        // there must be at least one item (the dataverse)
+        int currentIdx = 0;
+        IAObject databaseMarker = dependencySubnames.getItem(currentIdx);
+        String databaseName;
+        DataverseName dataverseName;
+        if (((AString) databaseMarker).getStringValue().isEmpty()) {
+            // move to database value
+            currentIdx++;
+            databaseName = ((AString) dependencySubnames.getItem(currentIdx)).getStringValue();
+            // move to dataverse value
+            currentIdx++;
+            String dataverseCanonicalName = ((AString) dependencySubnames.getItem(currentIdx)).getStringValue();
+            dataverseName = DataverseName.createFromCanonicalForm(dataverseCanonicalName);
+        } else {
+            String dataverseCanonicalName = ((AString) dependencySubnames.getItem(currentIdx)).getStringValue();
+            dataverseName = DataverseName.createFromCanonicalForm(dataverseCanonicalName);
+            databaseName = MetadataUtil.databaseFor(dataverseName);
+        }
+        currentIdx++;
         String second = null, third = null;
         int ln = dependencySubnames.size();
-        if (ln > 1) {
-            second = ((AString) dependencySubnames.getItem(1)).getStringValue();
-            if (ln > 2) {
-                third = ((AString) dependencySubnames.getItem(2)).getStringValue();
+        if (currentIdx < ln) {
+            second = ((AString) dependencySubnames.getItem(currentIdx)).getStringValue();
+            currentIdx++;
+            if (currentIdx < ln) {
+                third = ((AString) dependencySubnames.getItem(currentIdx)).getStringValue();
             }
         }
-        return new Triple<>(dataverseName, second, third);
+        return new DependencyFullyQualifiedName(databaseName, dataverseName, second, third);
     }
 
     protected static String getStringValue(IAObject obj) {
@@ -203,4 +226,49 @@
             recordBuilder.addField(nameValue, fieldValue);
         }
     }
+
+    public static void writeString(ArrayBackedValueStorage itemValue, AMutableString aString, String value,
+            ISerializerDeserializer<AString> stringSerde) throws HyracksDataException {
+        itemValue.reset();
+        aString.setValue(value);
+        stringSerde.serialize(aString, itemValue.getDataOutput());
+    }
+
+    public static void writeDeps(OrderedListBuilder dependencyListBuilder, ArrayBackedValueStorage itemValue,
+            List<DependencyFullyQualifiedName> dependencies, OrderedListBuilder dependencyNameListBuilder,
+            AOrderedListType stringList, boolean writeDatabase, AMutableString aString,
+            ISerializerDeserializer<AString> stringSerde) throws HyracksDataException {
+        for (DependencyFullyQualifiedName dependency : dependencies) {
+            dependencyNameListBuilder.reset(stringList);
+
+            if (writeDatabase) {
+                writeString(itemValue, aString, "", stringSerde);
+                dependencyNameListBuilder.addItem(itemValue);
+
+                writeString(itemValue, aString, dependency.getDatabaseName(), stringSerde);
+                dependencyNameListBuilder.addItem(itemValue);
+            }
+
+            // write dataverse
+            writeString(itemValue, aString, dependency.getDataverseName().getCanonicalForm(), stringSerde);
+            dependencyNameListBuilder.addItem(itemValue);
+
+            // write subName1
+            String subName1 = dependency.getSubName1();
+            if (subName1 != null) {
+                writeString(itemValue, aString, subName1, stringSerde);
+                dependencyNameListBuilder.addItem(itemValue);
+            }
+
+            // write subName2
+            String subName2 = dependency.getSubName2();
+            if (subName2 != null) {
+                writeString(itemValue, aString, subName2, stringSerde);
+                dependencyNameListBuilder.addItem(itemValue);
+            }
+            itemValue.reset();
+            dependencyNameListBuilder.write(itemValue.getDataOutput(), true);
+            dependencyListBuilder.addItem(itemValue);
+        }
+    }
 }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatasetTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatasetTupleTranslator.java
index 5530764..83c0d5b 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatasetTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatasetTupleTranslator.java
@@ -40,6 +40,7 @@
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.metadata.DatasetFullyQualifiedName;
 import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.common.metadata.MetadataUtil;
 import org.apache.asterix.metadata.IDatasetDetails;
 import org.apache.asterix.metadata.bootstrap.DatasetEntity;
@@ -122,6 +123,13 @@
         String typeDataverseCanonicalName =
                 ((AString) datasetRecord.getValueByPos(datasetEntity.datatypeDataverseNameIndex())).getStringValue();
         DataverseName typeDataverseName = DataverseName.createFromCanonicalForm(typeDataverseCanonicalName);
+        String itemTypeDatabaseName;
+        int typeDatabaseIdx = recType.getFieldIndex(MetadataRecordTypes.FIELD_NAME_DATATYPE_DATABASE_NAME);
+        if (typeDatabaseIdx >= 0) {
+            itemTypeDatabaseName = ((AString) datasetRecord.getValueByPos(typeDatabaseIdx)).getStringValue();
+        } else {
+            itemTypeDatabaseName = MetadataUtil.databaseFor(typeDataverseName);
+        }
         DatasetType datasetType = DatasetType
                 .valueOf(((AString) datasetRecord.getValueByPos(datasetEntity.datasetTypeIndex())).getStringValue());
         IDatasetDetails datasetDetails = null;
@@ -264,7 +272,7 @@
                 String definition = ((AString) datasetDetailsRecord.getValueByPos(definitionFieldPos)).getStringValue();
 
                 // Dependencies
-                List<List<Triple<DataverseName, String, String>>> dependencies = Collections.emptyList();
+                List<List<DependencyFullyQualifiedName>> dependencies = Collections.emptyList();
                 int dependenciesFieldPos =
                         datasetDetailsRecord.getType().getFieldIndex(MetadataRecordTypes.FIELD_NAME_DEPENDENCIES);
                 if (dependenciesFieldPos >= 0) {
@@ -272,10 +280,10 @@
                     IACursor dependenciesCursor =
                             ((AOrderedList) datasetDetailsRecord.getValueByPos(dependenciesFieldPos)).getCursor();
                     while (dependenciesCursor.next()) {
-                        List<Triple<DataverseName, String, String>> dependencyList = new ArrayList<>();
+                        List<DependencyFullyQualifiedName> dependencyList = new ArrayList<>();
                         IACursor qualifiedDependencyCursor = ((AOrderedList) dependenciesCursor.get()).getCursor();
                         while (qualifiedDependencyCursor.next()) {
-                            Triple<DataverseName, String, String> dependency =
+                            DependencyFullyQualifiedName dependency =
                                     getDependency((AOrderedList) qualifiedDependencyCursor.get());
                             dependencyList.add(dependency);
                         }
@@ -346,14 +354,23 @@
                         DataverseName refDataverseName =
                                 DataverseName.createFromCanonicalForm(refDataverseCanonicalName);
 
+                        // 'RefDatabaseName'
+                        String refDatabase;
+                        int refDatabaseNameFieldPos = foreignKeyRecord.getType()
+                                .getFieldIndex(MetadataRecordTypes.FIELD_NAME_REF_DATABASE_NAME);
+                        if (refDatabaseNameFieldPos >= 0) {
+                            refDatabase = ((AString) foreignKeyRecord.getValueByPos(refDatabaseNameFieldPos))
+                                    .getStringValue();
+                        } else {
+                            refDatabase = MetadataUtil.databaseFor(refDataverseName);
+                        }
+
                         // 'RefDatasetName'
                         int refDatasetNameFieldPos = foreignKeyRecord.getType()
                                 .getFieldIndex(MetadataRecordTypes.FIELD_NAME_REF_DATASET_NAME);
                         String refDatasetName =
                                 ((AString) foreignKeyRecord.getValueByPos(refDatasetNameFieldPos)).getStringValue();
 
-                        //TODO(DB):
-                        String refDatabase = MetadataUtil.resolveDatabase(null, refDataverseName);
                         foreignKeys.add(new ViewDetails.ForeignKey(foreignKeyFields,
                                 new DatasetFullyQualifiedName(refDatabase, refDataverseName, refDatasetName)));
                     }
@@ -372,6 +389,7 @@
 
         Map<String, String> hints = getDatasetHints(datasetRecord);
 
+        String metaItemTypeDatabaseName = null;
         DataverseName metaTypeDataverseName = null;
         String metaTypeName = null;
         int metaTypeDataverseNameIndex = recType.getFieldIndex(MetadataRecordTypes.FIELD_NAME_METATYPE_DATAVERSE_NAME);
@@ -381,15 +399,24 @@
             metaTypeDataverseName = DataverseName.createFromCanonicalForm(metaTypeDataverseCanonicalName);
             int metaTypeNameIndex = recType.getFieldIndex(MetadataRecordTypes.FIELD_NAME_METATYPE_NAME);
             metaTypeName = ((AString) datasetRecord.getValueByPos(metaTypeNameIndex)).getStringValue();
+
+            int metaTypeDatabaseIdx = recType.getFieldIndex(MetadataRecordTypes.FIELD_NAME_METATYPE_DATABASE_NAME);
+            if (metaTypeDatabaseIdx >= 0) {
+                metaItemTypeDatabaseName =
+                        ((AString) datasetRecord.getValueByPos(metaTypeDatabaseIdx)).getStringValue();
+            } else {
+                metaItemTypeDatabaseName = MetadataUtil.databaseFor(metaTypeDataverseName);
+            }
         }
 
         long rebalanceCount = getRebalanceCount(datasetRecord);
         String compressionScheme = getCompressionScheme(datasetRecord);
         DatasetFormatInfo datasetFormatInfo = getDatasetFormatInfo(datasetRecord);
 
-        return new Dataset(databaseName, dataverseName, datasetName, typeDataverseName, typeName, metaTypeDataverseName,
-                metaTypeName, nodeGroupName, compactionPolicy.first, compactionPolicy.second, datasetDetails, hints,
-                datasetType, datasetId, pendingOp, rebalanceCount, compressionScheme, datasetFormatInfo);
+        return new Dataset(databaseName, dataverseName, datasetName, itemTypeDatabaseName, typeDataverseName, typeName,
+                metaItemTypeDatabaseName, metaTypeDataverseName, metaTypeName, nodeGroupName, compactionPolicy.first,
+                compactionPolicy.second, datasetDetails, hints, datasetType, datasetId, pendingOp, rebalanceCount,
+                compressionScheme, datasetFormatInfo);
     }
 
     protected Pair<String, Map<String, String>> readCompactionPolicy(DatasetType datasetType, ARecord datasetRecord) {
@@ -521,6 +548,8 @@
         stringSerde.serialize(aString, fieldValue.getDataOutput());
         recordBuilder.addField(datasetEntity.datasetNameIndex(), fieldValue);
 
+        // itemTypeDatabaseName is written later by {@code writeOpenFields()}
+
         // write field 2
         fieldValue.reset();
         aString.setValue(dataset.getItemTypeDataverseName().getCanonicalForm());
@@ -553,12 +582,12 @@
         switch (dataset.getDatasetType()) {
             case INTERNAL:
                 fieldValue.reset();
-                dataset.getDatasetDetails().writeDatasetDetailsRecordType(fieldValue.getDataOutput());
+                dataset.getDatasetDetails().writeDatasetDetailsRecordType(fieldValue.getDataOutput(), datasetEntity);
                 recordBuilder.addField(datasetEntity.internalDetailsIndex(), fieldValue);
                 break;
             case EXTERNAL:
                 fieldValue.reset();
-                dataset.getDatasetDetails().writeDatasetDetailsRecordType(fieldValue.getDataOutput());
+                dataset.getDatasetDetails().writeDatasetDetailsRecordType(fieldValue.getDataOutput(), datasetEntity);
                 recordBuilder.addField(datasetEntity.externalDetailsIndex(), fieldValue);
                 break;
             // VIEW details are written later by {@code writeOpenFields()}
@@ -639,6 +668,7 @@
      * Keep protected to allow other extensions to add additional fields
      */
     protected void writeOpenFields(Dataset dataset) throws HyracksDataException {
+        writeItemTypeDatabase(dataset);
         writeMetaPart(dataset);
         writeRebalanceCount(dataset);
         writeBlockLevelStorageCompression(dataset);
@@ -653,13 +683,37 @@
             aString.setValue(MetadataRecordTypes.FIELD_NAME_VIEW_DETAILS);
             stringSerde.serialize(aString, fieldName.getDataOutput());
             fieldValue.reset();
-            dataset.getDatasetDetails().writeDatasetDetailsRecordType(fieldValue.getDataOutput());
+            dataset.getDatasetDetails().writeDatasetDetailsRecordType(fieldValue.getDataOutput(), datasetEntity);
+            recordBuilder.addField(fieldName, fieldValue);
+        }
+    }
+
+    private void writeItemTypeDatabase(Dataset dataset) throws HyracksDataException {
+        //TODO(DB): should use something better
+        if (datasetEntity.databaseNameIndex() >= 0) {
+            fieldName.reset();
+            aString.setValue(MetadataRecordTypes.FIELD_NAME_DATATYPE_DATABASE_NAME);
+            stringSerde.serialize(aString, fieldName.getDataOutput());
+            fieldValue.reset();
+            aString.setValue(dataset.getItemTypeDatabaseName());
+            stringSerde.serialize(aString, fieldValue.getDataOutput());
             recordBuilder.addField(fieldName, fieldValue);
         }
     }
 
     private void writeMetaPart(Dataset dataset) throws HyracksDataException {
         if (dataset.hasMetaPart()) {
+            if (datasetEntity.databaseNameIndex() >= 0) {
+                fieldName.reset();
+                aString.setValue(MetadataRecordTypes.FIELD_NAME_METATYPE_DATABASE_NAME);
+                stringSerde.serialize(aString, fieldName.getDataOutput());
+                fieldValue.reset();
+                //TODO(DB): can dataset.getMetaItemTypeDatabaseName() be null?
+                aString.setValue(dataset.getMetaItemTypeDatabaseName());
+                stringSerde.serialize(aString, fieldValue.getDataOutput());
+                recordBuilder.addField(fieldName, fieldValue);
+            }
+
             // write open field 1, the meta item type Dataverse name.
             fieldName.reset();
             aString.setValue(MetadataRecordTypes.FIELD_NAME_METATYPE_DATAVERSE_NAME);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatasourceAdapterTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatasourceAdapterTupleTranslator.java
index 1ed3fe8..6b9ad2d 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatasourceAdapterTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatasourceAdapterTupleTranslator.java
@@ -62,6 +62,7 @@
         IDataSourceAdapter.AdapterType adapterType = IDataSourceAdapter.AdapterType
                 .valueOf(((AString) adapterRecord.getValueByPos(datasourceAdapterEntity.typeIndex())).getStringValue());
 
+        //TODO(DB): look into enforcing database and dataverse to be non-null
         String libraryDatabase = null;
         DataverseName libraryDataverseName = null;
         String libraryName = null;
@@ -74,9 +75,13 @@
                     ? DataverseName.createFromCanonicalForm(
                             ((AString) adapterRecord.getValueByPos(libraryDataverseNameIdx)).getStringValue())
                     : dataverseName;
-            libraryDatabase = MetadataUtil.resolveDatabase(libraryDatabase, libraryDataverseName);
-        } else {
-            libraryDatabase = MetadataUtil.resolveDatabase(libraryDatabase, dataverseName);
+            int libraryDatabaseNameIdx =
+                    adapterRecord.getType().getFieldIndex(MetadataRecordTypes.FIELD_NAME_LIBRARY_DATABASE_NAME);
+            if (libraryDatabaseNameIdx >= 0) {
+                libraryDatabase = ((AString) adapterRecord.getValueByPos(libraryDatabaseNameIdx)).getStringValue();
+            } else {
+                libraryDatabase = MetadataUtil.databaseFor(libraryDataverseName);
+            }
         }
 
         return new DatasourceAdapter(new AdapterIdentifier(databaseName, dataverseName, adapterName), adapterType,
@@ -162,7 +167,17 @@
             return;
         }
 
-        //TODO(DB): write library database name
+        //TODO(DB): change to check against something better
+        if (datasourceAdapterEntity.databaseNameIndex() >= 0) {
+            fieldName.reset();
+            aString.setValue(MetadataRecordTypes.FIELD_NAME_LIBRARY_DATABASE_NAME);
+            stringSerde.serialize(aString, fieldName.getDataOutput());
+            fieldValue.reset();
+            aString.setValue(adapter.getLibraryDatabaseName());
+            stringSerde.serialize(aString, fieldValue.getDataOutput());
+            recordBuilder.addField(fieldName, fieldValue);
+        }
+
         fieldName.reset();
         aString.setValue(MetadataRecordTypes.FIELD_NAME_LIBRARY_DATAVERSE_NAME);
         stringSerde.serialize(aString, fieldName.getDataOutput());
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
index f6e7a04..dc8b165 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
@@ -192,8 +192,8 @@
         IAType fieldType = dataType.getDatatype();
         if (fieldType.getTypeTag().isDerivedType()) {
             fieldValue.reset();
-            writeDerivedTypeRecord(dataType.getDataverseName(), (AbstractComplexType) fieldType,
-                    fieldValue.getDataOutput(), dataType.getIsAnonymous());
+            writeDerivedTypeRecord(dataType.getDatabaseName(), dataType.getDataverseName(),
+                    (AbstractComplexType) fieldType, fieldValue.getDataOutput(), dataType.getIsAnonymous());
             recordBuilder.addField(datatypeEntity.derivedIndex(), fieldValue);
         }
 
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FeedConnectionTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FeedConnectionTupleTranslator.java
index 4e17dfe..4d2eb8c 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FeedConnectionTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FeedConnectionTupleTranslator.java
@@ -82,6 +82,7 @@
                     (AUnorderedList) feedConnectionRecord.getValueByPos(feedConnectionEntity.appliedFunctionsIndex());
             cursor = afList.getCursor();
             while (cursor.next()) {
+                //TODO(DB): deal with database
                 String afValue = ((AString) cursor.get()).getStringValue();
                 int pos = afValue.lastIndexOf('.'); //TODO(MULTI_PART_DATAVERSE_NAME):REVISIT
                 String afDataverseCanonicalName = afValue.substring(0, pos);
@@ -206,6 +207,7 @@
         if (fc.getAppliedFunctions() != null) {
             List<FunctionSignature> appliedFunctions = fc.getAppliedFunctions();
             for (FunctionSignature af : appliedFunctions) {
+                //TODO(DB): deal with database
                 listEleBuffer.reset();
                 aString.setValue(af.getDataverseName().getCanonicalForm() + '.' + af.getName()); //TODO(MULTI_PART_DATAVERSE_NAME):REVISIT
                 stringSerde.serialize(aString, listEleBuffer.getDataOutput());
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FullTextFilterMetadataEntityTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FullTextFilterMetadataEntityTupleTranslator.java
index 61edecc..7f8611d 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FullTextFilterMetadataEntityTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FullTextFilterMetadataEntityTupleTranslator.java
@@ -65,19 +65,22 @@
 
     @Override
     protected FullTextFilterMetadataEntity createMetadataEntityFromARecord(ARecord aRecord) throws AlgebricksException {
+        AString dataverseName = (AString) aRecord.getValueByPos(fullTextFilterEntity.dataverseNameIndex());
+        DataverseName dataverse = DataverseName.createFromCanonicalForm(dataverseName.getStringValue());
         int databaseNameIndex = fullTextFilterEntity.databaseNameIndex();
         String databaseName;
         if (databaseNameIndex >= 0) {
             databaseName = ((AString) aRecord.getValueByPos(databaseNameIndex)).getStringValue();
+        } else {
+            databaseName = MetadataUtil.databaseFor(dataverse);
         }
-        AString dataverseName = (AString) aRecord.getValueByPos(fullTextFilterEntity.dataverseNameIndex());
         AString filterName = (AString) aRecord.getValueByPos(fullTextFilterEntity.filterNameIndex());
         AString filterTypeAString = (AString) aRecord.getValueByPos(fullTextFilterEntity.filterTypeIndex());
 
         FullTextFilterType filterType = FullTextFilterType.getEnumIgnoreCase(filterTypeAString.getStringValue());
         switch (filterType) {
             case STOPWORDS:
-                return createStopwordsFilterDescriptorFromARecord(dataverseName, filterName, aRecord);
+                return createStopwordsFilterDescriptorFromARecord(databaseName, dataverse, filterName, aRecord);
             case STEMMER:
             case SYNONYM:
             default:
@@ -85,9 +88,9 @@
         }
     }
 
-    public FullTextFilterMetadataEntity createStopwordsFilterDescriptorFromARecord(AString dataverseName, AString name,
-            ARecord aRecord) throws AlgebricksException {
-        ImmutableList.Builder<String> stopwordsBuilder = ImmutableList.<String> builder();
+    public FullTextFilterMetadataEntity createStopwordsFilterDescriptorFromARecord(String database,
+            DataverseName dataverse, AString name, ARecord aRecord) {
+        ImmutableList.Builder<String> stopwordsBuilder = ImmutableList.builder();
         int fieldIndex = aRecord.getType().getFieldIndex(FIELD_NAME_FULL_TEXT_STOPWORD_LIST);
         if (fieldIndex >= 0) {
             IACursor stopwordsCursor = ((AOrderedList) (aRecord.getValueByPos(fieldIndex))).getCursor();
@@ -96,8 +99,6 @@
             }
         }
 
-        DataverseName dataverse = DataverseName.createFromCanonicalForm(dataverseName.getStringValue());
-        String database = MetadataUtil.databaseFor(dataverse);
         StopwordsFullTextFilterDescriptor filterDescriptor = new StopwordsFullTextFilterDescriptor(database, dataverse,
                 name.getStringValue(), stopwordsBuilder.build());
         return new FullTextFilterMetadataEntity(filterDescriptor);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
index aad1eb1..14d7d49 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
@@ -19,9 +19,12 @@
 
 package org.apache.asterix.metadata.entitytupletranslators;
 
+import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATABASE_NAME;
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DATAVERSE_NAME;
+import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_LIBRARY_DATABASE_NAME;
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_LIBRARY_DATAVERSE_NAME;
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_NAME;
+import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_RETURN_TYPE_DATABASE_NAME;
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_RETURN_TYPE_DATAVERSE_NAME;
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_TYPE;
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_VALUE;
@@ -51,6 +54,7 @@
 import org.apache.asterix.common.functions.ExternalFunctionLanguage;
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.common.metadata.MetadataUtil;
 import org.apache.asterix.common.transactions.TxnId;
 import org.apache.asterix.metadata.MetadataNode;
@@ -71,7 +75,6 @@
 import org.apache.asterix.om.types.BuiltinTypeMap;
 import org.apache.asterix.om.types.TypeSignature;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.common.utils.Triple;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
@@ -97,7 +100,7 @@
             dependenciesListBuilder = new OrderedListBuilder();
             dependencyListBuilder = new OrderedListBuilder();
             dependencyNameListBuilder = new OrderedListBuilder();
-            dependencySubnames = new ArrayList<>(3);
+            dependencySubnames = new ArrayList<>(4);
             stringList = new AOrderedListType(BuiltinType.ASTRING, null);
             listOfLists = new AOrderedListType(new AOrderedListType(BuiltinType.ASTRING, null), null);
         }
@@ -126,7 +129,7 @@
             paramNames.add(((AString) paramNameCursor.get()).getStringValue());
         }
 
-        List<TypeSignature> paramTypes = getParamTypes(functionRecord, dataverseName);
+        List<TypeSignature> paramTypes = getParamTypes(functionRecord, databaseName, dataverseName);
 
         TypeSignature returnType;
         String returnTypeName =
@@ -134,8 +137,8 @@
         if (returnTypeName.isEmpty()) {
             returnType = null; // == any
         } else {
-            String returnTypeDataverseNameCanonical = getString(functionRecord, FIELD_NAME_RETURN_TYPE_DATAVERSE_NAME);
-            returnType = getTypeSignature(returnTypeName, returnTypeDataverseNameCanonical, dataverseName);
+            returnType = getTypeSignature(functionRecord, returnTypeName, FIELD_NAME_RETURN_TYPE_DATABASE_NAME,
+                    FIELD_NAME_RETURN_TYPE_DATAVERSE_NAME, databaseName, dataverseName);
         }
 
         String definition =
@@ -146,6 +149,7 @@
                 ((AString) functionRecord.getValueByPos(functionEntity.functionKindIndex())).getStringValue();
 
         Map<String, String> resources = null;
+        String libraryDatabaseName = null;
         DataverseName libraryDataverseName = null;
         String libraryName;
         List<String> externalIdentifier = null;
@@ -160,12 +164,17 @@
             libraryName = getString(functionRecord, MetadataRecordTypes.FIELD_NAME_LIBRARY_NAME);
             String libraryDataverseCanonicalName = getString(functionRecord, FIELD_NAME_LIBRARY_DATAVERSE_NAME);
             libraryDataverseName = DataverseName.createFromCanonicalForm(libraryDataverseCanonicalName);
+            libraryDatabaseName = getString(functionRecord, FIELD_NAME_LIBRARY_DATABASE_NAME);
+            if (libraryDatabaseName == null) {
+                libraryDatabaseName = MetadataUtil.databaseFor(libraryDataverseName);
+            }
             resources = getResources(functionRecord, FUNCTION_ARECORD_FUNCTION_RESOURCES_FIELD_NAME);
             definition = null;
         } else {
             // back-compat. get external identifier from function body
             libraryName = getString(functionRecord, FUNCTION_ARECORD_FUNCTION_LIBRARY_FIELD_NAME);
             if (libraryName != null) {
+                libraryDatabaseName = databaseName;
                 libraryDataverseName = dataverseName;
                 externalIdentifier =
                         decodeExternalIdentifierBackCompat(definition, ExternalFunctionLanguage.valueOf(language));
@@ -182,13 +191,12 @@
 
         IACursor dependenciesCursor =
                 ((AOrderedList) functionRecord.getValueByPos(functionEntity.functionDependenciesIndex())).getCursor();
-        List<List<Triple<DataverseName, String, String>>> dependencies = new ArrayList<>();
+        List<List<DependencyFullyQualifiedName>> dependencies = new ArrayList<>();
         while (dependenciesCursor.next()) {
-            List<Triple<DataverseName, String, String>> dependencyList = new ArrayList<>();
+            List<DependencyFullyQualifiedName> dependencyList = new ArrayList<>();
             IACursor qualifiedDependencyCursor = ((AOrderedList) dependenciesCursor.get()).getCursor();
             while (qualifiedDependencyCursor.next()) {
-                Triple<DataverseName, String, String> dependency =
-                        getDependency((AOrderedList) qualifiedDependencyCursor.get());
+                DependencyFullyQualifiedName dependency = getDependency((AOrderedList) qualifiedDependencyCursor.get());
                 dependencyList.add(dependency);
             }
             dependencies.add(dependencyList);
@@ -197,12 +205,12 @@
         FunctionSignature signature = new FunctionSignature(dataverseName, functionName, arity);
 
         return new Function(signature, paramNames, paramTypes, returnType, definition, functionKind, language,
-                libraryDataverseName, libraryName, externalIdentifier, nullCall, deterministic, resources,
-                dependencies);
+                libraryDatabaseName, libraryDataverseName, libraryName, externalIdentifier, nullCall, deterministic,
+                resources, dependencies);
     }
 
-    private List<TypeSignature> getParamTypes(ARecord functionRecord, DataverseName functionDataverseName)
-            throws AlgebricksException {
+    private List<TypeSignature> getParamTypes(ARecord functionRecord, String functionDatabaseName,
+            DataverseName functionDataverseName) throws AlgebricksException {
         ARecordType functionRecordType = functionRecord.getType();
         int paramTypesFieldIdx = functionRecordType.getFieldIndex(FUNCTION_ARECORD_FUNCTION_PARAMTYPES_FIELD_NAME);
         if (paramTypesFieldIdx < 0) {
@@ -222,8 +230,8 @@
                 case OBJECT:
                     ARecord paramTypeRecord = (ARecord) paramTypeObject;
                     String paramTypeName = getString(paramTypeRecord, FIELD_NAME_TYPE);
-                    String paramTypeDataverseNameCanonical = getString(paramTypeRecord, FIELD_NAME_DATAVERSE_NAME);
-                    paramType = getTypeSignature(paramTypeName, paramTypeDataverseNameCanonical, functionDataverseName);
+                    paramType = getTypeSignature(paramTypeRecord, paramTypeName, FIELD_NAME_DATABASE_NAME,
+                            FIELD_NAME_DATAVERSE_NAME, functionDatabaseName, functionDataverseName);
                     break;
                 default:
                     throw new AsterixException(ErrorCode.METADATA_ERROR, paramTypeObject.getType().getTypeName());
@@ -233,8 +241,8 @@
         return paramTypes;
     }
 
-    private TypeSignature getTypeSignature(String typeName, String typeDataverseNameCanonical,
-            DataverseName functionDataverseName) throws AlgebricksException {
+    private TypeSignature getTypeSignature(ARecord record, String typeName, String dbFieldName, String dvFieldName,
+            String functionDatabaseName, DataverseName functionDataverseName) throws AlgebricksException {
         // back-compat: handle "any"
         if (BuiltinType.ANY.getTypeName().equals(typeName)) {
             return null; // == any
@@ -243,8 +251,21 @@
         if (builtinType != null) {
             return new TypeSignature(builtinType);
         }
-        DataverseName typeDataverseName = typeDataverseNameCanonical == null ? functionDataverseName
-                : DataverseName.createFromCanonicalForm(typeDataverseNameCanonical);
+
+        String typeDatabaseName;
+        DataverseName typeDataverseName;
+        String typeDataverseNameCanonical = getString(record, dvFieldName);
+        if (typeDataverseNameCanonical == null) {
+            typeDataverseName = functionDataverseName;
+            typeDatabaseName = functionDatabaseName;
+        } else {
+            typeDataverseName = DataverseName.createFromCanonicalForm(typeDataverseNameCanonical);
+            typeDatabaseName = getString(record, dbFieldName);
+            if (typeDatabaseName == null) {
+                typeDatabaseName = MetadataUtil.databaseFor(typeDataverseName);
+            }
+        }
+
         return new TypeSignature(typeDataverseName, typeName);
     }
 
@@ -380,25 +401,12 @@
         // write field 8
         dependenciesListBuilder.reset((AOrderedListType) functionEntity.getRecordType().getFieldTypes()[functionEntity
                 .functionDependenciesIndex()]);
-        List<List<Triple<DataverseName, String, String>>> dependenciesList = function.getDependencies();
-        List<String> subNames = new ArrayList<>();
-        for (List<Triple<DataverseName, String, String>> dependencies : dependenciesList) {
+        List<List<DependencyFullyQualifiedName>> dependenciesList = function.getDependencies();
+        boolean writeDatabase = functionEntity.databaseNameIndex() >= 0;
+        for (List<DependencyFullyQualifiedName> dependencies : dependenciesList) {
             dependencyListBuilder.reset(listOfLists);
-            for (Triple<DataverseName, String, String> dependency : dependencies) {
-                dependencyNameListBuilder.reset(stringList);
-                subNames.clear();
-                getDependencySubNames(dependency, subNames);
-                for (String subName : subNames) {
-                    itemValue.reset();
-                    aString.setValue(subName);
-                    stringSerde.serialize(aString, itemValue.getDataOutput());
-                    dependencyNameListBuilder.addItem(itemValue);
-                }
-                itemValue.reset();
-                dependencyNameListBuilder.write(itemValue.getDataOutput(), true);
-                dependencyListBuilder.addItem(itemValue);
-
-            }
+            writeDeps(dependencyListBuilder, itemValue, dependencies, dependencyNameListBuilder, stringList,
+                    writeDatabase, aString, stringSerde);
             itemValue.reset();
             dependencyListBuilder.write(itemValue.getDataOutput(), true);
             dependenciesListBuilder.addItem(itemValue);
@@ -463,8 +471,8 @@
             if (paramType == null) {
                 nullSerde.serialize(ANull.NULL, itemValue.getDataOutput());
             } else {
-                writeTypeRecord(paramType.getDataverseName(), paramType.getName(), function.getDataverseName(),
-                        itemValue.getDataOutput());
+                writeTypeRecord(paramType.getDatabaseName(), paramType.getDataverseName(), paramType.getName(),
+                        function.getDatabaseName(), function.getDataverseName(), itemValue.getDataOutput());
             }
             listBuilder.addItem(itemValue);
         }
@@ -483,6 +491,16 @@
             return;
         }
 
+        if (functionEntity.databaseNameIndex() >= 0) {
+            fieldName.reset();
+            aString.setValue(FIELD_NAME_LIBRARY_DATABASE_NAME);
+            stringSerde.serialize(aString, fieldName.getDataOutput());
+            fieldValue.reset();
+            aString.setValue(function.getLibraryDatabaseName());
+            stringSerde.serialize(aString, fieldValue.getDataOutput());
+            recordBuilder.addField(fieldName, fieldValue);
+        }
+
         fieldName.reset();
         aString.setValue(FIELD_NAME_LIBRARY_DATAVERSE_NAME);
         stringSerde.serialize(aString, fieldName.getDataOutput());
@@ -522,9 +540,20 @@
             return;
         }
         DataverseName returnTypeDataverseName = returnType.getDataverseName();
-        if (returnTypeDataverseName == null || returnTypeDataverseName.equals(function.getDataverseName())) {
+        String returnTypeDatabaseName = returnType.getDatabaseName();
+        if (returnTypeDataverseName == null || (returnTypeDatabaseName.equals(function.getDatabaseName())
+                && returnTypeDataverseName.equals(function.getDataverseName()))) {
             return;
         }
+        if (functionEntity.databaseNameIndex() >= 0) {
+            fieldName.reset();
+            aString.setValue(FIELD_NAME_RETURN_TYPE_DATABASE_NAME);
+            stringSerde.serialize(aString, fieldName.getDataOutput());
+            fieldValue.reset();
+            aString.setValue(returnTypeDatabaseName);
+            stringSerde.serialize(aString, fieldValue.getDataOutput());
+            recordBuilder.addField(fieldName, fieldValue);
+        }
         fieldName.reset();
         aString.setValue(FIELD_NAME_RETURN_TYPE_DATAVERSE_NAME);
         stringSerde.serialize(aString, fieldName.getDataOutput());
@@ -585,8 +614,9 @@
         propertyRecordBuilder.write(out, true);
     }
 
-    public void writeTypeRecord(DataverseName typeDataverseName, String typeName, DataverseName functionDataverseName,
-            DataOutput out) throws HyracksDataException {
+    public void writeTypeRecord(String typeDatabaseName, DataverseName typeDataverseName, String typeName,
+            String functionDatabaseName, DataverseName functionDataverseName, DataOutput out)
+            throws HyracksDataException {
         IARecordBuilder propertyRecordBuilder = new RecordBuilder();
         propertyRecordBuilder.reset(DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE);
 
@@ -600,8 +630,19 @@
         propertyRecordBuilder.addField(fieldName, fieldValue);
 
         // write field "DataverseName"
-        boolean skipTypeDataverseName = typeDataverseName == null || typeDataverseName.equals(functionDataverseName);
+        boolean skipTypeDataverseName = typeDataverseName == null
+                || (typeDatabaseName.equals(functionDatabaseName) && typeDataverseName.equals(functionDataverseName));
         if (!skipTypeDataverseName) {
+            if (functionEntity.databaseNameIndex() >= 0) {
+                fieldName.reset();
+                aString.setValue(FIELD_NAME_DATABASE_NAME);
+                stringSerde.serialize(aString, fieldName.getDataOutput());
+                fieldValue.reset();
+                aString.setValue(typeDatabaseName);
+                stringSerde.serialize(aString, fieldValue.getDataOutput());
+                propertyRecordBuilder.addField(fieldName, fieldValue);
+            }
+
             fieldName.reset();
             aString.setValue(FIELD_NAME_DATAVERSE_NAME);
             stringSerde.serialize(aString, fieldName.getDataOutput());
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
index be80e93..453ccc1 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
@@ -323,14 +323,13 @@
             // from the record metadata
             Dataset dataset = metadataNode.getDataset(txnId, databaseName, dataverseName, datasetName);
             String datatypeName = dataset.getItemTypeName();
-            //TODO(DB): get 'database' of item type and meta type
             DataverseName datatypeDataverseName = dataset.getItemTypeDataverseName();
-            String datatypeDatabase = MetadataUtil.databaseFor(datatypeDataverseName);
+            String datatypeDatabase = dataset.getItemTypeDatabaseName();
             ARecordType recordDt = (ARecordType) metadataNode
                     .getDatatype(txnId, datatypeDatabase, datatypeDataverseName, datatypeName).getDatatype();
             String metatypeName = dataset.getMetaItemTypeName();
             DataverseName metatypeDataverseName = dataset.getMetaItemTypeDataverseName();
-            String metaTypeDatabase = MetadataUtil.databaseFor(metatypeDataverseName);
+            String metaTypeDatabase = dataset.getMetaItemTypeDatabaseName();
             ARecordType metaDt = null;
             if (metatypeName != null && metatypeDataverseName != null) {
                 metaDt = (ARecordType) metadataNode
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/SynonymTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/SynonymTupleTranslator.java
index a6a9e05..bb3ad28 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/SynonymTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/SynonymTupleTranslator.java
@@ -21,6 +21,7 @@
 
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.common.metadata.MetadataUtil;
+import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
 import org.apache.asterix.metadata.bootstrap.SynonymEntity;
 import org.apache.asterix.metadata.entities.Synonym;
 import org.apache.asterix.om.base.ARecord;
@@ -59,9 +60,19 @@
                 ((AString) synonymRecord.getValueByPos(synonymEntity.objectDataverseNameIndex())).getStringValue();
         DataverseName objectDataverseName = DataverseName.createFromCanonicalForm(objectDataverseCanonicalName);
 
+        String objectDatabaseName;
+        int objectDatabaseIdx =
+                synonymRecord.getType().getFieldIndex(MetadataRecordTypes.FIELD_NAME_OBJECT_DATABASE_NAME);
+        if (objectDatabaseIdx >= 0) {
+            objectDatabaseName = ((AString) synonymRecord.getValueByPos(objectDatabaseIdx)).getStringValue();
+        } else {
+            objectDatabaseName = MetadataUtil.databaseFor(objectDataverseName);
+        }
+
         String objectName = ((AString) synonymRecord.getValueByPos(synonymEntity.objectNameIndex())).getStringValue();
 
-        return new Synonym(databaseName, dataverseName, synonymName, objectDataverseName, objectName);
+        return new Synonym(databaseName, dataverseName, synonymName, objectDatabaseName, objectDataverseName,
+                objectName);
     }
 
     @Override
@@ -116,6 +127,9 @@
         stringSerde.serialize(aString, fieldValue.getDataOutput());
         recordBuilder.addField(synonymEntity.objectNameIndex(), fieldValue);
 
+        // write open fields
+        writeOpenFields(synonym);
+
         // write record
         recordBuilder.write(tupleBuilder.getDataOutput(), true);
         tupleBuilder.addFieldEndOffset();
@@ -123,4 +137,17 @@
         tuple.reset(tupleBuilder.getFieldEndOffsets(), tupleBuilder.getByteArray());
         return tuple;
     }
+
+    private void writeOpenFields(Synonym synonym) throws HyracksDataException {
+        //TODO(DB): should use something better
+        if (synonymEntity.databaseNameIndex() >= 0) {
+            fieldName.reset();
+            aString.setValue(MetadataRecordTypes.FIELD_NAME_OBJECT_DATABASE_NAME);
+            stringSerde.serialize(aString, fieldName.getDataOutput());
+            fieldValue.reset();
+            aString.setValue(synonym.getObjectDatabaseName());
+            stringSerde.serialize(aString, fieldValue.getDataOutput());
+            recordBuilder.addField(fieldName, fieldValue);
+        }
+    }
 }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtil.java
index 232ba33..484c2f7 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtil.java
@@ -80,6 +80,7 @@
             throw new AsterixException(ErrorCode.METADATA_ERROR, function.getSignature().toString());
         }
 
+        //TODO(DB): review
         return new ExternalScalarFunctionInfo(function.getSignature().createFunctionIdentifier(), paramTypes,
                 returnType, typeComputer, lang, function.getLibraryDataverseName(), function.getLibraryName(),
                 function.getExternalIdentifier(), function.getResources(), deterministic, function.getNullCall());
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
index d78e31d..3c6b63b 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
@@ -579,13 +579,16 @@
         return DATASET_INLINE_TYPE_PREFIX + typeChar + TYPE_NAME_DELIMITER + datasetName;
     }
 
-    public static boolean isDatasetInlineTypeName(Dataset dataset, DataverseName typeDataverseName, String typeName) {
-        return isInlineTypeName(dataset.getDataverseName(), typeDataverseName, typeName, DATASET_INLINE_TYPE_PREFIX);
+    public static boolean isDatasetInlineTypeName(Dataset dataset, String typeDatabaseName,
+            DataverseName typeDataverseName, String typeName) {
+        return isInlineTypeName(dataset.getDatabaseName(), dataset.getDataverseName(), typeDatabaseName,
+                typeDataverseName, typeName, DATASET_INLINE_TYPE_PREFIX);
     }
 
-    private static boolean isInlineTypeName(DataverseName entityDataverseName, DataverseName typeDataverseName,
-            String typeName, String inlineTypePrefix) {
-        return entityDataverseName.equals(typeDataverseName) && typeName.startsWith(inlineTypePrefix);
+    private static boolean isInlineTypeName(String entityDatabaseName, DataverseName entityDataverseName,
+            String typeDatabaseName, DataverseName typeDataverseName, String typeName, String inlineTypePrefix) {
+        return entityDatabaseName.equals(typeDatabaseName) && entityDataverseName.equals(typeDataverseName)
+                && typeName.startsWith(inlineTypePrefix);
     }
 
     public static String createFunctionParameterTypeName(String functionName, int arity, int parameterIndex) {
@@ -600,9 +603,10 @@
         return sb.toString();
     }
 
-    public static boolean isFunctionInlineTypeName(Function function, DataverseName typeDataverseName,
-            String typeName) {
-        return isInlineTypeName(function.getDataverseName(), typeDataverseName, typeName, FUNCTION_INLINE_TYPE_PREFIX);
+    public static boolean isFunctionInlineTypeName(Function function, String typeDatabaseName,
+            DataverseName typeDataverseName, String typeName) {
+        return isInlineTypeName(function.getDatabaseName(), function.getDataverseName(), typeDatabaseName,
+                typeDataverseName, typeName, FUNCTION_INLINE_TYPE_PREFIX);
     }
 
     public static String getFullyQualifiedDisplayName(DataverseName dataverseName, String typeName) {
@@ -615,16 +619,16 @@
     public static List<TypeSignature> getFunctionInlineTypes(Function function) {
         List<TypeSignature> inlineTypes = Collections.emptyList();
         TypeSignature returnType = function.getReturnType();
-        if (returnType != null
-                && isFunctionInlineTypeName(function, returnType.getDataverseName(), returnType.getName())) {
+        if (returnType != null && isFunctionInlineTypeName(function, returnType.getDatabaseName(),
+                returnType.getDataverseName(), returnType.getName())) {
             inlineTypes = new ArrayList<>();
             inlineTypes.add(returnType);
         }
         List<TypeSignature> parameterTypes = function.getParameterTypes();
         if (parameterTypes != null) {
             for (TypeSignature parameterType : parameterTypes) {
-                if (parameterType != null && isFunctionInlineTypeName(function, parameterType.getDataverseName(),
-                        parameterType.getName())) {
+                if (parameterType != null && isFunctionInlineTypeName(function, parameterType.getDatabaseName(),
+                        parameterType.getDataverseName(), parameterType.getName())) {
                     if (inlineTypes.isEmpty()) {
                         inlineTypes = new ArrayList<>();
                     }
diff --git a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/DatasetTupleTranslatorTest.java b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/DatasetTupleTranslatorTest.java
index 7bf8f6a..2832470 100644
--- a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/DatasetTupleTranslatorTest.java
+++ b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/DatasetTupleTranslatorTest.java
@@ -56,11 +56,15 @@
                     Collections.singletonList(BuiltinType.AINT64), false, null, null);
 
             DataverseName dv = DataverseName.createSinglePartName("test");
+            DataverseName itemTypeDv = DataverseName.createSinglePartName("foo");
+            DataverseName metaTypeDv = DataverseName.createSinglePartName("CB");
             String db = MetadataUtil.databaseFor(dv);
-            Dataset dataset = new Dataset(db, dv, "log", DataverseName.createSinglePartName("foo"), "LogType",
-                    DataverseName.createSinglePartName("CB"), "MetaType", "DEFAULT_NG_ALL_NODES", "prefix",
-                    compactionPolicyProperties, details, Collections.emptyMap(), DatasetType.INTERNAL, 115, 0,
-                    CompressionManager.NONE, DatasetFormatInfo.SYSTEM_DEFAULT);
+            String itemTypeDb = MetadataUtil.databaseFor(itemTypeDv);
+            String metaTypeDb = MetadataUtil.databaseFor(metaTypeDv);
+            Dataset dataset = new Dataset(db, dv, "log", itemTypeDb, itemTypeDv, "LogType", metaTypeDb, metaTypeDv,
+                    "MetaType", "DEFAULT_NG_ALL_NODES", "prefix", compactionPolicyProperties, details,
+                    Collections.emptyMap(), DatasetType.INTERNAL, 115, 0, CompressionManager.NONE,
+                    DatasetFormatInfo.SYSTEM_DEFAULT);
             DatasetTupleTranslator dtTranslator = new DatasetTupleTranslator(true, DatasetEntity.of(false));
             ITupleReference tuple = dtTranslator.getTupleFromMetadataEntity(dataset);
             Dataset deserializedDataset = dtTranslator.getMetadataEntityFromTuple(tuple);
diff --git a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java
index 0e25177..00f188d 100644
--- a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java
+++ b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java
@@ -71,9 +71,12 @@
             DataverseName dvFoo = DataverseName.createSinglePartName("foo");
             DataverseName dvCB = DataverseName.createSinglePartName("CB");
             String dvTestDatabase = MetadataUtil.databaseFor(dvTest);
-            Dataset dataset = new Dataset(dvTestDatabase, dvTest, "d1", dvFoo, "LogType", dvCB, "MetaType",
-                    "DEFAULT_NG_ALL_NODES", "prefix", compactionPolicyProperties, details, Collections.emptyMap(),
-                    DatasetType.INTERNAL, 115, 0, CompressionManager.NONE, DatasetFormatInfo.SYSTEM_DEFAULT);
+            String itemTypeDatabase = MetadataUtil.databaseFor(dvFoo);
+            String metaTypeDatabase = MetadataUtil.databaseFor(dvCB);
+            Dataset dataset = new Dataset(dvTestDatabase, dvTest, "d1", itemTypeDatabase, dvFoo, "LogType",
+                    metaTypeDatabase, dvCB, "MetaType", "DEFAULT_NG_ALL_NODES", "prefix", compactionPolicyProperties,
+                    details, Collections.emptyMap(), DatasetType.INTERNAL, 115, 0, CompressionManager.NONE,
+                    DatasetFormatInfo.SYSTEM_DEFAULT);
 
             Index index = new Index(dvTestDatabase, dvTest, "d1", "i1", IndexType.BTREE,
                     Collections.singletonList(Collections.singletonList("row_id")),
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeSignature.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeSignature.java
index 682ec6a..e08eff5 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeSignature.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeSignature.java
@@ -22,6 +22,7 @@
 import java.util.Objects;
 
 import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.MetadataUtil;
 
 public class TypeSignature implements Serializable {
 
@@ -45,7 +46,8 @@
             return false;
         } else {
             TypeSignature f = ((TypeSignature) o);
-            return Objects.equals(dataverseName, f.getDataverseName()) && name.equals(f.getName());
+            return Objects.equals(getDatabaseName(), f.getDatabaseName())
+                    && Objects.equals(dataverseName, f.getDataverseName()) && name.equals(f.getName());
         }
     }
 
@@ -56,7 +58,11 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(dataverseName, name);
+        return Objects.hash(getDatabaseName(), dataverseName, name);
+    }
+
+    public String getDatabaseName() {
+        return MetadataUtil.databaseFor(dataverseName);
     }
 
     public DataverseName getDataverseName() {
