[Database System] Relational Model
Database System
Data Modeling
Data Modeling
- 컴퓨터에 저장할 데이터의 구조를 논리적으로 표현하기 위한 행위
- 주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업을 말하며, 일반적으로 이를 물리적인 데이터베이스 모델로 환원하여 고객의 요구에 따라 특정 정보 시스템의 데이터베이스에 반영하는 작업을 포함한다
- DB구조 기반으로 데이터, 데이터 관계, 데이터 의미, 데이터 제약 등을 기술하기 위한 개념적 표현 방법
- 시스템의 대상이 되는 업무를 분석하여 정보시스템으로 구성하는 과정에서 업무의 내용과 정보시스템의 모습을 적절한 표기법으로 표현하는 것
즉, 추상적인 데이터베이스 구조를 가시적으로 구현화(형태화)시키는 것으로,
데이터베이스 설계 시 어려움을 도와주는 등의 역할을 한다
Data Modeling의 특징
- Leverage(파급력): 계속 변화되는 데이터들을 변경하는 데 용이하다 → 유지보수의 이점이 있다
- Conciseness(간결한 표현): 설계도면처럼, 가시적인 Diagram으로 표현하여 복잡한 유저들의 요구를 쉽게, 직관적으로 이해할 수 있다
- Data Quality(품질): 데이터들의 중복, 비유연성, 비일관성 등 기존 file system의 단점들을 극복할 수 있다
데이터 모델링의 3단계
📌 개념적 데이터 모델, 논리적 데이터 모델, 물리적 데이터 모델
- 1. 개념적 데이터 모델링
- 업무중심적이며 포괄적인, 추상적 모델링
- 2. 논리적 데이터 모델링
- 구축하고자 하는 업무에 대해 Key, Attribute, Relation 등을 정확하게 표현 (재사용성 높음)
- 3. 물리적 데이터 모델링
- 실제로 DB에 이식할 수 있도록 성능, 저장 등 물리적인 성격까지 고려하여 설계
💡
아래로 내려올수록 구체적이며 위에 있을수록 추상적이다
Relational Data Model
Relation
- Data를 담은 2차원 Table, Row(행)과 Column(열)로 이루어 진다
- 릴레이션의 특징
- 릴레이션의 튜플들은 모두 다르며, 유일한 존재
- 릴레이션의 튜플들 간의 순서는 의미가 X
- 릴레이션의 속성들 간의 순서는 의미가 X
- 튜플들의 삽입, 갱신, 삭제작업이 실시간으로 일어나므로 릴레이션은 수시로 변함
- 속성은 더이상 분해할 수 없는 원자값만 가짐
Relational Data Model - RDM
- Relation을 이용한 Data Model
- 데이터를 표현하는 방법 중 하나인 ‘데이터 모델’의 여러 갈래 중 하나
- 설계의 의미보단 ‘데이터를 어떻게 표현할까’하는 개념적 의미
- RDM의 특징
- 단순하며 유용하다 (실제로 DB implementation)의 대부분이 RM기반)
- SQL(Structured Query Language)이라는 high-level language를 이용하여 Relation의 Data를 원하는 대로, 쉽게 조작할 수 있다
- 설계 측면에서는, E/R(Entity Relationship) 표기법을 기반으로 Entity(개체), Relationship(관계), Attribute(속성)들을 적절하게 RM표기법으로 변형하여 설계 할 수 있다
- 이러한 설계 방식으로 각 Relation 간의 제약(Constraint), 함수 종속(Functional Dependency), Key 등을 명확하게 이해하고 보다 정확한 Relation을 설계할 수 있다
- 구성요소
- Attribute
- table 맨 위에 표시되며 각 column의 이름을 명세
- E/R Model의 entity set과 동일
- Tuples
- table 맨 윗줄을 제외한 나머지 행들을 각각 일컬음
- 각 atturibute에 대해 하나의 구성요소를 가짐
- 괄호와 쉼표를 사용하여 표기한다
- ex) Star Wars, 1977, 124, color
- Instance
- relation의 주어진 모든 tuple들의 집합을 칭함
- Component
- table의 한 ‘칸’을 의미
- table의 한 ‘칸’을 의미
- Attribute
- Schemas
- Data Model에 대해 이야기할 때 항상 ‘Schema(스키마)’를 언급한다
- Schema란, DB를 구성하는 레코드의 크기, 키(key), 레코드들의 관계(relationship), 검색방법 등 ‘자료를 저장하는 구조와 표현법을 정의한 것’이라고 칭할 수 있다
- relation 이름 뒤에 괄호로 묶어 표기하며 (예: Movies(title, year, length, filmType)) Relational database schema (혹은 그냥 Database schema)라고 한다
💡
여기서 attributes들은 list등의 레코드가 아니라 set이다
- 용어
- 필드(Field): 어떤 의미를 지니는 정보의 한 조각으로, DB 시스템에서 처리의 최소 단위를 뜻함
- 레코드(Record): 정보를 처리하는 기본적인 단위로, 필드(혹은 다른 items)의 모임을 뜻함
- 도메인(Domain): 필드 값에 주어지는 값의 유효한 범위(어떠한 조건을 만족하는 범위)를 정해줌 수학에서는 정의역
💡
각 component 값들은 structure, set, list 등의 record 타입이 아닌, atomic해야 한다
또한 같은 column에 존재하는 component 값들 모두 같은 타입(이거나 정해진 값 중 하나)이어야 한다
- Relation은 tuple들의 set이기 때문에 제시된 tuple들의 ‘순서’는 중요하지 않다
- 즉, tuple들의 순서가 바뀌어도 동일한 Relation으로 본다
- 더 나아가 attribute들의 순서 역시 재배치할 수 있다
- 하지만 데이터가 섞이거나 변경되는 일 없이 재배치해야 한다
- 결과적으로 각각의 tuple은 attribute 순서대로 정렬된다
- 그러므로 그림과 같은 두 개의 Relation은 완전히 ‘같다’라고 할 수 있다
💡
스키미와 인스턴스의 구별은 확실히 해야한다
스키마는 Relation의 attribute와 name이며 대개 ‘변하지 않는다’
반면, 인스턴스는 tuple의 집합으로 값이 바로바로 변한다
디자인 시 인스턴스는 고려하지 않는다
다만, 어떤 구조로 설계할 지만 고려하면된다
Functional Dependencies
- Constraint
- E/R design을 Relational schema로 컨버팅 시 Application의 요구에만 Relational schema를 제공하면 큰 위험이 따를 수 있다
- 또한 별개로 빈번히 특정 제약(Constrain)에 얽매일 수 밖에 없다
- 이때 생기는 제약들 중 가장 중요한 것은 ‘Functional dependency’(이하 FD)라고 불리는 unique-value 제약이다
- 이제약은 중복을 제거하는 Database redesign에 있어 아주 위험할 수 있다
- 이 밖에도 도메인 제약조건(Domain constraint), 참조 무결성(Referential integrity) 등이 있다
- 종류
- 도메인 제약 조건(Domain constraint): 각 component들이 Data type/size 등 도메인에 위배되는지에 대한 제약조건
- 엔티티 무결성 제약조건(Entity integrity constraint): Entity의 기본 키(Primary key)를 구성하는 어떤 열도 NULL 값을 포함할 수 없다는 것에 대한 제약조건
- 참조 무결성 제약조건(Referential integrity constrain): 외래 키(Foreign key)의 값은 참조된 relation의 기본 키 값들 중 하나와 같다는 제약조건
💡
널 값(null value)은 공백, 0, 길이가 0인 문자열들과는 다른 말 그대로의 아직 입력되지 않은 데이터를 의미한다
한 개의 Relation으로 모든 데이터를 표현할 수 있다는 이론상으로 좋아보이지만
쿼리 및 갱신이 복잡해지며 제약 조건을 위배할 수 있다는 문제점도 따른다
따라서, 일반적으로 NULL 값은 허용하지 않는 것이 좋다
- Functional dependency
- Relation R의 두 튜플 T1, T2에 대해 n개의 attribute(A1, A2, …, An)값이 같다면 T1, T2의 m개의 attribute(B1, B2, …, Bn)도 반드시 같은 값이다
- 즉, An이 결정되면 그 값에 따른 Bn도 단 하나의 값으로 결정된다
- 표기: A1A2…An -> B1B2…Bn
💡
Functional dependency의 ‘Functional’이란?
마치 정의역의 한 값을 대입하면 그에 해당하는 치역이 단 한개만 나온다는 수학의 ‘function’과 같기 때문
Key
- Key
- Relation 내 다른 모든 attributes를 unique하게 결정하는(hold, identify) attribute(s)이다 → 즉 , 두개의 distinct한 tuple의 모든 attribute값들은 각각 다 다른값이다
- Key 외엔 다른 attribute를 unique하게 결정하는 다른 부분집합이 없어야 한다 → 즉, key는 minimal해야 한다(key가 하나의 attribute A를 포함하면, A를 key라고 한다)
- Primary key
- 여러 key 중 user가 지정한 key를 일컫는다
- Implementation issue가 될 수 있기 때문에 underline으로 명확하게 표시함
- Superkeys(Superset of key)
- Key의 제약이 걸려있는 attribute(들)
- Key는 모두 Superkey이지만, Superkey이면 Key는 아니다 (minimal의 조건)
- Foreign key
- 다른 Relation의 Primary의 Primary key attribute를 참조하는 key로, 참조 무결성 제약조건과 더불어 두 Relation들의 일관성을 유지하는 데 사용한다
- 또한 외래 키는 일종의 ‘key’ 개념이라고 보기엔 다소 무리가 있다
💡
Superkey 중 최소의 Key(s)를
후보키(candidate Key)라고 따로 정의하기도 한다
댓글남기기