> 데이터 베이스 > 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이 사용자 테이블의 기본 키입니다.
  • sport_code는 스포츠 테이블의 기본 키입니다.
  • (user_name, sport_code)는 각 행을 고유하게 식별하는 user_sport 테이블의 복합 기본 키입니다.

이러한 원칙에 따라 고유한 행이 있는 관계형 테이블을 생성하고 데이터 무결성을 보장하며 자동 사용으로 인해 발생하는 문제를 방지할 수 있습니다. 증가된 ID를 기본 키로 사용합니다.

위 내용은 자동 증가 ID 없이 관계형 테이블을 올바르게 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿