首页 > 数据库 > mysql教程 > 如何正确创建没有自增ID的关系表?

如何正确创建没有自增ID的关系表?

Linda Hamilton
发布: 2025-01-06 07:54:40
原创
816 人浏览过

How to Properly Create Relational Tables Without Auto-Increment IDs?

SQL:创建具有 2 个不同自动增量的关系表

问题概述

通常有两个以自动增量 ID 为主的表键。但是,创建第三个关系表来建立这两个表之间的关系通常会导致错误。这是因为要么只允许一个自动增量列,要么从初始表中删除自动增量会阻止由于类型匹配问题而创建外键。

关于 ID 字段和主键的误解

解决一些基本的误解很重要:

  • 自动递增 ID 不是与技术或关系意义上的主键同义。主键应该是从数据中提取的不重复的逻辑键,而不是系统生成的任意数字。
  • 将 ID 字段声明为主键并不会神奇地将其转换为真正的主键。只能保证表内唯一,不能保证表间唯一。

关系表要求

关系表必须有行唯一,使用自增ID无法保证这一点主键。要创建关系表,我们需要确定一个真正的主键,该主键由唯一标识每一行的数据属性组成。

纠正措施

第 1 步:定义真正的主键

标识共同唯一区分每个表中的行的数据属性。对这些字段声明唯一约束,以防止重复行。

第 2 步:消除 ID 字段

一旦确保唯一行,多余的 ID 字段(及其支持索引)变得不必要,可以删除。

第 3 步:创建关联表

连接两个主表的第三个表应该具有由两个父表的主键组成的复合主键。这可以确保关联表中的行是唯一的。

示例

假设我们有两个表:user 和 sport。为了建立它们之间的关系,我们创建第三个表 user_sport:

CREATE TABLE user (
  user_name CHAR(16) NOT NULL PRIMARY KEY,
  name_first CHAR(30) NOT NULL,
  name_last CHAR(30) NOT NULL,
  birth_date DATE NOT NULL
);

CREATE TABLE sport (
  sport_code CHAR(4) NOT NULL PRIMARY KEY,
  name CHAR(30) NOT NULL
);

CREATE TABLE user_sport (
  user_name CHAR(16) NOT NULL,
  sport_code CHAR(4) NOT NULL,
  start_date DATE NOT NULL,
  PRIMARY KEY (user_name, sport_code),
  FOREIGN KEY (user_name) REFERENCES user (user_name),
  FOREIGN KEY (sport_code) REFERENCES sport (sport_code)
);
登录后复制

在此示例中:

  • user_name 是 user 表的主键。
  • sport_code 是运动表的主键。
  • (user_name, sport_code) 是user_sport表的复合主键,唯一标识每一行。

遵循这些原则,我们可以创建行唯一的关系表,保证数据完整性,避免使用自动生成的问题。递增的 ID 作为主键。

以上是如何正确创建没有自增ID的关系表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板