只是好奇解决以下问题的最佳做法是什么。我有机构,帐户和用户表。机构和账户有一对多的关系。机构和用户之间存在一对多的关系。用户和帐户具有多对多关系,或者他们可以拥有多对多(或*)帐户。这意味着,可以将用户指定给所有帐户,以及添加到用户可以访问的机构中的任何新帐户,而无需明确添加关系。
答案 0 :(得分:2)
我会这样做:
Institutions
InstitutionID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
Name VARCHAR(255)
Users
UserID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
Username VARCHAR(255) NOT NULL
InstitutionID INT NOT NULL
Accounts
AccountID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
Account VARCHAR(255) NOT NULL
InstitutionID INT NOT NULL
Users_Accounts
Users_AccountsID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
UserID INT NOT NULL
AccountID INT NULL
在NULL
表中具有Users_Accounts
条目的UserID具有全局(*)访问权限。这样,您就可以确定任何帐户和/或用户的机构,以及他们的权限。
编辑:不同表中具有相同名称的列表示外键。如果你没有重负荷,请使用它们。
答案 1 :(得分:1)
让Accounts
拥有Institutions
的外键。
让Users
拥有Institutions
的外键。
在Users
帐户上设置一个标记,表明他们可以访问Accounts
上的所有Institution
。
为Users
到Accounts
创建多对多映射表。仅当User
未设置其标记以便他们可以访问Accounts
上的所有Institution
时,才会使用此选项。
这可以解决您的问题。
答案 2 :(得分:0)
将映射表用于多对多关系。如果用户有多个帐户,请创建一个包含两列的users_to_account映射表,一列包含帐户外键,另一列包含用户外键,我甚至可以将它们组合成一个复合主键:
users account ----- ---------- 1 5 1 10 2 5 2 10
因此,帐户5和10都映射到用户1和2。