其他分享
首页 > 其他分享> > 有人可以帮助我了解外键更新和删除与关系名称吗?

有人可以帮助我了解外键更新和删除与关系名称吗?

作者:互联网

目前,我正在研究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