我正在构建一个可以拥有来自多个帐户的多个用户的应用程序。例如,帐户可以是公司 ABC。用户 X、Y 和 Z 是该帐户的成员。每个帐户都应该有自己单独的实例,以便如果公司 ABC 创建新的数据库项目,则该项目只能由公司 ABC 可见和管理。我的问题是:我是否必须对数据库中每个表中的帐户进行显式外键引用?例如:
表 - 帐户
ACCOUNT_ID | ACCOUNT_NAME
1234 | Company ABC
表格 - 页
PAGE_ID | PAGE_TITLE | ACCOUNT_ID
987 | My Page | 1234
表 - Assets
ASSET_ID | ASSET_TITLE | ACCOUNT_ID
4443 | My Asset | 1234
表 - 组
GROUP_ID | GROUP_NAME | ACCOUNT_ID
8888 | Admins | 1234
等等?
出于某种原因,这对我来说似乎是错误的,而且我觉得还有一种我没有想到的更好的方法。我有近 75 张 table 需要执行此操作。这是正确的吗?
最佳答案
我不得不处理这种情况,并且您可能必须在许多(但不一定是全部)表中包含 ACCOUNT_ID 列。另一种方法是为每个帐户建立单独的数据库。这可能会导致维护问题,因为您必须确保 DDL 和 DML 的所有更改都得到普遍应用。它还可能导致性能问题。将列应用于每个表确实(稍微)使查询连接和数据所需的 View 变得复杂,但就性能和空间而言,连接通常成本较低(或没有)。单独数据库的一个优点是它可能是一种更安全的解决方案 - 将每个帐户与所有其他帐户隔离开来。
我建议并非所有的表都需要帐户列。对此的需求取决于访问路径。 - 例如,我的表中表达了子/父类(super class)型关系。每个子类型和每个父类(super class)型都有自己的表。只能通过父类型访问所有子类型,因此父类型需要引用 ACCOUNTS,但子类型不需要。
编辑: My question以及关于此类设计问题的答案和评论得出了我的上述结论。
关于mysql - 在 SQL 中管理多个帐户和用户以及与帐户关联的 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5300982/