我有以下表格-
我想以这样的方式在用户表中输入值,即可以为一个用户分配多个 cid 和rid,并且可以为多个用户分配相同的 cid 和/或rid。但是,如果用户表有一个值,其中 user_name='A', cid='1',rid='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
表中插入多个公司角色。对数据库进行这种重构是规范化的一个简单示例,或者至少是朝着这个方向迈出的一个很好的一步。
CREATE TABLE
for的语句userrolecompany
可能如下所示:
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)
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句