
[英]How to copy parent and child data from one database to another while assigning the newly created parent ids in the foreign key column of child tables?
[英]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.