mysql - 使用外键在表中插入数据库

标签 mysql

我有下表-

  1. 公司(cid,comp_name) cid 是 pk
  2. 角色(rid,role_name)rid id pk
  3. user(uid,user_name,cid,rid) uid id pk, cid 为 fk,rid 为 fk

我想以这样一种方式在用户表中输入值,即可以为一个用户分配多个 cid 和 rod,并且可以为多个用户分配相同的 cid 和/或 rod。但是,如果用户表的值 user_name='A', cid='1', rod='1';不能再次插入相同的记录,cid 或rid 必须发生变化。

我正在编写这段代码,但它不起作用:

CREATE TABLE IF NOT EXISTS `user` (
  `uid` INT AUTO_INCREMENT,
  `user_name` varchar(100) NOT NULL,
  `cid` INT NOT NULL,
  `rid` INT NOT NULL,
  PRIMARY KEY (`uid`),
  FOREIGN KEY (`cid`) REFERENCES company(`cid`),
  FOREIGN KEY (`rid`) REFERENCES role(`rid`)
)DEFAULT CHARACTER SET latin1
COLLATE latin1_general_cs;

请帮忙。

最佳答案

这里最简单的解决方案是创建一个单独的专用桥接表,用于存储用户与其在给定公司的角色之间的关系:

userrolecompany (uid, cid, rid) PK is (uid, cid, rid))

这允许给定用户在多个公司担任多个角色。然后,您的 user 表简化为以下内容:

user (uid, user_name) PK is uid

因此,您只需在添加用户时向 user 表中插入一次,但您可以向 userolecompany 表中插入多个公司角色。对数据库进行此重构是规范化的一个简单示例,或者至少是朝这个方向迈出的良好一步。

userrolecompanyCREATE TABLE 语句可能如下所示:

CREATE TABLE userolecompany (
    uid INT NOT NULL,
    cid INT NOT NULL,
    pid INT NOT NULL,
    PRIMARY KEY (uid, cid, pid),
    FOREIGN KEY (uid) REFERENCES user (uid),
    FOREIGN KEY (cid) REFERENCES company (cid),
    FOREIGN KEY (rid) REFERENCES role (rid)
)

关于mysql - 使用外键在表中插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50285565/

相关文章:

mysql - 使用现有数据库 ID 的 Ruby on Rails 不起作用

MySQL:GET_LOCK 限制和问题

php - 准备好的语句不允许我调用 $mysqli->stmt_init()

php - 在表上具有一对多关系的性能最佳

mysql - 如何在数据库中实现这个相当复杂的概念/关系?

php - Magento后端错误 "Front controller reached 100 router match iterations"

MySQL查询多个表的数据到列

java - '? 附近更新查询中的语法错误在 Eclipse 中但在 MySQL Workbench 中工作

php - 将图像链接更新为自己的 URL

mysql - 如何以我想要的格式获取表结果 MYSQL