2011-10-26 90 views
1

我只是想通过这里的一些有能力的人来运行这个模型。数据模型多租户网站

这种情况是,我做了一个ASP MVC 3网店,这将是由多家公司使用。

一个代码库,多个网站。

Ex。我有:

  • company1.acme.com
  • company2.acme.com

他们都应该使用相同的代码库,但对于用户在网络商店中的数据应该是不同的。

所以我做了这个简单的数据模型: enter image description here

Site我店所有关于该公司,前的信息。主机= company1。

在所有表格中使用Host作为PK是否正确?

这个模型如何改进?

UPDATE:对所有表 enter image description here

回答

1

我添加了一个“多租户”标签为您服务。

This SO answer有一个简明的结构方法的概要,并链接到一个文章,有更多的细节。

+0

谢谢!我几乎决定采用'共享数据库,共享模式'的方法。现在我只想看看我的模型是否足够好。正如我上面评论的,我希望每个Tennant都有自己的编号系列,至少可以有定居点和物品,因为我看到我的模型涵盖了这个系列,但这是最佳做法吗? – Martin

+0

我认为您的结算ID号码和项目ID号码的覆盖范围是好的。您可以编写函数来自动填充它们。但是你需要删除很多名为“ID”的列。联合总是需要包含租户标识符(在您的情况下为“主机”),以防止将一个租户的数据泄漏到另一个租户的查询中。 –

+0

不完全确定我是否得到了你的意思,但是你需要删除很多名为“ID”的列。我更新了我的模型(上图),重命名了所有ID。但是它自己的模型几乎是一样的。但是,如果你没有看到任何悬念,我想我会选择这种模式。 – Martin

2

存储主机冗余/非规范化的,如果它是不是关键的一部分。

SettlementSettlementLine为例。 SettlementLine只需要知道约SettlementID,并可以通过加入Settlement表获得主机。

至少如果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 
+0

感谢您的回答。我想要的是我可能希望每个公司都有自己的定居点和结算线号码系列。因此,ID 1可以是公司1和公司2的ID,那么我需要在这些表中的主机作为PK。但我不知道这是否是最好的解决方案。 – Martin

+0

@Martin - 您提供的系统分配值是否是“ID”列,如IDENTITY或用户分配的值? – StingyJack

+0

我还没有决定,最简单的就是自动分配它。但我也可能希望客户至少在物品上创建自己的ID。结算可以是一个自动分配的ID,但我仍想分开ID,这样公司1的结算ID为1,公司2的结算ID为1. – Martin