有人可以帮助我了解外键更新和删除与关系名称吗?
作者:互联网
目前,我正在研究MySQL InnoDB中用户数据库的最开始.因此,我将使用它来帮助演示.
Users Roles
--------------- ---------------
userid (bigint) PK >roleid (tinyint) PK
email (varchar) rolename (varchar)
username (varchar)
password (char)
>roleid (tinyint) FK
created (timestamp)
现在,我正在尝试根据Roleid在角色和用户之间建立一对多关系.为此,我认为在“更新级联”和“删除限制”上.
这就是我应该做的,我不确定这是否正确.但是,我想对此有更好的了解.
假设我想一对一创建,那么看起来就像在UPDATE Restrict和On DELETE Restrict上那样吗?
抱歉,我在这里完全感到困惑,无法找到分解关系模型的不同设置的教程,博客或解释.有人可以根据我在这里的介绍来解释这些类型以及其他类型(多对多,多对一)吗?
解决方法:
一个角色可以有许多与该角色相关联的用户.整个关系在引用ROLES表的USERS表上用外键物理表示.
外键约束中的ON UPDATE和ON DELETE选项有助于在数据库中强制执行“引用完整性”,但是它们根本没有指定USERS和ROLES实体之间的关系.
如果我使用ON DELETE RESTRICT创建此外键,当我尝试从ROERS表中删除在USERS表上使用该键的记录时,我会收到错误消息.这与存在的逻辑关系类型无关,它只是一个约束.
多对多关系无法使用一个外键建模.从逻辑上讲,如果用户可以具有多个角色,则将角色ID存储在users表上是没有意义的.
在这种情况下,您将在两者之间创建一个表,并将userid和roleid列放在该表上,并使用外键将它们分别连接到用户和角色.
USERS USERS_ROLES ROLES
userid PK - userid FK
roleid FK - roleid PK
Here’s the MYSQL manual pages关于外键约束.这是一个很好的参考,并解释了每个选项的含义.
编辑:
这涉及到一对多和多对多关系类型.您很少会在数据库中看到一对一的类型(在这种情况下,合并表是有意义的).有时为了性能,您会使用它.在这些情况下,通常两个表上的主键都应该相同:
USERS USERS_EXTENDED_ATTRIBUTES
userid PK - userid PK FK
对于1-1关系,每个表上仅应存在一个用户ID.
标签:relational-database,foreign-keys,sql,mysql 来源: https://codeday.me/bug/20191101/1981709.html