【发布时间】:2023-03-24 23:11:01
【问题描述】:
我实际上正在阅读Doctrine Reference: One to Many, Unidirectional with Join table。但这可能更像是一个 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)
【问题讨论】:
-
我已经更新了我的答案
-
用户可以在没有电话号码的情况下存在吗? (我想是的)。 Phonenumber 用户可以在没有用户的情况下存在吗? (我想是的)。在这种情况下,您在两个实体之间建立了关系,该关系值得拥有自己的表。但是,我认为电话号码本身就是一个属性,而不是一个实体。
-
这在实践中无论如何都是无用的设计。 :)