관계형 데이터베이스: Difference between revisions
From IT Wiki
(새 문서: ;Relational Database ;데이터 관계를 중심으로 구현한 데이터베이스 * 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로...) |
No edit summary |
||
(12 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
[[분류:데이터베이스]][[분류:정보처리기사]] | |||
;Relational Database | ;Relational Database | ||
;데이터 관계를 중심으로 구현한 데이터베이스 | ;데이터 관계를 중심으로 구현한 데이터베이스 | ||
Line 4: | Line 5: | ||
* 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성 | * 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성 | ||
== 데이터 표현 == | == 이론적 기반 == | ||
* 데이터를 표(Table)형태로 표현 | 관계형 모델은 집합론에 기반한다. 수학에서 집합은 고유한 객체들의 모음인데, 이와 비슷하게 데이터베이스의 관계(또는 표)는 튜플(행)의 집합으로 볼 수 있으며, 각 튜플은 속성(열)과 값으로 구성된다. 관계형 데이터 모델은 '''E.F. 코드 박사'''(Dr. E.F. Codd)가 1970년에 발표한 논문 “A Relational Model for Large Shared Data Banks”에서 처음 제안되었다. 이 논문은 데이터베이스 분야의 혁신을 가져왔으며, 코드 박사는 이 공로로 '''[[튜링 상|ACM 튜링 상]]'''을 수상했다. | ||
== 관계형 데이터 표현 == | |||
이론적 용어와 실무적 용어 2가지가 사용된다. 먼저 이론적 용어를 다루고, 이후 각각에 해당하는 실용적 용어를 다룬다. | |||
=== 이론적 용어 (수학적 모델에서 정의된 용어) === | |||
* 릴레이션의 데이터를 표(Table)형태로 표현 | |||
* '''튜플(Tuple)''' | * '''튜플(Tuple)''' | ||
** 릴레이션을 구성하는 각 | ** 릴레이션을 구성하는 각 행(row)을 의미 | ||
** 속성 값의 모임으로 구성 | ** 속성 값의 모임으로 구성 | ||
** 파일 구조에서 레코드 | ** 파일 구조에서 레코드 | ||
** 튜플의 수 = 카디날리티(Cardinality) | ** '''튜플의 수 = 카디날리티(Cardinality)''' | ||
* '''속성(Attribute)''' | * '''속성(Attribute)''' | ||
** 릴레이션을 구성하는 각 열 | ** 릴레이션을 구성하는 각 열 | ||
** 데이터베이스를 구성하는 가장 작은 논리적 단위 | ** 데이터베이스를 구성하는 가장 작은 논리적 단위 | ||
** 파일 구조의 데이터 필드 | ** 파일 구조의 데이터 필드 | ||
** 속성의 수 = 디그리(Degree) | ** '''속성의 수 = 디그리(Degree)''' | ||
* '''도메인(Domain)''' | * '''도메인(Domain)''' | ||
** 속성이 취할 수 있는 원자값들의 집합 | ** 속성이 취할 수 있는 원자값들의 집합 | ||
** ex) 속성이 '성별'일 경우 도메인은 '남자 또는 여자' | ** ex) 속성이 '성별'일 경우 도메인은 '남자' 또는 '여자' | ||
* '''인스턴스(Instance)''' | * '''인스턴스(Instance)''' | ||
** 속성들에 값이 부여되어 튜플을 이룬 형태 | ** 속성들에 값이 부여되어 튜플을 이룬 형태 | ||
** 릴레이션에 존재하는 데이터를 지칭 | |||
* '''릴레이션 상태(State of the Relation)''' | |||
** 특정 시점에서 릴레이션의 상태 | |||
=== 실용적 용어 (SQL 표준 및 현대 RDBMS에서 사용되는 용어) === | |||
{| class="wikitable" | |||
!이론적 용어 | |||
!실용적 용어 | |||
|- | |||
|Relation | |||
|테이블(Table) | |||
|- | |||
|Attribute | |||
|칼럼 헤더(Column Header) | |||
|- | |||
|Domain | |||
|칼럼이 가질 수 있는 값들(All possible Column Values) | |||
|- | |||
|Tuple | |||
|행(Row) | |||
|- | |||
|Schema of a Relation | |||
|테이블 정의(Table Definition) | |||
|- | |||
|State of the Relation | |||
|데이터가 삽입된 테이블(Populated Table) | |||
|} | |||
== 릴레이션의 특징 == | |||
* 모든 튜플은 서로 다른 값을 가진다. | |||
** 동일한 값이 저장될 수 있으나 별개의 값으로 해석 | |||
* 하나의 릴레이션에서 튜플의 순서는 무의미하다. | |||
** 실무적으로 삽입된 순서이지만, 이는 보장되지 않음 | |||
* 각 속성은 릴레이션 내에서 유일한 이름을 가진다. | |||
* 각 속성은 순서를 가질 수 있지만 순서는 중요한 의미를 갖지 않는다. | |||
** 관리적 용도로 순서를 정해놓을 수 있지만 데이터의 논리적 성격과 무관 | |||
* 모든 속성 값은 원자 값(atomic value)을 가진다. | |||
== | == [[데이터베이스 키]] == | ||
* '''슈퍼 키(Super Key)''' | * '''슈퍼 키(Super Key)''' | ||
** 어떤 릴레이션의 어떠한 튜플들도 같은 값을 가지지 않는 속성, 또는 속성들의 조합 | |||
** 유일성 O / 최소성 X | |||
* '''후보 키(Candidate Key)''' | * '''후보 키(Candidate Key)''' | ||
Tuple을 유일하게 식별하기 위해 사용되는 | ** Tuple을 유일하게 식별하기 위해 사용되는 속성들의 부분집합 | ||
** 유일성 O / 최소성 O | |||
* '''기본 키(Primary Key)''' | * '''기본 키(Primary Key)''' | ||
** 후보키 중 선정된 Key | |||
** 중복된 값 X / Not Null / 유일성 O / 최소성 O | |||
* '''대체 키(Alternate Key)''' | * '''대체 키(Alternate Key)''' | ||
** 후보 키 중 선정된 기본 키를 뺀 나머지 키들 | |||
** 유일성 O / 최소성 O | |||
* '''외부 키(Foreign Key)''' | * '''외부 키(Foreign Key)''' | ||
다른 | ** 다른 릴레이션의 Primary Key를 참조하는 속성 | ||
** 중복된 값 X / Not Null / 유일성 O / 최소성 O | |||
== [[데이터베이스 무결성|무결성 제약 조건]] == | |||
;Integrity Constraint | |||
* '''도메인 제약조건(Domain constraints)''' | |||
** 각 속성은 반드시 각 속성의 도메인에 속하는 원자값(atom value)이어야 한다. | |||
** 각 칼럼은 그 칼럼의 데이터 타입, 범위에 만족하는 값이어야 한다. | |||
* '''NULL 제약조건(Constraints on NULLS)''' | |||
** 각 칼럼은 일반적으론 NULL값을 가질 수 있다. | |||
** NOT NULL로 설정되어 있다면 NULL값을 가질 수 없다. | |||
* '''키 제약조건(Key constraints)''' | |||
** 기본 키(Primary key)나 unique 칼럼은 유일성을 가지고 있어야 한다. | |||
* '''개체 무결성 제약조건(Entity integrity constraints)''' | |||
** 기본 키(Primary key)는 NULL일 수 없다. | |||
** unique칼럼은 중복되지 않거나, NULL이거나 둘 중 하나이다. | |||
* '''참조 무결성 제약조건(Referential integrity constraints)''' | |||
** 참조하는 릴레이션의 튜플들의 외부 키(Foreign key) 속성값은 참조되는 릴레이션 튜플의 기본 키(Primary key) 속성값과 일치하거나 NULL 값을 가져야 한다. | |||
== [[데이터베이스 정규화]] == | |||
*비정규형 : 아래 모든 경우를 만족하지 않는 경우 | |||
*1NF : 모든 도메인이 원자값. 한 에트리뷰트에는 하나의 값만 들어가야 한다. | |||
*2NF : 부분적 함수 종속을 제거해야 한다. 즉, 완전 함수적 종속 관계를 만족한다. | |||
*3NF : 이행적 종속 관계를 제거 해야 한다. | |||
*BCNF : 결정자가 모두 후보키인 경우. 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없다. | |||
*4NF : 다치 종속성이 제거 되어야 한다. | |||
*5NF : 조인 종속성이 만족 되어야 한다. |
Latest revision as of 06:16, 15 September 2024
- Relational Database
- 데이터 관계를 중심으로 구현한 데이터베이스
- 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성
이론적 기반[edit | edit source]
관계형 모델은 집합론에 기반한다. 수학에서 집합은 고유한 객체들의 모음인데, 이와 비슷하게 데이터베이스의 관계(또는 표)는 튜플(행)의 집합으로 볼 수 있으며, 각 튜플은 속성(열)과 값으로 구성된다. 관계형 데이터 모델은 E.F. 코드 박사(Dr. E.F. Codd)가 1970년에 발표한 논문 “A Relational Model for Large Shared Data Banks”에서 처음 제안되었다. 이 논문은 데이터베이스 분야의 혁신을 가져왔으며, 코드 박사는 이 공로로 ACM 튜링 상을 수상했다.
관계형 데이터 표현[edit | edit source]
이론적 용어와 실무적 용어 2가지가 사용된다. 먼저 이론적 용어를 다루고, 이후 각각에 해당하는 실용적 용어를 다룬다.
이론적 용어 (수학적 모델에서 정의된 용어)[edit | edit source]
- 릴레이션의 데이터를 표(Table)형태로 표현
- 튜플(Tuple)
- 릴레이션을 구성하는 각 행(row)을 의미
- 속성 값의 모임으로 구성
- 파일 구조에서 레코드
- 튜플의 수 = 카디날리티(Cardinality)
- 속성(Attribute)
- 릴레이션을 구성하는 각 열
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 파일 구조의 데이터 필드
- 속성의 수 = 디그리(Degree)
- 도메인(Domain)
- 속성이 취할 수 있는 원자값들의 집합
- ex) 속성이 '성별'일 경우 도메인은 '남자' 또는 '여자'
- 인스턴스(Instance)
- 속성들에 값이 부여되어 튜플을 이룬 형태
- 릴레이션에 존재하는 데이터를 지칭
- 릴레이션 상태(State of the Relation)
- 특정 시점에서 릴레이션의 상태
실용적 용어 (SQL 표준 및 현대 RDBMS에서 사용되는 용어)[edit | edit source]
이론적 용어 | 실용적 용어 |
---|---|
Relation | 테이블(Table) |
Attribute | 칼럼 헤더(Column Header) |
Domain | 칼럼이 가질 수 있는 값들(All possible Column Values) |
Tuple | 행(Row) |
Schema of a Relation | 테이블 정의(Table Definition) |
State of the Relation | 데이터가 삽입된 테이블(Populated Table) |
릴레이션의 특징[edit | edit source]
- 모든 튜플은 서로 다른 값을 가진다.
- 동일한 값이 저장될 수 있으나 별개의 값으로 해석
- 하나의 릴레이션에서 튜플의 순서는 무의미하다.
- 실무적으로 삽입된 순서이지만, 이는 보장되지 않음
- 각 속성은 릴레이션 내에서 유일한 이름을 가진다.
- 각 속성은 순서를 가질 수 있지만 순서는 중요한 의미를 갖지 않는다.
- 관리적 용도로 순서를 정해놓을 수 있지만 데이터의 논리적 성격과 무관
- 모든 속성 값은 원자 값(atomic value)을 가진다.
데이터베이스 키[edit | edit source]
- 슈퍼 키(Super Key)
- 어떤 릴레이션의 어떠한 튜플들도 같은 값을 가지지 않는 속성, 또는 속성들의 조합
- 유일성 O / 최소성 X
- 후보 키(Candidate Key)
- Tuple을 유일하게 식별하기 위해 사용되는 속성들의 부분집합
- 유일성 O / 최소성 O
- 기본 키(Primary Key)
- 후보키 중 선정된 Key
- 중복된 값 X / Not Null / 유일성 O / 최소성 O
- 대체 키(Alternate Key)
- 후보 키 중 선정된 기본 키를 뺀 나머지 키들
- 유일성 O / 최소성 O
- 외부 키(Foreign Key)
- 다른 릴레이션의 Primary Key를 참조하는 속성
- 중복된 값 X / Not Null / 유일성 O / 최소성 O
무결성 제약 조건[edit | edit source]
- Integrity Constraint
- 도메인 제약조건(Domain constraints)
- 각 속성은 반드시 각 속성의 도메인에 속하는 원자값(atom value)이어야 한다.
- 각 칼럼은 그 칼럼의 데이터 타입, 범위에 만족하는 값이어야 한다.
- NULL 제약조건(Constraints on NULLS)
- 각 칼럼은 일반적으론 NULL값을 가질 수 있다.
- NOT NULL로 설정되어 있다면 NULL값을 가질 수 없다.
- 키 제약조건(Key constraints)
- 기본 키(Primary key)나 unique 칼럼은 유일성을 가지고 있어야 한다.
- 개체 무결성 제약조건(Entity integrity constraints)
- 기본 키(Primary key)는 NULL일 수 없다.
- unique칼럼은 중복되지 않거나, NULL이거나 둘 중 하나이다.
- 참조 무결성 제약조건(Referential integrity constraints)
- 참조하는 릴레이션의 튜플들의 외부 키(Foreign key) 속성값은 참조되는 릴레이션 튜플의 기본 키(Primary key) 속성값과 일치하거나 NULL 값을 가져야 한다.
데이터베이스 정규화[edit | edit source]
- 비정규형 : 아래 모든 경우를 만족하지 않는 경우
- 1NF : 모든 도메인이 원자값. 한 에트리뷰트에는 하나의 값만 들어가야 한다.
- 2NF : 부분적 함수 종속을 제거해야 한다. 즉, 완전 함수적 종속 관계를 만족한다.
- 3NF : 이행적 종속 관계를 제거 해야 한다.
- BCNF : 결정자가 모두 후보키인 경우. 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없다.
- 4NF : 다치 종속성이 제거 되어야 한다.
- 5NF : 조인 종속성이 만족 되어야 한다.