[英]Need help understanding this SQL (generated by doctrine)
我实际上正在阅读《教义参考:一对多,单向的Join表》 。 但这可能更像是一个SQL问题。 基本上,这应该建模一对多的单向关系。 我猜从PHP代码(在该链接中),这样的1用户有很多电话号码。
问题是来自SQL,看来1个用户可以有多个电话号码。 1个电话号码只能属于1个用户。 我对吗?
CREATE TABLE User (
id INT AUTO_INCREMENT NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE users_phonenumbers (
user_id INT NOT NULL,
phonenumber_id INT NOT NULL,
UNIQUE INDEX users_phonenumbers_phonenumber_id_uniq (phonenumber_id),
PRIMARY KEY(user_id,
phonenumber_id)
) ENGINE = InnoDB;
CREATE TABLE Phonenumber (
id INT AUTO_INCREMENT NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
ALTER TABLE users_phonenumbers ADD FOREIGN KEY (user_id) REFERENCES User(id);
ALTER TABLE users_phonenumbers ADD FOREIGN KEY (phonenumber_id) REFERENCES Phonenumber(id);
我不能只是将数据库简化为...下面...不需要联接表,什么不是?
Users (id, name)
Phonenumbers (id, user [FK], number)
正确,这是解决同一问题的两种有效方法。 是的, users_phonenumbers
上的唯一索引意味着每个电话号码只能属于一个用户。
该设计实际上是次优的。
想法一定是有电话号码,用户,并且可以多对多链接。 由于phonenumberid hoever具有唯一索引,因此每个号码只能分配给一个用户。
然后,整个users_phonenumbers变得多余了,因为他们只需要在phonenumbers表上添加一个userid列并保存自己的联接即可。
BAD表设计,如果你问我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.