MySQL 외래키
MySQL에서 외래키는 두 테이블 간의 관계를 정의하고, 참조 무결성을 유지하는 데 사용됨.
외래키는 한 테이블의 열이 되며, 이 열은 다른 테이블의 기본키를 참조함.
이를 통해 테이블 간의 데이터가 서로 일관성을 유지하도록 보장함.
MySQL 외래키의 역할과 기능
1. 데이터 무결성
1.1 참조 무결성
외래키는 참조 무결성을 보장하여 참조된 테이블의 기본키 없는 값이 참조하는 테이블에 입력되는 것을 방지함.
이는 데이터베이스의 논리적 일관성을 유지하는 데 중요함.
2. 관계의 정의
2.1 테이블 간 관계 설정
외래키를 사용하여 테이블 간의 관계를 명확하게 정의할 수 있음.
이 관계는 일대일, 일대다, 다대다 등이 될 수 있음.
3. 캐스케이딩 작업
3.1 캐스케이드 업데이트와 삭제
외래키 관계에서 주 테이블의 데이터가 변경되면 (업데이트나 삭제) 이 변경을 외래키를 가진 종속 테이블에 자동으로 반영할 수 있음.
이는 데이터 무결성을 유지하는 데 도움이 됨.
MySQL 외래키의 SQL 구문
외래키를 설정하는 기본 SQL 구문은 다음과 같음.
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
CustomerID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
기본 테이블에 외래키를 추가하는 경우에는 다음과 같이 ALTER TABLE 구문을 사용함.
ALTER TABLE Orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);
MySQL 외래키 옵션
1. ON DELETE 및 ON UPDATE
1.1 CASCADE
참조된 테이블에서 행이 삭제되거나 업데이트될 때, 참조하는 테이블의 해당 행도 삭제되거나 업데이트됨.
1.2 SET NULL
참조된 테이블의 행이 삭제되거나 업데이트될 때, 참조하는 테이블의 외래키 열을 NULL로 설정함.
1.3 NO ACTION
기본 설정으로, 참조 무결성을 위반하는 행의 추가나 변경을 허용하지 않음.
1.4 RESTRICT
참조된 키에 대한 변경이나 삭제가 참조하는 키에 의존하는 한 허용되지 않음.
MySQL 외래키 관리의 과제
1. 성능 이슈
외래키는 참조 무결성을 보장하기 위해 추가적인 처리가 필요하므로, 대규모 데이터를 다루는 환경에서는 성능 저하를 초래할 수 있음.
2. 복잡성
복잡한 관계와 많은 수의 외래키는 데이터베이스 관리를 복잡하게 만들 수 있음.
3. 설계 고려사항
외래키는 데이터베이스의 설계 단계에서 신중하게 고려되어야 하며, 잘못 설계된 외래키 관계는 유지보수와 확장성에 어려움을 줄 수 있음.
MySQL 외래키 정리
외래키는 MySQL에서 데이터의 일관성과 무결성을 유지하는 중요한 도구임.
그러나 외래키 사용은 데이터베이스 설계와 관리에 있어서 신중한 접근을 요구함.
특히 성능과 유지보수 측면에서 적절한 전략이 필요함.
MySQL 복합키
MySQL에서 복합키는 두 개 이상의 열을 조합하여 만든 키를 의미함.
복합키는 주로 테이블에서 각 행을 고유하게 식별할 수 없는 단일 열이 있을 때 사용됨.
이러한 키는 각 열의 값들의 조합으로 고유성을 확보하며, 데이터의 무결성과 정확한 관계 설정을 위해 중요한 역할을 함.
MySQL 복합키 유형
1. 복합 기본키
두 개 이상의 열을 결합하여 기본키로 사용하는 경우임.
이는 테이블 내에서 각 행이 고유하도록 보장함.
예를 들어, 학생이 여러 과목의 시험을 치는 상황에서 학생 ID와 과목 코드를 조합하여 기본키로 사용할 수 있음.
2. 복합 외래키
참조 무결성을 유지하기 위해 두 개 이상의 열이 다른 테이블의 복합 기본키를 참조할 때 사용됨.
예를 들어, 주문 테이블에서 고객 ID와 상품 ID를 결합하여 다른 테이블의 복합키를 참조할 수 있음.
MySQL 복합키의 SQL 구현
복합키를 생성하는 방법은 MySQL에서 매우 간단함.
다음은 복합키를 생성하는 예시 SQL 구문은 다음과 같음.
CREATE TABLE StudentGrades (
StudentID int,
CourseID int,
Grade varchar(2),
PRIMARY KEY (StudentID, CourseID)
);
외래키로 복합키를 설정하는 예시는 다음과 같음.
CREATE TABLE Enrollment (
StudentID int,
CourseID int,
Semester varchar(10),
FOREIGN KEY (StudentID, CourseID) REFERENCES StudentGrades(StudentID, CourseID)
);
MySQL 복합키의 이점과 과제
1. 이점
1.1 데이터 무결성 강화
복합키는 테이블 간의 정확한 데이터 관계를 정립하고 무결성을 유지하는 데 도움을 줌.
1.2 고유성 보장
단일 열로는 고유성을 확보할 수 없는 경우, 복합키가 유용함.
1.3 보다 정교환 쿼리 실행
복합키를 사용하면 더 복잡하고 정교한 데이터 쿼리가 가능해짐.
2. 과제
2.1 성능 문제
복합키가 크고 복잡해진수록 인덱싱과 쿼리 성능에 부정적인 영향을 줄 수 있음.
2.2 설계 복잡성
복합키를 설계하고 유지 관리하는 과정이 복잡할 수 있으며, 설계 초기 단계에서 신중한 계획이 필요함.
2.3 인덱스 크기
복합키로 인해 생성되는 인덱스는 그 크기가 커지고, 이는 추가적인 스토리지 공간을 요구함.
MySQL 복합키의 최적 활용
복합키의 설계와 사용은 데이터베이스의 전체적인 설계 전략에 맞게 조정되어야 함.
특히, 복합키가 필요한 이유와 이점을 명확히 이해하고, 그에 따른 성능 저하 가능성을 고려하여 적절한 인덱스 전략을 수립하는 것이 중요함.
데이터베이스의 성능과 무결성, 확장성을 동시에 고려하는 복합키 사용이 이상적임.
'Database > SQL' 카테고리의 다른 글
[SQL] P-Value (0) | 2025.01.20 |
---|---|
[MySQL] Auto Increment, 컬럼 생성 옵션 종류 (0) | 2024.06.15 |
[MySQL] 인덱스, 기본키 (1) | 2024.06.15 |
[DB] 데이터 모델링, NoSQL (1) | 2024.06.08 |
[MySQL] MySQL 및 MariaDB 차이 (0) | 2024.06.07 |