2011-03-14 56 views
0

我正在构建一个可以拥有多个帐户的多个用户的应用程序。例如,一个帐户可以是ABC公司。用户X,Y和Z是此帐户的成员。每个帐户都应有自己的独立实例,以便如果公司ABC创建新的数据库项目,则只应由公司ABC显示和管理。我的问题是这样的:我必须在数据库中的每个表中对帐户进行明确的外键引用吗?例如:管理SQL中的多个帐户和用户以及与帐户关联的资产

表 - ACCOUNTS

ACCOUNT_ID | ACCOUNT_NAME 
1234  | Company ABC 

表 - PAGES

PAGE_ID | PAGE_TITLE | ACCOUNT_ID 
987  | My Page | 1234 

表 - 资产

ASSET_ID | ASSET_TITLE | ACCOUNT_ID 
4443  | My Asset | 1234 

表 - 群

GROUP_ID | GROUP_NAME | ACCOUNT_ID 
8888  | Admins  | 1234 

等?

这对我来说似乎是错误的,因为某些原因,我觉得有一种更好的方式,我没有想到。我有将近75张桌子,我需要这样做。这是正确的吗?

+0

对于一对多关系,最简单的方法是将帐号ID添加到子表中。 – 2011-03-14 17:01:50

回答

1

我不得不面对这种情况,很可能您必须在许多表(尽管不一定全部)包含ACCOUNT_ID列。另一种方法是为每个帐户设置不同的数据库。这可能会导致维护问题,因为您必须确保对DDL和DML的所有更改得到普遍应用。它也可能导致性能问题。将列应用于每个表格确实(略微)使查询连接和数据所需的视图复杂化,但在性能和空间方面,连接的成本通常很低(或没有)。独立数据库的一个优点是,它可能是一个更安全的解决方案 - 隔离所有其他帐户。

我建议不是所有的表都需要帐号列。这需要取决于访问路径。 - 例如,我有我的表中表达的子/超类型关系。每个子类型和每个超类型都有自己的表格。对所有子类型的访问只能通过超类型,所以超类型需要引用ACCOUNTS,但子类型不需要。

编辑: My question并在其上的答案和评论,关于这种类型的领导到我的上述结论的设计问题。

+0

谢谢克里斯。您的回复和原始问题非常有用,并确认了我选择的方向。 – Freddie 2011-03-26 17:18:49