Sql 数据模型多租户站点
我只是想让这里的一些有能力的人来运行这个模型 这个场景是我制作了一个ASP MVC 3网络商店,它将被多家公司使用 一个代码库,多个站点 例:我有:Sql 数据模型多租户站点,sql,data-modeling,multi-tenant,Sql,Data Modeling,Multi Tenant,我只是想让这里的一些有能力的人来运行这个模型 这个场景是我制作了一个ASP MVC 3网络商店,它将被多家公司使用 一个代码库,多个站点 例:我有: company1.acme.com company2.acme.com 它们都应该使用相同的代码库,但对于用户来说,网店中的数据应该是不同的 所以我制作了这个简单的数据模型: 在Site中,我存储了有关该公司的所有信息,例如Host=company1 在所有表中使用Host作为主键是否正确 如何改进这种模式 更新: 如果主机不是密钥的一部分,
- company1.acme.com
- company2.acme.com
Site
中,我存储了有关该公司的所有信息,例如Host=company1
在所有表中使用Host
作为主键是否正确
如何改进这种模式
更新:
如果主机不是密钥的一部分,则在所有表上存储主机是冗余的/非规范化的 以
结算
和结算行
为例SettlementLine
只需知道SettlementID
即可通过加入SettlementLine
表获得主机
至少在ID
为自动编号的情况下,主机不应位于其他表的PK
(仅FK
)中
我想要桌子
Site
----
Host (PK)
Name
Item
----
ID Autonumber PK
Host (FK Site.Host)
Name
SettlementLine
--------------
ID Autonumber PK
SettlementID (FK Settlement.ID)
ItemID (FK Item.ID)
Settlement
----------
ID Autonumber PK
Host (FK Site.Host, Profile.Host)
UserName (FK Profile.UserName)
Profile
-------
UserName PK
Host PK (FK Site.Host)
Name
我为您添加了一个“多租户”标签
有一个结构方法的简明概要,并有一个链接,指向一篇有更多细节的文章。谢谢你的回答。我想的是,我可能希望每家公司都有自己的结算编号系列和结算额度。所以ID1可以是company1和company2的ID,那么我需要在这些表中使用Host作为PK。但我不知道这是否是最好的解决方案。@Martin-您建议的“ID”列是系统分配的值,如标识,还是用户分配的值?我还没有决定,最简单的方法是自动分配。但我也可能希望客户至少在商品上创建自己的ID。结算可以是自动分配的ID,但我仍然希望将ID分开,以便公司1有结算ID 1,公司2有结算ID 1。@Martin-好的,所以设置一个系统ID(标识),将其用于关系目的,并允许他们在行的另一列中创建一些用户指定的值。存储主机(租户)在一个共享所有内容的多租户数据库中,每个表都不是冗余的;这是绝对必要的。它也是关键的一部分。(这就是为什么每个表中的ID号在这里都是个坏主意,简单地重命名它们也是个坏主意。)谢谢!我几乎决定采用
共享数据库、共享模式。
方法。现在我只是想验证我的模型是否足够好。正如我在上面所评论的,我希望每个坦能至少有自己的结算和项目编号系列,因为我认为我的模型涵盖了这一点,但这是最佳实践吗?我认为您对结算id编号和项目id编号的覆盖是可以的。您可以编写函数来自动填充它们。但是您需要删除许多名为“ID”的列。联接始终需要包含租户标识符(“主机”,在您的情况下),以防止将一个租户的数据溢出到另一个租户的查询中。不完全确定我是否理解您所说的,但您需要删除许多名为“ID”
的列。我已经更新了我的模型(如上),重命名了所有的ID。但是它自己的模型几乎是一样的。但我想我会选择这种模式,如果你没有看到任何大的障碍,“删除”和“重命名”是不同的事情。请看该链接中的文章。看看他们的桌子是怎么建的?没有要加入的行ID号。(因为那将是灾难性的。)