2. 관계 모델
2. 관계 모델(23.10.12)
- 관계 모델은 IBM 연구소의 Dr. Codd가 제안
- 계층형 모델과 네트워크 모델의 자리를 빠르게 대체
Dr.Codd의 12법칙
- 규칙 0. 시스템은 데이터베이스뿐만 아니라 관리 시스템으로 서도 관계 모델의 자격을 얻어야 한다.
- 규칙 1. “정보 규칙” – 데이터베이스 내의 모든 정보는 한 가지 방법으로만 표시되어야 한다.
- 규칙 2. “보장된 접근 규칙” – 모든 데이터는 모호함이 없이 접근되어야 한다.
- 규칙 3. “널 값의 체계적인 처리” – DBMS는 각 필드에 대해 null을 처리할 수 있어야 한다.
- 규칙 4. “관계형 모델에 기반한 액티브 온라인 데이터베이스 카탈로그” – 시스템은 관계형 형태의 온라인 카탈로그를 제공해야 한다.
- 규칙 5. “종합적인 데이터 보조언어 규칙” – 시스템은 적어도 하나의 관계형 언어를 지원해야 한다.
- 규칙 6. “뷰 갱신 규칙” – 뷰는 시스템에 의해 갱신 가능해야 한다.
- 규칙 7. “고급 삽입, 갱신, 제거” – 시스템은 집합에 대해 한번에 삽입, 갱신, 제거를 지원해야 한다.
- 규칙 8. “물리적 데이터 독립성” – 물리적 레벨에서 변경이 일어나더라도 그 구조에 기반한 응용 프로그램은 변경되어서는 안된다.
- 규칙 9. “논리적 데이터 독립성” – 논리적 레벨에서 변경이 일어나더라도 그 구조에 기반한 응용 프로그램은 변경되어서는 안된다.
- 규칙 10. “무결성 독립성” – 무결성 제약조건들은 데이터베이스 카탈로그에 저장되어야 하며 응용 프로그램들과는 별도로 규정되어야 한다.
- 규칙 11. “분산 독립성” – 데이터베이스의 분산은 데이터베이스 사용자에게 영향을 주지 않는다.
- 규칙 12. “무전복 규칙” – 시스템이 저급 인터페이스를 제공하더라도, 그 인터페이스는 시스템을 파괴할 수 없어야 한다.
Relation Schema
- 관계형 모델에서 데이터베이스의 구조와 제약조건에 대한 Specification
- Relation 이름
필드(Field)
또는열(Column)
, 또는속성(Attribute)
의 이름도메인(Domain)
의 이름
개체(Entity)
와 개체의 특성을 나타내는속성(Attribute)
,개체 간의 관계(Relation)
, 이들의제약 조건(Constraint)
을 기술한 것명세 예시
$학생 ( 학번 : 문자열, 이름 : 문자열, 나이 : 정수 )$
Relation Instance
레코드(Record)
라고도 불리는투플(Tuple)
의 집합투플(Tuple)
- 릴레이션 스키마에서 정의된 각
속성(필드)
로 정의되며, 하나의 데이터 묶음을 나타냅 - 릴레이션 인스턴스에서는 각 투플을 하나의
행(row)
으로 구성
- 릴레이션 스키마에서 정의된 각
- 릴레이션 인스턴스의 투플 수:
카디널리티(Cardinality)
- 릴레이션 인스턴스의 속성(필드) 수:
차수(Degree 또는 Arity)
- 릴레이션 인스턴스의 투플 순서는 중요하지 않음
Domain
- 하나의 속성이 가질 수 있는 동일한 유형의 원자값들의 집합
- 릴레이션 스키마는 릴레이션 인스턴스의 각 필드의 도메인을 명세(도메인 제약조건)
- 프로그래밍 언어 관점에서 필드의 데이터 타입을 의미
R(fi:D1, … fn:Dn)
을 릴레이션 스키마라고 하고, 각fi, 1 ≤ i ≤ n
에 대한 이름이Di
인 도메인에 대한 집합을Domi
이라고 할 때, 도메인 제약조건을 만족하는 R의 인스턴스는 다음과 같이 n개의 필드를 가진 투플의 한 집합이 됨{ <fi: di, … fn: dn> | d1 ∈ Dom1, … dn ∈ Dom
lab
- MySQL과 MySQLWorkbench 를 설치
- Relation 생성
Category(CategoryNo: Integer, CategoryName: String)
Product(ProductNo: Integer, ModelNumber: String, ProductName: String, Price: float, CategoryNo: Integer)
- Relation 수정
- 필드 데이터 수정, 테이블 이름 변경
1
2
3
4
5
6
7
8
mysql> select * from Category;
+------------+--------------+
| CategoryNo | CategoryName |
+------------+--------------+
| 1 | Novel |
| 3 | History |
+------------+--------------+
2 rows in set (0.00 sec)
무결성 제약조건
- 저장된 정보의 품질에 따라 데이터베이스의 품질이 결정됨
- DBMS는 부정확한 정보가 입력되는 것을 방지하는 수단을 가지고 있어야 함
- 무결성 제약조건(Integrity Constraint)
- 데이터베이스 스키마에 명세 되어 있는 조건
- 데이터베이스 인스턴스에 저장될 수 있는 데이터를 제한
적법한(Legal) 인스턴스
데이터베이스 스키마에 명세 된 무결성 제약조건들을 모두 만족하는 데이터베이스 인스턴스
- DSBMS는 무결성 제약조건들을 집행(enforce)하여 데이터베이스를 접합하게 만듦
개체 무결성
- 한 개체(투플)는 다른 개체들과 명확히 구분되어야 함
- 모든 릴레이션에 속한 필드들의 최소 부분집합이 각 투플에 대해 고유 식별자가 되어야 함
- 키 제약조건(Key Constraint)으로 개체 무결성을 유지
- 릴레이션에 속한 필드들의 최소 부분 집합이 각 투플에 고유한 식별자가 되어야 함
- 키 제약조건에서 투플을 식별하는 부분집합을 키(Key)라고 함
- 키(Key)
- 적법한 인스턴스의 서로 다른 두 투플은 한 키에 속하는 모든 필드 전체에 대해 동일한 값을 가질 수 없음
- 키를 구성하는 필드 집합의 어떠한 부분집합도 투플에 대해 유일한 식별자가 될 수 없음
수퍼 키(Super Key)
유일성을 만족하는, 필드들의 부분 집합
후보 키(Candidate Key)
유일성과 최소성을 만족하는 수퍼키 집합의 부분 집합
기본 키(Primary Key)
특정 투플을 구별하기 위해 후보 키에서 선택된 고유한 식별자
참조 무결성
- 한 릴레이션에 저장된 정보와 다른 릴레이션에 저장된 정보가 연결되는 경우가 대부분
- 참조 관계에 있는 두 릴레이션의 데이터는 항상 일관된 값으로 유지되어야 함
- 한 릴레이션의 데이터가 수정될 경우 참조 관계에 있는 데이터 역시 수정되어야 함
- 한 릴레이션의 데이터가 삭제될 경우 참조 관계에 있는 데이터 역시 삭제되어야 함
- 외래 키 제약조건(Foreign Key Constraint)으로 참조 무결성을 유지
- 한 릴레이션의 필드가 다른 릴레이션의 키를 참조
- 참조하는 릴레이션의 데이터 변경에 따른 무결성을 유지
- 외래 키(Foreign Key)
- 한 릴레이션의 키 중에서 다른 릴레이션의 투플을 유일하게 식별할 수 있는 키
- 한 릴레이션의 투플에서 다른 릴레이션의 투플을 참조하기 위해 사용
Product 테이블의 spec
Product(ProductNo: Integer, ModelNumber: String, ProductName: String, Price: float)
Category 테이블의 spec
Category(CategoryNo: Integer, CategoryName: String)
Product → Category 로 참조 설정
Product(ProductNo: Integer, ModelNumber: String, ProductName: String, Price: float, CategoryNo: Integer)
Category
의 데이터 무결성을 위해 릴레이션에 존재하지 않는 데이터는product
릴레이션에 존재하지 않아야함.Category
에Science
분류가 없다면product
릴레이션에도Science
없어야한다.- 이걸 위반하면 데이터 무결성의 문제가 생긴다.
객체 무결성
- 릴레이션 스키마는 릴레이션 인스턴스의 각 필드에 저장될 수 있는 데이터의 범위인 도메인을 명세
- 릴레이션의 각
속성(필드)
에는 범위에 지정된 일관된 데이터만 저장되어야 하며, 이를도메인 무결성(Domain Integrity)
SQL
- 구조적 쿼리 언어
- 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계
- SQL 문법의 3가지 분류
데이터 정의 언어(DDL, Data Definition Language)
데이터 정의 언어는 테이블과 인덱스 구조를 관리합니다. DDL의 가장 기본적인 요소는
CREATE
,ALTER
,DROP
등입니다.데이터 조작 언어(DML, Data Manipulation Language)
데이터 검색, 등록, 삭제, 갱신을 위해 사용되며, 가장 기본적인 요소는
SELECT
,INSERT
,UPDATE
,DELETE
입니다. 가장 많이 사용되는 데이터베이스 언어 요소입니다.데이터 제어 언어(DCL, Data Control Language)
데이터베이스에서 데이터에 대한 액세스를 제어하기 위한 데이터베이스 언어 또는 데이터베이스 언어 요소이며, 기본적인 요소는
GRANT
,DENY
,REVOKE
입니다.