我有下面的数据和使用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关系

10-08 03:25