需要帮助理解此SQL(由条令生成)

需要帮助理解此SQL(由条令生成),sql,doctrine,Sql,Doctrine,我实际上在读书。但这可能更像是一个SQL问题。基本上,这是一个一对多的单向关系模型。我猜从PHP代码(在该链接中)可以看出,1个用户有许多电话号码 问题来自SQL,似乎一个用户可以有许多电话号码。一个电话号码只能属于一个用户。我说得对吗 CREATE TABLE User ( id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; CREATE TABLE users_phonenumbers (

我实际上在读书。但这可能更像是一个SQL问题。基本上,这是一个一对多的单向关系模型。我猜从PHP代码(在该链接中)可以看出,1个用户有许多电话号码

问题来自SQL,似乎一个用户可以有许多电话号码。一个电话号码只能属于一个用户。我说得对吗

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\u phonenumbers
上的唯一索引意味着每个电话号码只能属于一个用户。

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

该设计实际上是次优的

这个想法一定是有电话号码、用户,而且他们可以多对多地联系起来。由于phonenumberid hoever上的唯一索引,每个号码只能分配给一个用户

然后,整个用户的电话号码就变得多余了,因为他们可以在电话号码表上添加一个userid列,并为自己保存一个连接


如果你问我,桌子的设计很糟糕。

这个设计实际上是次优的

这个想法一定是有电话号码、用户,而且他们可以多对多地联系起来。由于phonenumberid hoever上的唯一索引,每个号码只能分配给一个用户

然后,整个用户的电话号码就变得多余了,因为他们可以在电话号码表上添加一个userid列,并为自己保存一个连接


如果你问我的话,表的设计很糟糕。

这是一个及时的回答,David M。我正要发布一个完全错误的答案。看起来简单的方法就是我在做A时使用的方法,但为什么会有不同?这是一个及时的回答,David M.我正要发布一个完全错误的答案。看起来简单的方法就是我在做a时使用的方法,但是为什么会有不同?对不起,忘了读你的最后一行。是的,连接是多余的,您可以按照您的建议简化设计。@David M的说法是正确的:两种方法都是有效的。您认为“坏”的是基于一个有价值的原则,即一个表要么是实体表,要么是关系表,但决不能两者兼而有之。这只是一个风格问题,仅此而已。在你使用它的上下文中,术语“次优”是主观的(除非你想贴一个证明…?)对不起,忘了读你的最后一行。是的,连接是多余的,您可以按照您的建议简化设计。@David M的说法是正确的:两种方法都是有效的。您认为“坏”的是基于一个有价值的原则,即一个表要么是实体表,要么是关系表,但决不能两者兼而有之。这只是一个风格问题,仅此而已。在您使用它的上下文中,“次优”一词是主观的(除非您愿意提供证据…?)我已经更新了我的答案用户可以不带电话号码存在吗?(我想是的)。Phonenumber用户是否可以在没有用户的情况下存在?(我想是的)。在这种情况下,两个实体之间的关系应该有自己的表。然而,我认为电话号码本身是一个属性,而不是一个实体。无论如何,这在实践中都是无用的设计。:)我已经更新了我的答案没有电话号码的用户可以存在吗?(我想是的)。Phonenumber用户是否可以在没有用户的情况下存在?(我想是的)。在这种情况下,两个实体之间的关系应该有自己的表。然而,我认为电话号码本身是一个属性,而不是一个实体。无论如何,这在实践中都是无用的设计。:)