需要帮助理解这个SQL(由学说生成)

时间:2010-07-20 08:08:33

标签: sql doctrine

我实际上正在阅读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)

2 个答案:

答案 0 :(得分:3)

正确,这是解决同一问题的两种有效方法。是的,users_phonenumbers上的唯一索引意味着每个电话号码只能属于一个用户。

答案 1 :(得分:0)

设计实际上并不理想。

这个想法一定是有电话号码,用户,并且它们可以多对多链接。由于phonenumberid hoever上的唯一索引,每个数字只能分配给一个用户。

然后整个users_phonenumbers变得多余,因为他们可以在phonenumbers表上添加一个userid列并保存自己的连接。

如果你问我BAd桌子设计。