데이터 저장소인 관계형 데이터베이스(DB)는
SQL문을 이용해 데이터베이스 파일 안에 구조를 만들고
자료를 담는다.
온라인 의류 쇼핑몰을 예로 들었을 때
회원, 제품, 주문 세 가지의 구성요소가 있다.
이 구성요소는 테이블(Table)이라는 엑셀 시트처럼 생긴 표로,
그 안에 데이터들을 담는다.
테이블 안의 데이터들은 일관적인 특징을 가지며
데이터가 중복되지 않는다.
회원 테이블에는 {회원 ID, PW, 주소},
제품 테이블에는 {일련번호, 색상, 사이즈, 가격},
주문 테이블에는 {주문한 회원 정보, 주문한 제품 정보, 주문일}
등의 데이터가 저장된다.
아래 표에서 속성이 ID, PW, 주소 등과 같은
데이터의 속성이 들어가는 회색의 첫 번째 행을 DB에서는
레코드(Record)라고 하는데,
Row, Tuple이라고도 부른다.
레코드에 들어가는 속성들은 컬럼(Column)이라 부른다.
실제로 DBeaver에서 컬럼을 만들 때
우측 사진과 같이 데이터 타입을 정할 수 있는데
이 데이터 타입을 도메인(Domain)이라 부른다.
원하는 데이터를 찾을 때는 컬럼을 기준으로 데이터를 찾으면 되는데,
여기서 레코드를 구분하는 기준이 되는 컬럼을
프라이머리 키(Primary Key)라고 한다.
프라이머리 키의 데이터는 중복될 수 없으며
값이 비어있을 수 없다(Null).
온라인 쇼핑몰에서 프라이머리 키는
회원에서는 회원 ID,
상품에서는 일련번호,
주문에서는 주문번호다.
중복되지 않으면서도 비어있을 수 없는 컬럼이기 때문이다.
또한 프라이머리 키의 경우 검색 속도를 높이기 위해
인덱싱(indexing) 작업을 거치는데,
데이터를 빠르게 찾을 수 있도록 색인을 추가하는 것이다.
만약 회원정보를 이용해 주문 정보를 확인하려면
회원 테이블과 주문 테이블을 연결하면 되는데
한 사람이 여러 제품을 구매할 수도 있고,
여러 사람이 한 제품을 장바구니에 추가할 수도 있는
Many to Many관계가 있을 수 있다.
이럴 때는 회원 정보와 제품 정보를 연결해주는
주문 테이블에는 회원 ID와 제품 일련번호를 프라이머리 키로 지정해
연결하면 된다.
이 때 두 테이블의 프라이머리 키를 저장하는 컬럼은
폴인 키(Foreign Key)라는 제약을 걸어야 하는데,
Foreign Key는 테이블간의 관계를 표시해준다.
One : Many
일 대 다의 관계라면 한 쪽에는 Primary Key를,
다수 쪽에는 Foreign Key를 지정해 연결해주고
Many : Many
다 대 다의 관계에는
One : Many : One 으로
중간에 보조적인 테이블을 두고 Foreign Key를 두어 연결해주면 된다.
여기까지 온라인 쇼핑몰의 스키마를 간단하게 만들어봤다.
회원(User), 제품(Product), 주문(Order) 세 개의 테이블에
회원(User)의 레코드는 회원 ID, PW, 주소, 전화번호
제품(Product)의 레코드는 제품명, 제품번호, 색상, 사이즈, 가격
주문(Order)의 레코드는 주문자, 주문제품, 주문번호, 주문 날짜
이렇게 컬럼을 추가했다.
회원의 프라이머리 키는 User ID
제품의 프라이머리 키는 Product ID
주문의 프라이머리 키는 Order Number
로 설정했고,
주문자와 주문제품을 연결해주는
주문 페이지에는
User ID와 Product ID를 폴인 키로 지정했다.
'Back > SQL(DB)' 카테고리의 다른 글
[PGAdmin4] DB 유휴연결이 과할 때 연결된 DB 조회 및 끊기 (0) | 2024.10.11 |
---|---|
Day48_무료로 SQL 공부 및 실습하기 (0) | 2023.07.05 |
Day30_MySQL 연결 끊어짐 (0) | 2023.06.20 |
Day23_html, CSS, 서버, DB 간의 관계성 (0) | 2023.06.14 |
Day22_DBeaver 설치 및 세팅, MySQL 연결, Tool 사용법 (0) | 2023.06.13 |