inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

MYSQL 코드 질문

50

ghuhan18

작성한 질문수 121

0

image.png

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

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

sql mysql dbms/rdbms 소프트웨어-설계 SQLD

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 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.

아주 작은 정오표 전달드립니다.

0

52

2

실제로 작은 기업에서 기획 롤

1

27

1

order_product 까마귀발

0

44

2

[DB설계] 탈퇴 유저의 구독 정보 유지 및 이메일 마스킹 관련 질문입니다.

0

53

1

자연키 vs 대리키 실무질문

0

28

1

1:N 관계에서 중간테이블 (연관엔티티)

0

57

2

일대일 fk 위치

0

43

1

제 3 정규형 vs BCNF 정규형 차이점?

0

106

3

BCNF 질문

0

78

2

연관 엔티티 네이밍 규칙

0

53

1

진짜 강의 듣는거 너무 고문

0

139

1

28강 sql 파일 어딨나여?

0

94

1

2NF의 엄밀한 정의

0

74

1

comment 채번을 사용해야 하는 이유에 대한 설명이 필요합니다.

0

124

3

학습중인 수업자료를 받아볼 수 있을까요??

0

103

2

수업자료 pdf파일관련 건의 - 제목 링크위치 개선

0

88

2

서비스 운영 중 잘못된 테이블 설계 발견시 수정 시점에 대한 질문

1

107

2

실무적인 설계로 접근했을 때 제 2정규형 항상 만족?

0

82

1

슈퍼/서브 타입 joined 전략

0

74

2

created_at 관련 구현과 DB ENUM에 대해

0

75

1

M:N 관계의 연관 엔티티 설계 순서

0

81

2

데이터 역사성 훼손 문제

0

67

2

실무팁 - 등록자,수정자 컬럼 관리 관련 질문입니다.

0

84

1

구글이 이메일 변경을 허용하는 이유

0

126

1