0

我正在构建一个可以拥有来自多个帐户的多个用户的应用程序。例如,一个帐户可以是公司 ABC。用户 X、Y 和 Z 是此帐户的成员。每个帐户都应该有自己的单独实例,这样如果公司 ABC 创建一个新的数据库项目,它应该只能由公司 ABC 可见和可管理。我的问题是:我是否必须对数据库中每个表中的帐户进行显式外键引用?例如:

表 - 帐户

ACCOUNT_ID | ACCOUNT_NAME
1234       | Company ABC

表 - 页

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

ETC?

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

4

1 回答 1

1

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

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

编辑: 关于此类设计问题的我的问题以及对此的答案和评论导致了我的上述结论。

于 2011-03-15T14:21:49.510 回答