管理SQL中的多个帐户和用户以及与帐户关联的资产

时间:2011-03-14 15:48:37

标签: mysql sql database accounts

我正在构建一个可以拥有多个帐户的多个用户的应用程序。例如,帐户可以是公司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个表需要这样做。这是对的吗?

1 个答案:

答案 0 :(得分:1)

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

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

修改 My question以及关于此类设计问题的答案和评论导致了我的上述结论。