학생 기본 정보에 표시할 것
학생 엔티티
속성:
전공 엔티티
속성:
이름(PK): NOT NULL
소속(FK): NOT NULL
학번(FK): NOT NULL
소속 대학
속성:
이름(PK): NOT NULL
전공.소속 1:1 소속대학.이름
학생.전공 1:1 전공.이름
학생.부전공 1:M 전공.이름
학생.복수전공 1:M 전공.이름

CHAR (Fixed-length): 고정된 길이(예: 10자)를 미리 할당합니다. 데이터가 짧아도 나머지 공간은 공백으로 채워져 공간 효율이 낮지만, 데이터 접근 속도가 빠릅니다. 주민등록번호, 국가코드 등 길이를 예측할 수 있는 데이터에 적합
TEXT (Variable-length): 데이터의 실제 길이만큼만 저장 공간을 할당합니다 (가변). 65,535바이트 이상의 매우 긴 문자열(게시글 내용, 블로그 등)을 저장할 때 사용하며, YouTube 영상에 따르면 일반적으로 1GB 이상의 데이터를 처리할 수 있음.
VARCHAR와의 관계: VARCHAR는 짧거나 중간 길이의 가변 문자열에 사용되며, TEXT보다 인덱스 설정이 유연하고 속도가 빠름.
ERD 작성 시에는 CHAR와 VARCHAR로 작성했지만 TABLE 작성 시에는 TEXT를 입력했다. 어떤 타입을 선택하는 것이 좋은지 잘 와닿지 않아서 서로 상이한 타입을 6과 7에서 넣게 되었지만, 사실은 일치해야 한다.
CREATE TABLE 학생
(
학번 INTEGER NOT NULL,
이름 TEXT NOT NULL,
연락처 TEXT NOT NULL,
주소 TEXT NOT NULL,
전공 TEXT NOT NULL,
부전공 TEXT NULL,
복수전공 TEXT NULL,
생일 date NULL,
성별 TEXT NULL,
PRIMARY KEY (학번)
);
CREATE TABLE 전공
(
이름 TEXT NOT NULL,
학번 INTEGER NOT NULL,
소속 INTEGER NOT NULL,
PRIMARY KEY (이름)
);
CREATE TABLE 소속대학
(
이름 TEXT NOT NULL,
PRIMARY KEY (이름)
);
관계 설정이 잘못된 것 같아 GPT에게 물어보니 부자연스러운 부분을 알려주었다.
1. 학생이 전공에 속하는 것이 자연스러운데 현재는 전공이 학생에 속함.
2. 전공 1: 학생 N 여야 하는데 현재 1:1로 관계가 설정되어 있음.
3. 전공, 부전공, 복수전공이 따로 분리되어 있어 확장성이 낮고, 전공이 추가되면 컬럼을 추가해야함. 그러므로 정규화 관점에서는 학생 <-> 전공을 N:M으로 보고 교차 테이블로 설계하는 것이 더 유연.
아래로 위 지적된 부분을 수정하는 내용을 계속 덧붙이도록 하겠다.
학생 엔티티
속성:
학번(PK): NOT NULL
이름: 중복 가능, NOT NULL
생년월일: 선택 속성
성별: 선택 속성
연락처 엔티티
학번 (FK): NOT NULL
전화번호: NOT NULL
(학번+전화번호 복합키)
전공 엔티티
속성:
전공명 (PK): NOT NULL
소속대학명 (FK): NOT NULL
소속대학 엔티티
속성:
대학명(PK): NOT NULL
학생-전공 교차 엔티티
속성:
학번(FK): NOT NULL
전공명(FK): NOT NULL
전공구분(예: 주전공 / 부전공 / 복수전공): NOT NULL
(학번 + 전공명 복합키)
소속대학 - 전공 (1:M)
학생 - 연락처 (1:M)
학생전공 - 전공 (N:M)
학생전공 - 학생 (M:1)

생각보다 길어진 실습이지만 덕분에 관계 정의를 확실히 배울 수 있었다.
또한 수정 과정에서 정규화도 실습해 볼 수 있어 좋았다.