我实际上正在阅读Doctrine Reference: One to Many, Unidirectional with Join table。但这可能更像是一个SQL问题。基本上,这应该模拟一对多的单向关系。我想从PHP代码(在该链接中),其中1个用户有很多phonenumbers。
问题是来自SQL,看起来1个用户可以拥有很多phonenumbers。 1个phonenumber只能属于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)
答案 0 :(得分:3)
正确,这是解决同一问题的两种有效方法。是的,users_phonenumbers
上的唯一索引意味着每个电话号码只能属于一个用户。
答案 1 :(得分:0)
设计实际上并不理想。
这个想法一定是有电话号码,用户,并且它们可以多对多链接。由于phonenumberid hoever上的唯一索引,每个数字只能分配给一个用户。
然后整个users_phonenumbers变得多余,因为他们可以在phonenumbers表上添加一个userid列并保存自己的连接。
如果你问我BAd桌子设计。