강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

ghuhan18님의 프로필 이미지
ghuhan18

작성한 질문수

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

연관 엔티티 - 다대다 관계 해결

MYSQL 코드 질문

작성

·

37

0

image.png

수업 외 질문을 가져와서 죄송합니다만 간략하게 한가지만 여쭙고 싶습니다.

이 Overlapping 과 Complete 을 동시에 만족하는 코드를 3개의 Table 을 통해서 구현할때 Trigger 를 쓰지 않고도 구현할 수 있나요? (단순히 Null, Check, IsStudent, IsFaculty 등을 이용해서요)

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
ghuhan18님께서 질문해주신 ER 다이어그램을 기반으로 Overlapping Complete 관계를 SQL에서 구현하는 방법에 대해 답변드리겠습니다.

Overlapping과 Complete 관계를 만족시키는 구현은 Triggers 없이도 SQL Constraints를 이용해 가능합니다. 이 관계는 Person, Student, Faculty의 테이블을 사용하여 구현할 수 있습니다.

  1. Person 테이블: 기본적인 개인의 식별 정보와 함께 is_student, is_faculty 플래그를 boolean 속성으로 추가합니다.
  2. Student 테이블: PersonUNI를 외래키로 사용하여 추가적인 학생 정보를 저장합니다.
  3. Faculty 테이블: PersonUNI를 외래키로 사용하여 교수진의 정보를 저장합니다.

구현 예시:

CREATE TABLE Person (
    UNI VARCHAR(10) PRIMARY KEY,
    last_name VARCHAR(50),
    first_name VARCHAR(50),
    preferred_email VARCHAR(100),
    default_email VARCHAR(100),
    is_student BOOLEAN DEFAULT FALSE,
    is_faculty BOOLEAN DEFAULT FALSE,
    CHECK (is_student OR is_faculty)  -- 최소 하나의 True: Complete 보장
);

CREATE TABLE Student (
    UNI VARCHAR(10),
    graduation_year INT,
    major VARCHAR(100),
    PRIMARY KEY (UNI),
    FOREIGN KEY (UNI) REFERENCES Person(UNI),
    CHECK (exists_student(UNI))  -- Student 테이블에 존재 시 Person의 is_student는 True
);

CREATE TABLE Faculty (
    UNI VARCHAR(10),
    title ENUM('Professor', 'Associate Professor', 'Assistant Professor', 'Instructor'),
    department_code VARCHAR(50),
    PRIMARY KEY (UNI),
    FOREIGN KEY (UNI) REFERENCES Person(UNI),
    CHECK (exists_faculty(UNI))  -- Faculty 테이블에 존재 시 Person의 is_faculty는 True
);

-- `exists_student` 와 `exists_faculty` 는 각각의 존재 여부를 체크하는 유닛 프로시저 또는 다른 방법이 필요합니다.
-- SQL에서 직접적인 기능은 없지만, 개념적으로 이해하는 방법입니다.

위의 예시에서는 Person 테이블이 최소 하나의 Role이 존재하도록 하고, 각 Role 테이블(Student, Faculty)이 해당 Role에 맞는 데이터를 갖도록 구현했습니다. 하지만 실제로 복잡한 데이터 무결성 검사를 위해서는 SQL Server 같은 몇 가지 데이터베이스에서 지원하지 않는 경우 트리거가 필요할 수도 있음을 고려하셔야 합니다.

추가적인 도움이 필요하면 언제든지 문의해 주세요!
감사합니다.

The image shows an Entity-Relationship (ER) diagram for a Faculty-Student model.

ghuhan18님의 프로필 이미지
ghuhan18

작성한 질문수

질문하기