首页 > 解决方案 > MySQL一对多创建表,下面最好的选择是什么?

问题描述

我有以下数据并使用mysql。Person_name 是唯一的,TelephoneNumbers 是每个人唯一的。

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,会不会有任何问题?

标签: mysqlsqlrelational-database

解决方案


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

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


推荐阅读