테이블: 학생
컬럼: 아이디, 이름, 학년, 나이
테이블: 교수님
컬럼: 아이디, 이름, 수업담당
테이블: 과목
컬럼: 아이디, 과목명
( 1인 경우 색칠 안함)
학생 : 교수님 ( N : 1 )
학생 : 과목 ( M : N )
과목 : 교수님 ( N : 1 )
1 : 1 일 땐 프리마키를 어디다 둬도 상관 없으니
테이블을 최상단에 올려도 문제 없다.
BUT,
1 : N 일 땐 프리마키를 N쪽에 둬야한다. WHY?
1의 정보를 N에서 참조해야 중복된 값이 없다.
N의 정보를 1에서 참조한다면 하나씩 찾아야 하기 때문에 어렵다.
그리고 프리마키는 그 사람의 열쇠이기 때문에 그 열쇠를 갖고와서 정보를 연다면 그 사람의 모든 정보를 알 수 있다.
이해하기 어려우니 학생 : 교수님 ( N : 1 ) 으로 예시를 들어보자.
교수님이 학생의 정보를 궁금해하니 id(열쇠)를 눌러서 열어보자. 그러면 학생의 모든 정보를 알 수 있기 때문에
테이블 당 하나의 컬럼을 하나씩 프리마키를 만들지 않아도 된다.
따라서 프리마키 하나를 고유의 값 id int auto_incrment 으로 치면 아이디가 자동으로 생성되기때문에
이렇게 잡고 아이디를 가져와서 데이터를 입력하면 된다.
N : M 일 땐 새로운 테이블을 만들어야 한다
새로운 테이블을 만들어 온다(create table teach)
아, 참고로 이건 교수와 학생의 N:M이다.
create table teach (
s_id int,
p_id int,
day date,
primary key(`s_id`, `p_id`),
foreign key(`s_id`) references `student`(`id`),
foreign key(`p_id`) references `professor`(`id`)
);
참고해야할 점은
프리마키를 primary key(`s_id`, `p_id`) 두 개의 관계를 만들어야하고 ( 지정한 테이블의 아이디를 좀 다르게 해야 구분이 가능)
foreign key(`s_id`) references `student`(`id`),
이 프리마키에서 참고자료를 (references) 학생( student)의 id 프리마키를 참고한다는 것이다.
insert into teach(s_id, p_id, day) values(1, 1, '2023-10-13');
이런식으로 추가를 한다면,
따라서 테이블은 아마
s_id | p_id | day |
1 | 1 | '2023-10-13' |
이렇게 나올 것이다.
한번 도전해보는 것이 나쁘지 않을 것이다.
'서버 > DB' 카테고리의 다른 글
DB 데이터베이스 컬럼 행 열 만들어서 10개의 데이터 삽입 숙제완료 (1) | 2023.10.20 |
---|---|
DB 수정중 (0) | 2023.10.18 |
10/20까지 DB 숙제 (0) | 2023.10.13 |
테이블 || 스키마에 데이터 넣기 (0) | 2023.10.13 |
외래키를 어떻게 지정하는지? (1) | 2023.10.13 |