mysql - 在 SQL 中管理多个帐户和用户以及与帐户关联的 Assets

标签 mysql sql database accounts

我正在构建一个可以拥有来自多个帐户的多个用户的应用程序。例如,帐户可以是公司 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/

相关文章:

mysql - Yii 按关系条件过滤模型的范围

sql - PostgreSQL:如何使用连接编写查询?

sql - TEXT 字段的实际大小 (MySQL)

mysql - mysql连接查询结果中的条件字段

sql - 从/向数据库删除+插入数据

database - Oracle Text - 索引 BLOB 字段(包含 PDF 数据)

c# - 如何同时运行两个或多个sql查询?

mysql - 无方法错误 : undefined method `more_results' for #<Mysql>

mysql - 为什么在 WHERE 或 LEFT JOIN 中放置条件时出现 "zero"结果 COUNT 或不出现?

sql - 为什么我会收到 SQL 错误 42x80?