繁体   English   中英

需要帮助来理解此SQL(由原则生成)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM