我正在构建一个可以拥有多个帐户的多个用户的应用程序。例如,帐户可以是公司ABC。用户X,Y和Z是此帐户的成员。每个帐户都应该有自己独立的实例,这样如果公司ABC创建一个新的数据库项目,它应该只有公司ABC可见和可管理。我的问题是:我是否必须在数据库的每个表中对帐户进行显式的外键引用?例如:
表 - 帐户
ACCOUNT_ID | ACCOUNT_NAME
1234 | Company ABC
TABLE - 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 :(得分:1)
我不得不处理这种情况,很可能您必须在许多(尽管不一定是全部)表中包含ACCOUNT_ID列。另一种方法是为每个帐户分别设置数据库。这可能会导致维护问题,因为您必须确保对DDL和DML的所有更改都得到普遍应用。它还可能导致性能问题。将列应用于每个表会使(稍微)复杂查询连接和数据所需的视图,但是在性能和空间方面,连接通常很少(或没有)成本。独立数据库的一个优点是它可能是一个更安全的解决方案 - 为所有其他数据库中的每个帐户提供隔离。
我建议您的所有表格都不需要帐户列。对此的需求取决于访问路径。 - 例如,我在表格中表达了子/超类型关系。每个子类型和每个超类型都有自己的表。只能通过超类型访问所有子类型,因此超类型需要引用ACCOUNTS,但子类型不需要。
修改强> My question以及关于此类设计问题的答案和评论导致了我的上述结论。