我为用户提供了一个表USER
(USER_ID,PASSWORD,NAME,...)和一个表ACCESS_ROLES
,每个用户都可以拥有一个ACCESS_ROLE
(一对一) ONE)。
哪个表有外键?
我会将USER_ID
放入ACCESS_ROLES
表中。有没有最佳实践方法?
答案 0 :(得分:4)
如果您有一组固定的访问角色和任意数量的用户,其中为用户分配了一个且只有一个访问角色,并且可以为任意数量的用户分配给定的访问规则[这就是我解释您的问题的方式],然后你会在你的USERS表中放一个像“AccessRoleId”这样的列,并在ACCESS_ROLES中添加一个外键约束。
答案 1 :(得分:2)
由于您将建立一对一的关系,因此Philip Kelley建议的解决方案更好。只需在名为USER
的{{1}}中添加一个新列,然后在access_role_id
表上执行外键,如下所示:
USER
请勿按照建议将ALTER TABLE USER ADD CONSTRAINT fk_access_roles_users
FOREIGN KEY (access_role_id)
REFERENCES ACCESS_ROLES(access_role_id);
添加到USER_ID
表格中。
答案 2 :(得分:2)
然后:
注意:外键“父”列必须具有唯一约束。如果每个ACCESSROLE有多个用户,则FK 必须从USERS到ACCESSROLES
在SQL Server中
ALTER TABLE USERS WITH CHECK ADD
CONSTRAINT FK_USERS_ACCESS_ROLES FOREIGN KEY (ACCESS_ROLE) REFERENCES ACCESS_ROLES (ACCESS_ROLE /*PK?*/)
答案 3 :(得分:0)
如果您有一对一映射,我会将外键放入您将在大多数时间查询的表中。
答案 4 :(得分:0)
您可以向ACCESS_ROLES
添加外键以及以下内容强制执行一对一映射
UNIQUE (ACCESS_ROLES_ID, USER_ID)
答案 5 :(得分:0)
有没有最佳做法?
是的,有!
与primary key
类似,foreign key
也是放在表格中一列或多列上的constraint
类型。
foreign key
在另一个表中的键列和相关列之间建立链接。 (您还可以将外键列链接到同一个表中的列。)
包含外键的表被视为子表,外键引用的表是父表。
要点
foreign key
必须引用primary key
或unique constraint
,但该引用可以位于同一个表格中,也可以位于不同的表格中。foreign key
必须与引用的约束中的列数具有相同的列数,并且数据类型必须在相应的列之间匹配。Primary key
不同,Foreign key
列可以包含NULL
个值。答案 6 :(得分:-1)
我不确定我是否理解这个问题:我认为access_table应该有外键。