데이터 모델링 SQL

차지예·2025년 7월 8일

생성AI

목록 보기
32/56
post-thumbnail

도서대출 시스템

-- 회원 테이블
CREATE TABLE Users (
    user_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL,
    phone TEXT,
    address TEXT,
    registered_date TEXT DEFAULT (DATE('now'))
);

-- 도서 테이블
CREATE TABLE Books (
    book_id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    author TEXT,
    category TEXT,
    total_copies INTEGER NOT NULL,
    available_copies INTEGER NOT NULL
);


-- 대출 테이블
CREATE TABLE Loans (
    loan_id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER,
    book_id INTEGER,
    loan_date TEXT DEFAULT (DATE('now')),
    due_date TEXT,
    return_date TEXT,
    FOREIGN KEY (user_id) REFERENCES Users(user_id),
    FOREIGN KEY (book_id) REFERENCES Books(book_id)
);

-- 저자 테이블
CREATE TABLE Authors (
    author_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    bio TEXT
);

-- 분류 테이블
CREATE TABLE Categories (
    category_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    description TEXT
);

외래 키(Foreign Key)
어떤 테이블이 다른 테이블의 기본키(Primary Key) 값을 참조할 때 사용하는 열(컬럼)

FOREIGN KEY (user_id) REFERENCES Users(user_id)
FOREIGN KEY (book_id) REFERENCES Books(book_id)

Loans.user_id 값은 반드시 Users 테이블의 user_id 값 중 하나여야 한다. 즉, 없는 회원은 대출 기록을 가질 수 없다.
Loans.book_id 값도 반드시 Books 테이블의 book_id중 하나여야 한다. 즉, 등록되지 않은 책은 대출 기록에 쓸 수 없다.


병원 예약 시스템

-- 환자(Patient) 테이블
CREATE TABLE Patients (
    patient_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    birthdate DATE NOT NULL,
    gender TEXT CHECK(gender IN ('남', '여')),
    phone TEXT NOT NULL,
    email TEXT,
    address TEXT
);

-- 의사(Doctor) 테이블
CREATE TABLE Doctors (
    doctor_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    specialty TEXT NOT NULL,
    phone TEXT NOT NULL,
    email TEXT
);

-- 예약(Appointment) 테이블
CREATE TABLE Appointments (
    appointment_id INTEGER PRIMARY KEY AUTOINCREMENT,
    patient_id INTEGER NOT NULL,
    doctor_id INTEGER NOT NULL,
    appointment_datetime DATETIME NOT NULL,
    status TEXT DEFAULT '예약됨' CHECK(status IN ('예약됨', '완료', '취소')),

    FOREIGN KEY (patient_id) REFERENCES Patients(patient_id) ON DELETE CASCADE,
    FOREIGN KEY (doctor_id) REFERENCES Doctors(doctor_id) ON DELETE CASCADE


주차 관리 시스템 데이터베이스 설계

📌 기본 기능

  • 차량 등록 / 삭제
  • 주차장 입차 / 출차 기록
  • 주차 요금 계산

📌 엔티티 도출 (Entity Identification)

엔티티 이름설명
차량(Vehicle)등록된 차량 정보
고객(Customer)차량 소유자 또는 사용자
입출차 기록(ParkingLog)입차 및 출차 시간 기록
요금(Fee)주차 시간에 따른 요금 정보
주차 구역(ParkingSlot)개별 주차 구역 정보
-- 고객 정보 테이블
CREATE TABLE Customer (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  phone VARCHAR(20)
);

-- 차량 정보 테이블
CREATE TABLE Vehicle (
  id INT AUTO_INCREMENT PRIMARY KEY,
  license_plate VARCHAR(20) UNIQUE NOT NULL,
  type VARCHAR(20),
  customer_id INT,
  FOREIGN KEY (customer_id) REFERENCES Customer(id)
);

-- 주차 구역 (슬롯) 테이블
CREATE TABLE ParkingSlot (
  id INT AUTO_INCREMENT PRIMARY KEY,
  zone VARCHAR(10),
  is_occupied BOOLEAN DEFAULT FALSE
);

-- 요금 정책 테이블
CREATE TABLE Fee (
  id INT AUTO_INCREMENT PRIMARY KEY,
  fee_per_hour INT NOT NULL,
  max_daily_fee INT DEFAULT 0
);

-- 입출차 기록 테이블
CREATE TABLE ParkingLog (
  id INT AUTO_INCREMENT PRIMARY KEY,
  vehicle_id INT NOT NULL,
  slot_id INT NOT NULL,
  entry_time DATETIME NOT NULL,
  exit_time DATETIME,
  fee_id INT,
  FOREIGN KEY (vehicle_id) REFERENCES Vehicle(id),
  FOREIGN KEY (slot_id) REFERENCES ParkingSlot(id),
  FOREIGN KEY (fee_id) REFERENCES Fee(id)
);


음악 스트리밍 서비스 데이터 모델 작성

📌 기본 기능

  • 사용자 등록 및 로그인
  • 노래 재생, 좋아요
  • 앨범/아티스트/장르 구분
  • 재생목록(Playlist) 생성 및 관리
  • 재생 이력 저장
# 사용자 테이블
CREATE TABLE User (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  email VARCHAR(100) UNIQUE NOT NULL,
  password VARCHAR(255) NOT NULL
);


# 아티스트 테이블
CREATE TABLE Artist (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL
);


# 앨범 테이블
CREATE TABLE Album (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(100) NOT NULL,
  artist_id INT NOT NULL,
  release_date DATE,
  FOREIGN KEY (artist_id) REFERENCES Artist(id)
);


# 장르 테이블
CREATE TABLE Genre (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL
);


# 노래 테이블
CREATE TABLE Song (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(100) NOT NULL,
  duration INT NOT NULL,  -- 초 단위
  album_id INT,
  genre_id INT,
  FOREIGN KEY (album_id) REFERENCES Album(id),
  FOREIGN KEY (genre_id) REFERENCES Genre(id)
);


# 재생목록 테이블
CREATE TABLE Playlist (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  user_id INT NOT NULL,
  FOREIGN KEY (user_id) REFERENCES User(id)
);


# 재생목록에 담긴 테이블
CREATE TABLE PlaylistSong (
  id INT AUTO_INCREMENT PRIMARY KEY,
  playlist_id INT NOT NULL,
  song_id INT NOT NULL,
  FOREIGN KEY (playlist_id) REFERENCES Playlist(id),
  FOREIGN KEY (song_id) REFERENCES Song(id)
);

0개의 댓글