MySQL 创建 table 一对多,下面的最佳选项是什么?
MySQL create table one to many, what is the best option below?
我有以下数据并正在使用 mysql。 Person_name 是唯一的,每个人的 TelephoneNumbers 都是唯一的。
Person_name1=TelephoneNumber1, TelephoneNumber2, TelephoneNumber3...
Person_name2=TelephoneNumber4, TelephoneNumber5, TelephoneNumber6...
选项 1. 创建 1:Many 主子 table。
CREATE TABLE Person (
personName varchar(50) NOT NULL,
id int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
UNIQUE KEY personName (personName)
);
CREATE TABLE Telephone (
telephoneNumber int,
mappingId int,
PRIMARY KEY (telephoneNumber),
foreign key(mappingId) references Person(id)
);
选项 2。创建一个 table,将 personName、telephoneNumber 作为复合键。
CREATE TABLE
Person_Telephone (
personName varchar(50) NOT NULL,
telephoneNumber int NOT NULL,
PRIMARY KEY(personName, telephoneNumber)
);
选项 1 为两个字段创建两个 table 是否过于复杂?
选项 2 看起来很完美,如果选择选项 2 而不是选项 1 会不会有任何问题?
选项 2 为您提供了必须在每个查询中控制的重复人员。
最好是将实体分开,这是经典的 1-N 关系
由于用户可以有多个 phone 号码,我认为 2 个表是最好的解决方案。
CREATE TABLE person (
PRIMARY KEY (id) AUTO_INCREMENT,
person_name VARCHAR(45) NOT NULL,
);
CREATE TABLE phone_number (
PRIMARY KEY (id) AUTO_INCREMENT,
phone_number VARCHAR(11) NOT NULL,
FOREIGN KEY (person_id) REFERENCES person(id)
)
现在您可以简单地 JOIN
像这样的表格:
SELECT
t1.id,
t1.person_name,
t2.phone_number
FROM person t1
LEFT JOIN phone_number t2
ON (t1.id = t2.person_id);
我有以下数据并正在使用 mysql。 Person_name 是唯一的,每个人的 TelephoneNumbers 都是唯一的。
Person_name1=TelephoneNumber1, TelephoneNumber2, TelephoneNumber3...
Person_name2=TelephoneNumber4, TelephoneNumber5, TelephoneNumber6...
选项 1. 创建 1:Many 主子 table。
CREATE TABLE Person (
personName varchar(50) NOT NULL,
id int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
UNIQUE KEY personName (personName)
);
CREATE TABLE Telephone (
telephoneNumber int,
mappingId int,
PRIMARY KEY (telephoneNumber),
foreign key(mappingId) references Person(id)
);
选项 2。创建一个 table,将 personName、telephoneNumber 作为复合键。
CREATE TABLE
Person_Telephone (
personName varchar(50) NOT NULL,
telephoneNumber int NOT NULL,
PRIMARY KEY(personName, telephoneNumber)
);
选项 1 为两个字段创建两个 table 是否过于复杂? 选项 2 看起来很完美,如果选择选项 2 而不是选项 1 会不会有任何问题?
选项 2 为您提供了必须在每个查询中控制的重复人员。
最好是将实体分开,这是经典的 1-N 关系
由于用户可以有多个 phone 号码,我认为 2 个表是最好的解决方案。
CREATE TABLE person (
PRIMARY KEY (id) AUTO_INCREMENT,
person_name VARCHAR(45) NOT NULL,
);
CREATE TABLE phone_number (
PRIMARY KEY (id) AUTO_INCREMENT,
phone_number VARCHAR(11) NOT NULL,
FOREIGN KEY (person_id) REFERENCES person(id)
)
现在您可以简单地 JOIN
像这样的表格:
SELECT
t1.id,
t1.person_name,
t2.phone_number
FROM person t1
LEFT JOIN phone_number t2
ON (t1.id = t2.person_id);