MySQL创建一对多表,下面的最佳选项是什么?

MySQL创建一对多表,下面的最佳选项是什么?,mysql,sql,relational-database,Mysql,Sql,Relational Database,我有以下数据和使用mysql。每个人的姓名和电话号码都是唯一的 Person_name1=TelephoneNumber1, TelephoneNumber2, TelephoneNumber3... Person_name2=TelephoneNumber4, TelephoneNumber5, TelephoneNumber6... 备选案文1。创建1:多个主表和子表 CREATE TABLE Person ( personName varchar(50) NOT NULL, id int

我有以下数据和使用mysql。每个人的姓名和电话号码都是唯一的

Person_name1=TelephoneNumber1, TelephoneNumber2, TelephoneNumber3...
Person_name2=TelephoneNumber4, TelephoneNumber5, TelephoneNumber6...
备选案文1。创建1:多个主表和子表

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。创建一个以personName、telephoneNumber作为复合键的表

CREATE TABLE
Person_Telephone (
    personName varchar(50) NOT NULL,
    telephoneNumber int NOT NULL,
    PRIMARY KEY(personName, telephoneNumber)
);
选项1为两个字段创建两个表是否过于复杂?
选项2看起来很完美,如果选择选项2而不是选项1,会有任何问题吗?

选项2为您提供了重复的人员,您必须在每个查询中控制这些人员


最好是将实体分开,这是一个典型的1-N关系

选项2为您提供了重复的人员,您必须在每个查询中控制这些人员


最好是将实体分开,这是一个典型的1-N关系

因为用户可以有多个电话号码,我认为两个表将是最好的解决方案

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)
)
现在,您可以像这样简单地连接表:

SELECT
t1.id,
t1.person_name,
t2.phone_number
FROM person t1
LEFT JOIN phone_number t2
ON (t1.id = t2.person_id);

由于用户可以有多个电话号码,我认为两个表将是最好的解决方案

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)
)
现在,您可以像这样简单地连接表:

SELECT
t1.id,
t1.person_name,
t2.phone_number
FROM person t1
LEFT JOIN phone_number t2
ON (t1.id = t2.person_id);

用户可以拥有多个电话号码吗?这是我能想到的选项2的唯一问题。@Jane每个人都有一个以上的电话号码。Bob,999999 | Bob,8888888 | Bob 777777 |和6666666 |和33333333用户可以拥有多个电话号码吗?这是我能想到的选项2的唯一问题。@Jane每个人都有一个以上的电话号码。鲍勃,999999 |鲍勃,888888 |鲍勃777777 |丹66666 |丹33333