Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据模型多租户站点_Sql_Data Modeling_Multi Tenant - Fatal编程技术网

Sql 数据模型多租户站点

Sql 数据模型多租户站点,sql,data-modeling,multi-tenant,Sql,Data Modeling,Multi Tenant,我只是想让这里的一些有能力的人来运行这个模型 这个场景是我制作了一个ASP MVC 3网络商店,它将被多家公司使用 一个代码库,多个站点 例:我有: company1.acme.com company2.acme.com 它们都应该使用相同的代码库,但对于用户来说,网店中的数据应该是不同的 所以我制作了这个简单的数据模型: 在Site中,我存储了有关该公司的所有信息,例如Host=company1 在所有表中使用Host作为主键是否正确 如何改进这种模式 更新: 如果主机不是密钥的一部分,

我只是想让这里的一些有能力的人来运行这个模型

这个场景是我制作了一个ASP MVC 3网络商店,它将被多家公司使用

一个代码库,多个站点

例:我有:

  • 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号。(因为那将是灾难性的。)