繁体   English   中英

用新的外键ID复制数据的方法

[英]way to copy data with new foreign key ids

在多租户系统中,有一个基本租户,它说是tenantId = 1,其中有一组填充有租户1数据的表。 每次创建新租户时,系统首先将数据从基本租户复制到新租户(正在创建的租户)中。 说新的租户ID = 2。

租户ID = 1的表如说

ROLE
id   | name      | tenant_id
1    | AdminRole | 1

说每个租户都可以直接使用“ AdminRole”-稍后他们可以更改其名称,从提供的名称“ AdminRole”更改为“ Administrator”-角色特定于租户的原因。 该角色表只是一个示例,在将基本租户复制到新租户时,还有其他此类情况。 首先创建新租户时,角色表如下所示

ROLE 
id  | name          |tenant_id
1   | AdminRole     | 1
2   | AdminRole     | 2

成功创建租户2后,租户2可能会更改为“管理员”

ROLE 
id  | name            |tenant_id
1   | AdminRole       | 1
2   | Administrator   | 2

这不是具有静态数据的查找表。 这些数据与租户无关

现在还有其他表将角色称为外键。 tenant_id = 1的数据将具有正确的role_id(= 1),因为该数据已存在。

现在,对于tenant_id = 2-系统将必须知道如何将引用角色表(如FK)的其他表中的数据链接到role_id = 2。 除非我维护某种类型的Map(租户1中的role_id-租户2中的role_id),否则我没有办法让role_id = 2用于复制给租户2的新数据中。

例如,当复制来自租户1的数据并且引用了role_id时,我将必须知道租户2的新role_id。

val roleMap = Map(1 -> 2) //1= role_id from tenant 1, 2= role_id from tenant 2

and then every time role_id is being referred while copying tenant 1 data into tenant 2 , it lookup what new role id it should put into tenant 2 data. this approach doesn't look like a best way to deal with this situation. All this is being done at an application level not DB level. What are better ways to deal with this?

ps在这个问题中没有特定的Scala,但是标记Scala的原因是查看是否有使用语言/其他技巧的巧妙方法来处理此问题,因为解决方案处于应用程序级别而不是数据库级别。

我认为您应该将要查找的键添加为表中的额外行。

 id |     name      | key | tenant_id 
----+---------------+-----+-----------
  1 | AdminRole     |   1 |         1
  2 | Administrator |   1 |         2

在您的“分配”图中,角色的密钥而不是ID。 因此,对于每个租户,管理员角色的密钥保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM