MYSQL 코드 질문
50
작성한 질문수 121

수업 외 질문을 가져와서 죄송합니다만 간략하게 한가지만 여쭙고 싶습니다.
이 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의 테이블을 사용하여 구현할 수 있습니다.
- Person 테이블: 기본적인 개인의 식별 정보와 함께
is_student,is_faculty플래그를 boolean 속성으로 추가합니다.
- Student 테이블:
Person의UNI를 외래키로 사용하여 추가적인 학생 정보를 저장합니다.
- Faculty 테이블:
Person의UNI를 외래키로 사용하여 교수진의 정보를 저장합니다.
구현 예시:
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 같은 몇 가지 데이터베이스에서 지원하지 않는 경우 트리거가 필요할 수도 있음을 고려하셔야 합니다.
추가적인 도움이 필요하면 언제든지 문의해 주세요!
감사합니다.

아주 작은 정오표 전달드립니다.
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





