<데이터베이스>
백엔드 개발자로서 굉장히 중요한 내용.
one-to-many(주인과 물건들) : 행 하나가 다른 테이블의 다수의 행에 연결, 1:N (N:1이 아님 ; 1,2 키가 1에 몰릴 때 ->방향에 따라 한 1:N이 고정이 되어 있음. 두 주인이 고양이 한 마리를 동시에 키우는 느낌, 두 사람이 같은 주문번호로 시키는 것이 아니라고 생각하기. ; 주종 관계의 예시일 뿐 그렇게 꼭 생각할 필욘 없음.)
"특히 key를 줘야할 때는 many 쪽에 줘야 데이터 중복이 생기지 않는다."
"중복을 획기적으로 줄여준다."
many-to-many(책과 작가 ; 책은 여러 작가에 의해 쓰일 수 있고 작가는 여러 책을 쓸 수 있다. ; 단편집과 작가와 책)
"N : N"
한 테이블에 한 데이터만 들어가야하므로 양쪽 모두 키를 쓸 수 없다
-> 그래서 연결 테이블을 하나 더 만든다.
-> 근데 중복이 또 된다? -> 둘 다 참조로 한다.(양 옆으로 참조)
-> 데이터 양이 효과적으로 줄어든다.
테이블과 테이블 연결하는 방법 : foreign key 이용.
왜 테이블을 여러 개 써? : 중복을 방지하기. 그 중복으로 인한 잘못된 저장 피하기(회원 정보가 이름은 같은데 아이디가 다를 때), 데이터의 효율.
-> 필요할 때마다 테이블을 연결하면 디스크 자체를 효율적으로 쓸 수 있다.(정규화 : Normalization)
그럼 트랜잭션이란??? :
ACID를 제공함으로 따라서 트랜잭션(일련의 작업들을 한번에 하나의 unit으로 실행하는것) 기능을 제공. 전체가 하나의 작업으로 취급되며 성공 or 실패로 나뉘는 것을 이야기 함.
은행에서 돈을 뺄 때 정전이 되었다 : 실패하지 않게 원상복구
설명 : 수정함 -> 음료 하나가 갖는 값은 프라임키만. 여러 값을 갖는 경우는 영양정보에 한해서임.
<분류>
알러지 경우 : 알러지마다 프라임키를 주는 방식으로 음료에 그 키를 부여. 다른 테이블 여러개에 연결 될 가능 성이 있는 경우는 1:다 관계가 맞음(카페 라떼 : 1, 슈크림라떼 : 1)(one to many) ; 피드백 받고 수정
카테고리 경우 : 카테고리마다 프라임키를 주는 방식으로 음료에 그 키를 부여 (콜드브루 : 1)(one to many)
신메뉴 : 신상 / 기존 메뉴 두 개로 나눠서 음료에 키를 부여 (슈크림 라떼 : 1)(one to many)
영양정보 : 1개의 메뉴당 6가지의 정보가 1개가 됨.(one to many) ; 참조 안 하는 이유는 모든 음료에 대한 설명이 다르기 때문에.
이미지 : 이미지는 이미지 링크와 Id값 연동(one to one)
만일 이미지가 N개가 되면? : 1:N 관계가 된다.(one-to-many 로 테이블 분리, 테이블과 forein key 화살표 방향이 반대)
음료 설명 : one to one
음료 이름 : 모두 다른 값이므로 drinks표 자체 name 속성값으로 부여
화살표 방향은 본체에서 참조되는 방향으로 가는 것이 맞음.
만일 신상품으로 Yes or No로 판별하려면?
분리형 타입으로 is_new ~ 헤드 타입을 놓고 해도 된다.
최종수정 :