데이터베이스 설계에서 엔터티 간의 연관 관계를 제대로 이해하고 구현하는 게 정말 중요하다. 테이블 간의 관계를 명확히 정의해야 데이터 무결성을 유지하고, 효율적인 쿼리 작성을 할 수 있기 때문.
SQL에서 엔터티는 결국 테이블. 예를 들어, 고객 관리 시스템에서 "고객"과 "주문"은 각각 별도의 테이블로 존재. 각 테이블은 여러 컬럼으로 구성되며, 이 컬럼들이 해당 엔터티의 속성을 나타냄.
-- 고객 테이블
CREATE TABLE Customer (
CustomerID INT PRIMARY KEY, -- 고객을 고유하게 식별하는 기본 키
Name VARCHAR(100),
Email VARCHAR(100)
);
-- 주문 테이블
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
CustomerID INT, -- 외래 키로 Customer 테이블의 CustomerID를 참조
FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID)
);
여기서 Customer와 Orders는 각각 하나의 엔터티. Orders 테이블의 CustomerID는 Customer 테이블의 CustomerID를 참조함으로써 두 테이블이 연결됨.
SQL에서는 엔터티 간의 연관 관계를 외래 키(Foreign Key)로 구현. 이는 하나의 테이블에서 다른 테이블의 기본 키를 참조하게 만들어 두 테이블을 연결하는 방식.
한 테이블의 레코드가 다른 테이블의 레코드와 1:1로 연결될 때.
예: 사용자와 사용자 프로필 정보를 별도의 테이블로 나눌 때.
SQL 예시:
-- 사용자 테이블
CREATE TABLE User (
UserID INT PRIMARY KEY,
Username VARCHAR(100)
);
-- 프로필 테이블
CREATE TABLE Profile (
ProfileID INT PRIMARY KEY,
UserID INT,
Address VARCHAR(255),
FOREIGN KEY (UserID) REFERENCES User(UserID)
);
한 테이블의 레코드가 다른 테이블의 여러 레코드와 연결될 때.
예: 한 고객이 여러 주문을 할 수 있을 때.
SQL 예시: Customer와 Orders 관계가 여기에 해당.
여러 테이블이 서로 다수의 레코드와 연결될 때. 이 경우 조인 테이블을 사용해야 함.
예: 학생과 수업 간의 관계.
SQL 예시:
-- 학생 테이블
CREATE TABLE Student (
StudentID INT PRIMARY KEY,
Name VARCHAR(100)
);
-- 수업 테이블
CREATE TABLE Course (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(100)
);
-- 학생-수업 조인 테이블
CREATE TABLE StudentCourse (
StudentID INT,
CourseID INT,
FOREIGN KEY (StudentID) REFERENCES Student(StudentID),
FOREIGN KEY (CourseID) REFERENCES Course(CourseID),
PRIMARY KEY (StudentID, CourseID)
);
데이터 무결성 유지: 외래 키를 통해 관계를 정의하면 데이터베이스에서 일관성을 자동으로 관리해줌.
효율적인 데이터 검색: 관계 설정이 잘 되어 있으면 조인(Join) 연산이 쉬워지고, 성능이 향상됨.
데이터 중복 방지: 잘못된 관계 설정은 데이터 중복을 초래할 수 있음. 특히 1관계를 N관계로 잘못 정의하는 실수를 주의.
비즈니스 로직 반영: 데이터베이스 설계는 실제 비즈니스 로직을 반영해야 함. 관계 설정이 부정확하면 시스템이 잘못된 프로세스를 따를 수 있음.
관계를 명확하게 정의해두면 데이터베이스가 확장되거나 유지보수할 때 큰 도움이 됨. 확장성이나 성능 측면에서 유리해짐.
외래 키 주인만이 왜래 키 를 등록,수정,삭제할 수 있으며, 주인이 아닌 쪽은 오직 외래 키를 읽기만 가능
앞으로 실습하면서 이 개념들을 바탕으로 더 복잡한 데이터베이스 설계와 최적화 방법을 탐구할 예정.