- 관계형 데이터베이스
- SQL 심화
- 스키마 디자인
구조화된 데이터, 사전에 정의된 열(컬럼, column
, field
)의 데이터 타입대로 데이터
(각 항목에 저장되는 값)가 행(record
, tuple
)으로 축적된 것 = 테이블
, relation
→ 테이블을 사용하는 데이터베이스 = 관계형(relational) 데이터베이스
/* 추가 용어
- 릴레이션의 차수(degree) = 컬럼의 개수
- 릴레이션의 cardinality = 레코드의 개수
- domain = 입력 가능한 값의 범위
- 릴레이션 스키마 = 컬럼 + 컬럼의 순서 및 domain + 릴레이션의 이름(또는, 각 열에 무엇이 들어가야 하는지, 각 열의 의미를 담고 있는 표 머리)
*/
1. 1:1 관계: 자주 사용하지 않음 ← 1:1로 나타낼 수 있는 관계라면 한 테이블에 필드/컬럼(들)을 추가해서 직접 저장하는 것이 나을 수 있음
2. 1:N 관계:
1:N 관계에서 1쪽의 릴레이션에 컬럼값의 원자성을 위배해서 데이터를 저장하는 경우의 문제점
- 열의 크기가 한정되어 있음 → 무한정 여러 값을 가질 수 없음
- 검색/참조 소요 시간 증가, 비효율적
3. N:N 관계:
4. self-referencing(자기 참조) 관계:
/* ERD(개념적 데이터 모델) -> 상용 DBMS에 맞는 논리적 데이터 모델(대표적으로 관계형 데이터 모델)로 변환
단계1) 개체 집합 = 릴레이션, 각 속성 = 컬럼, 개체 집합의 키 속성 중 하나 = 릴레이션의 기본키
*/
- 외래키를 리스트 형식으로 관리하는 필드가 있다면, 어떤 문제가 발생할 수 있을까? -> 나의 질문 = '리스트 형식'은 정확히 어떤 의미이지..?
- self-referencing 관계의 예에서 1명의 user_id가 여러 명의 추천인을 가진다면 어떻게 구성해야 할까?