我的应用程序拥有不同级别的用户,管理员用户和组织用户。
管理员用户存储在代理数据库中,并且由于每个组织都是不同的数据库,因此组织用户存储在他们自己的数据库中。 我在组织数据库中有一个表,我希望在每个组织数据库中使用代理用户表中的用户ID作为外键。 我怎样才能创建这两个表之间的关系,即使它们位于不同的dbs中?
答案 0 :(得分:0)
如前面的评论中所述(由于您拥有单独的数据库,因此将模式替换为数据库),在不同的数据库中无法使用外键引用。但是,您可以在不同数据库的表中应用连接。要从任何数据库访问数据,您只需使用database.table_name
等数据库名称更新查询。只需确保用户拥有两个数据库的权限。
您将无法在数据库级别维护外键约束,但您可以创建一个列,该列将引用列的值存储在另一个数据库中(仅存储未实际引用的值)。稍后检索时使用此列进行连接。这是一个例子:
假设有2个数据库organization
和broker
。用户some_user_name
拥有两个数据库的权限。让我们在users
数据库中创建一个表broker
:
CREATE TABLE "users" (
"user_id" INT NULL,
"user_name" VARCHAR(50) NULL
);
插入虚拟记录:
INSERT INTO users (user_id, user_name) values (1, 'Kamal');
现在,让我们在organization
数据库中创建表格:
CREATE TABLE "app_log" (
"log_id" INT NULL,
"log_message" VARCHAR(100) NULL,
"user_id" INT NULL,
"log_date" DATETIME NULL
);
插入虚拟记录:
INSERT INTO app_log ("log_id", "log_message", "user_id", "log_date") VALUES ('1', 'sample log message', '1', '2018-01-26T06:50:48.000');
现在,我们可以在user_id
列上使用联接查询:
SELECT u.user_name, l.log_message
FROM broker.users u INNER JOIN organization.app_log l ON u.user_id = l.user_id
WHERE l.log_date >= CONVERT(DATETIME, '2018-01-26', 102);
希望这可以帮助你!!