관계 데이터 모델 관련 기본 용어
- 릴레이션 (relation)
- 관계 데이터 모델에서 하나의 개체에 대한 데이터를 담기 위해 사용하는
행과 열로 이루어진 2차원 테이블
- 관계 데이터 모델에서 하나의 개체에 대한 데이터를 담기 위해 사용하는
- 속성 (attribute)
- 릴레이션의 열
- 데이터의 속성을 가리킨다.
- 예시
- 이름, 성별 등등
- 예시
- 영문대로 어트리뷰트라고도 부른다.
- 투플 (tuple)
- 릴레이션의 행
- 속성의 값을 가리킨다.
- 예시
- 홍길동, 남성 등등…
- 예시
- 도메인 (domain)
- 속성 하나가 가질 수 있는 모든 값의 집합
- 예시
- 성적에 대한 도메인
- A+, A0,A- 등등…
- 성적에 대한 도메인
- 예시
- 도메인을 정해두면 그 이외의 값은 허용하지 않는다.
- 항상 올바른 값만 유지할 수 있다.
- 무결성과 관련된 사항
- 항상 올바른 값만 유지할 수 있다.
- 가능한 값을 일일이 나열하기는 어렵다.
- 일반적으로는 속성의 특성을 고려한 데이터 타입으로 정의한다.
- 예시
- VARCHAR(20), INT 등등…
- 예시
- 일반적으로는 속성의 특성을 고려한 데이터 타입으로 정의한다.
- 속성 하나가 가질 수 있는 모든 값의 집합
- 널 값 (null value)
- 릴레이션의 특정 투플의 속성 값을 모르거나,
적합한 값이 없는 경우에 사용하는 특별한 값
- 릴레이션의 특정 투플의 속성 값을 모르거나,
- 차수 (degree)
- 하나의 릴레이션에서 사용되는 속성의 전체 개수
- 모든 릴레이션은 최소 1 이상의 차수를 유지해야 한다.
- 릴레이션의 차수는 일반적으로 자주 변하지 않는다는 정적인 특징이 있다.
- 영문대로 디그리라고도 부른다.
- 카디널리티 (cardinality)
- 하나의 릴레이션에서 가지고 있는 투플의 전체 개수
- 투플이 없는 릴레이션도 존재할 수 있다.
- 릴레이션의 카디널리티는 자주 변한다는 동적인 특징이 있다.
- 새로운 투플이 삽입되거나 삭제되는 경우가 많기 때문이다.
- 릴레이선 스키마 (relation schema)
- 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의하는 릴레이션의 논리적 구조
- DBMS가 내부적으로 DDL을 이용하여 정의한다.
- 글로 표현할 때는 다음과 같이 표기한다.
- 기본 형식
릴레이션_이름(속성이름1, 속성이름2, 속성이름3, ...)
- 사용 예시
고객(고객아이디, 고객이름, 나이, 등급, 직업, 적립금)
- 기본 형식
- 릴레이션 내포(relaction intension)라고도 부른다.
- 릴레이션 인스턴스 (relation instance)
- 어느 한 시점에 릴레이션에 존재하는 투플들의 집합
- 간단하게 릴레이션으로 줄여서 부르기도 한다.
- 릴레이션 외연(relation extension)이라고 부르기도 한다.
- 데이터베이스 스키마 (database schema)
- 데이터베이스를 구성하는 릴레이션들의 스키마를 모아놓은 것
- 데이터베이스의 전체 구조를 의미한다.
- 특정 데이터베이스 스키마를 설계한다는 것은
필요한 모든 릴레이션의 스키마를 모두 정의하는 것을 의미한다.
- 데이터베이스 인스턴스 (database instance)
- 어느 한 시점에서 데이터베이스에 저장된 데이터 내용의 전체 집합
- 데이터베이스를 구성하는 모든 릴레이션의 인스턴스를 모아놓은 것
릴레이션의 특성
투플의 유일성
- 하나의 릴레이션에는 동일한 투플이 존재할 수 없다.
- 키 (key)
- 투플을 유일하게 구별하기 위해 선정되는 속성 또는 속성들의 모임
투플의 무순서
- 하나의 릴레이션 사이에서 투플 사이의 순서는 무의미하다.
- 릴레이션에는 투플이 삽입 순서대로 저장된다.
- 효율적인 처리를 위해 투플의 순서를 임의로 바꾸기도 한다.
속성의 무순서
- 하나의 릴레이션에서 속성 사이의 순서는 무의미하다.
- 하나의 릴레이션에는 같은 이름의 속성은 존재할 수 없다.
- 속성의 이름은 속성의 의미가 명확하게 드러날 수 있도록 짓는게 중요하다.
속성의 원자성
- 속성 값으로 원자 값만 사용할 수 있다.
- 예시
- 이름
- 옳은 경우
- “홍길동”
- 옳지 않는 경우
- “홍길동,둘리”
- 옳은 경우
- 이름
- 예시
- 원자 값
- 더는 분해할 수 없는 하나의 값
키 (key)
- 관계 데이터 모델에서 정의되는 제약조건
- 릴레이션에 포함된 투플들을 유일하게 해주는 역할
- 키는 단일 속성 또는 복합 속성으로 이루어져 있다.
슈퍼키 (super key)
- 유일성을 만족하는 속성 또는 속성들의 집합
- 유일성 (uniqueness)
- 키가 갖추어야 하는 기본 특성
- 하나의 릴레이션에서 키로 지정된 속성의 값은 투플마다 달라야 하는 것을 의미 한다.
- 키 값이 같은 투플은 존재할 수 없다.
- 수퍼키 중에서는 불필요한 속성의 값까지 확인하는 비효율적인 작업이 필요한 경우도 있다.
- 투플 하나를 유일하게 구별하려는 경우
- 두 개의 투플이 서로 다름을 판단하려는 경우
후보키 (candidate key)
- 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
- 최소성 (minimality)
- 키를 구성하고 있는 여러 속성 중에서 하나라도 없으면 투플을 유일하게 구별할 수 없는,
꼭 필요한 최소한의 속성들로만 키를 구성하는 특성
- 키를 구성하고 있는 여러 속성 중에서 하나라도 없으면 투플을 유일하게 구별할 수 없는,
- 하나의 속성으로 구성된 키는 당연히 최소성을 만족한다.
- 새로운 투플이 삽입되거나 기존 투플의 속성 값이 바뀌어도 유일성과 최소성이 유지되어야 한다.
- 후보키를 선정할 때는 릴레이션 인스턴스만 보고 유일성과 최소성을 판단해서는 안 된다.
- DB가 사용될 현실 세계의 환경까지 염두에 두고
속성의 본래 의미를 정확히 이해한 후 수퍼키와 후보키를 선별해야 한다.
- DB가 사용될 현실 세계의 환경까지 염두에 두고
기본키 (primary key)
- 데이터베이스 설계자가 데이터베이스 관리자가 여러 후보키 중에서 기본적으로 사용할 키
- 릴레이션에서 투플을 구별하기 위해 여러 개의 후보키를 모두 사용할 필요는 없다.
- 후보키가 한 개만 존재하면 해당 후보키를 선택하면 된다.
- 후보키가 여러 개인 경우 데이터베이스 사용 환경을 고려하여 적합한 것을 선택하면 된다.
- 널 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.
- 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.
- 단순한 후보키를 기본키로 선택한다.
- 적은 개수로 구성된 후보키가 당연히 이해하기도 쉽고 처리하기도 쉽다.
대체키 (alternate key)
- 기본키로 선택되지 못한 후보키들
- 대체키는 기본키를 대신할 수는 있지만 기본키가 되지 못하고 탈락된 이유가 있을 수 있다.
외래키 (foreign key)
- 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키
- 다른 릴레이션의 기본킬를 그대로 참조하는 속성의 집합
- 외래키가 되는 속성과 기본키가 되는 속성의 이름은 달라도 된다.
- 외래키 속성의 도메인과 참조되는 기본키 속성의 도메인은 반드시 같아야 한다.
- 도메인이 같아여 연관성 있는 투플을 찾기 위한 비교 연산이 가능하기 때문이다.
- 하나의 릴레이션에는 외래키가 여러개 존재할 수도 있다.
- 외래키를 기본키로 사용할 수도 있다.
- 외래키를 포함하여 기본키를 구성할 수도 있다.
- 외래키 자신이 속한 릴레이션의 기본키를 참조하도록 외래키를 정의할 수도 있다.
- 외래키는 기본키를 참조하지만 기본키가 아니기 때문에 널 값을 가질 수 있다.
- 관련 용어
- 참조하는 릴레이션
- 외래키를 가진 릴레이션
- 참조되는 릴레이션
- 기본키를 가진 릴레이션
- 참조하는 릴레이션
관게 데이터 모델의 제약조건
무결성 제약조건 (integrity constraint)
- 관계 데이터 모델에서 정의하고 있는 기본 제약 사항
- 어느 시점에 DB에 저장된 데이터를 의미하는 DB 상태 또는 DB 인스턴스가 항상 지켜야 하는 중요한 규칙
- DB가 삽압/수정/삭제 연산으로 상태가 변하더라도 반드시 지켜져야 하는 규칙
- 무결성
- 데이터의 결함이 없는 상태
- 데이터를 정확하고 유효하게 유지되는 상태
- 무결성을 유지하기 위해 필요한 세부 규칙도 정의하고 있다.
- DB에 저장된 데이터의 무결성을 보장하고, DB의 상태를 일관되게 유지하는 것이 목적이다.
- 무결성과 보안의 유사점
- DB 내부의 데이터를 보호한다.
- 무결성과 보안의 차이점
- 무결성
- 권한이 있는 사용자의 잘못된 요구에 의해 데이터가 부정확해지지 않도록 보호하느 ㄴ것
- 보안
- 권한이 없는 사용자로부터 데이터를 보호하는 것
- 무결성
- 종류
- 개체 무결성 제약조건
- 기본키를 구성하는 모든 속성 값은 널 값을 가질 수 없다.
- 참조 무결성 제약조건
- 외래키는 참조할 수 없는 값을 가질 수 없다.
- 개체 무결성 제약조건
개체 무결성 제약조건 (entity integrity constraint)
- 기본키를 구성하는 모든 속성은 널 값을 가지면 안 된다는 규칙
- 개체 무결성 제약조건을 만족시키려면
새로운 투플이 삽입되는 연산과
기존 투플의 기본키 속성 값이 변경되는 연산이 발생할 때
기본키에 널 값이 포함되는 상황에서는 연산의 수행을 거부하게 한다.- DBMS가 자동으로 수행하니 새로운 릴레이션을 생성할 때마다
기본키를 어떤 속성들로 구성할 것인지 DBMS에 알려주면 된다.
- DBMS가 자동으로 수행하니 새로운 릴레이션을 생성할 때마다
참조 무결성 제약조건 (referential integrity constraint)
- 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙
- 외래키가 자신이 참조하는 릴레이션의 기본키와 상관이 없는 값을 가지게 되면
두 릴레이션을 연관시킬 수 없으므로 외래키의 의미가 없어진다.- 외래키는 자신이 참조하는 릴레이션에 기본키 값으로 존재하는 참조 가능한 값만 가질 수 있다.
- 널 값을 가진다고 해서 참조 무결성 제약조건을 위반한 것으로 판단해서느 ㄴ안된다.
- DB의 상태가 변해도 참조 무결성 제약조건을 만족시켜야 한다.