-
[SQLite] 관계형 데이터베이스Software/SQLite 2017. 9. 2. 17:35반응형
관계형 데이터베이스의 장점
- 데이터의 중복성과 종속성을 최소화
- 여러 테이블에 데이터를 나누어 저장
- 테이블 간의 관계를 통해 원하는 정보를 조회
관계형 데이터베이스의 설계 원칙
- 중복을 최소화 : 데이터 중복성(redundancy)과 일관되지 않는 데이터 종속성(dependency) 제거 규칙에 따라 테이블 설계
- 테이블 간 관계는 공통된 값을 통해 서로 연결 - 기본키(Primary Key)
관계형 데이터베이스 실제 예시
현재 'cars' table에는 자동차 이름과 가격, 그리고 해당 자동차의 브랜드 이름이 각각의 Column으로서 존재하고 있다. 문제는 자동차 브랜드의 이름이 바뀌거나 기업 합병등을 통해 해당 자동차의 브랜드가 바껴 버리는 경우 자동차의 이름과 가격은 그대로지만 브랜드를 바꾸기 위해 해당 Table을 변경해야 한다.
name price brand
---------- ---------- ----------
sonata 1000000 Hyundai
K5 1000000 Kia
320d 1500000 BMW
520d 1700000 BMW C220 1500000 Benz
E330 1800000 Benz
Morning 500000.356 Kia
K3 NULL Kia
Morning 500000 Kia
A4 1500000 Audi
이러한 문제를 해결하기 위해 "cars" Table과는 별도의 'carBrands' Table을 만들어 브랜드 관련 데이터를 관리하도록 하면 된다. 그리고 'brand_id'와 같은 기본키(primary key)를 두어 두 Table을 연결하도록 하면 된다. 그렇게 되면 단순히 브랜드 명이 바뀌는 경우 불필요하게 'cars' Table을 변경할 필요가 없게 된다. ('carBrand' Table의 'name' 값은 변경되었지만 'cars'와 'carBrands'를 연결해주는 기본키(primary key)는 변경되지 않았기 때문...)
* cars 테이블의 brand_id와 같이 다른 테이블(carBrand)의 기본키를 참조하는 키를 외래키(foreign key)라고 한다.
carBrand
cars
brand_id brandName
---------- ----------
1 Hyundai
2 Kia
3 BMW
4 Benz
5 Audi
brand_id name price
---------- ---------- ----------
1 sonata 1000000
2 K5 1000000
2 Morning 500000
2 K3 700000
3 320d 1500000
3 520d 1700000
4 C220 1500000
4 E330 1800000
5 A4 1500000
이처럼 관리하고자 하는 데이터의 특성에 따라 Table을 나누어 관리하고 이 들을 적절히 잘 연결 시켜 줄 수 있다면 데이터 종속성과 중복성을 제거하는 데 큰 도움이 된다.
반응형'Software > SQLite' 카테고리의 다른 글
[SQLite] 외래키 (Foreign Key) (0) 2017.10.15 [SQLite] 기본키 (Primary Key) (0) 2017.09.16 [SQLite] 그룹화 (1) 2017.08.21 [SQLite] 내장함수 - 2 (0) 2017.08.20 [SQLite] 내장 함수 - 1 (0) 2017.08.14 댓글