mysql - 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,会不会有任何问题?
解决方案
选项 2 为您提供了必须在每个查询中控制的重复人员。
最好的是将实体分开,这是一个经典的 1-N 关系
推荐阅读
- angular - Angular 组件注入问题
- php - 多语言网站和 cookie:如何记住选择的语言?
- pandas - 在熊猫中按列的所有元素分组
- python - 从批处理文件运行 Python 脚本时,Anaconda Python 模块导入问题
- php - 当它要求输入时我无法回复 cmd(已解决)
- php - JWT.php 中的“$function”来自哪里(带有 Firebase 令牌身份验证的 Lumen API)
- python - 异常未处理:SQL 语句中未使用所有参数
- python - scipy pearson3 中的 CDF 似乎定义错误
- python-2.7 - 如何使用 Python 将 Excel 文件上传到共享点文件夹
- php - 更新的 css 文件未反映在 laravel 中