본문 바로가기

Computer Science/Database

데이터베이스 기초 2. 관계형 데이터베이스(Relational datamodel)

728x90
  • 데이터베이스 시스템의 데이터 모델 중 가장 많이 사용되는 것이 관계 데이터 모델이다.
  • 관계 데이터 모델은 테이블 형태로 데이터 간의 관계를 표현한다.

Relation

  • relation은 row와 column으로 구성된 table을 말한다.

  • 위 테이블은 고객의 주문 내역 정보를 담고 있는 릴레이션이다.
  • 이 릴레이션은 주문번호, 고객코드, 제품코드, 수량, 가격이라는 5개의 집합으로 구성되어 있다.
  • 각 집합의 값은 각각 다음과 같이 원소를 가지고 있다.
    • 주문번호 = { ABCDE00001, ABCDE00002 }
    • 고객코드 = { 123456, 654321 }
    • 제품코드 = { 1002, 1004 }
    • 수량 = { 10, 4 }
    • 가격 = { 500000, 40000 }
  • 첫 번째 행은 5개의 집합에서 각각 원소 1 개씩 선택하여 만들어졌는데, 이것이 원소들이 맺은 관계(relationship)이다.
  • 릴레이션 스키마는 릴레이션의 데이터 구조를 뜻하며 저장된 데이터는 인스턴스라고 표현한다.

  • 릴레이션 스키마의 요소
    • 속성(attribute) ; 릴레이션 스키마의 열
    • 도메인(domain) : 속성이 가질 수 있는 값의 집합, 더 나눌 수 없는 값(atomic)
      • 수량, 가격, 단가는 원화 표시이기 때문에 둘다 ‘자연수’라는 도메인을 같는다.
      • 즉, 이 릴레이션에서 수량, 가격, 단가는 ‘자연수’를 도메인으로 하는 attribute이다.
      • 속성은 그 column의 원소들이 나타내는 값의 의미를 나타내고 도메인은 어떤 값들이 그 원소가 될 수 있는 지를 정의한다.
    • 차수(degree) : 속성의 개수
    • 투플(tuple) : 릴레이션의 행
    • 카디날리티(cardinality) : 투플의 수
    • 릴레이션(relation) : 투플의 집합(set of tuples)

  • 릴레이션 용어는 일반적으로 잘 쓰이지 않는다. 같은 의미로 통용되는 다른 단어가 주로 쓰인다.
    • table, row, column, header, data, record, field 정도의 용어가 자주 쓰인다.
    • 위 표에 나온 정의대로 쓰인다기 보다는 table의 header, table의 field, table의 record 처럼 파일시스템 용어를 섞어 쓰기도 한다.

릴레이션의 특징

  • 속성은 단일 값을 가진다.
  • 속성은 서로 다른 이름을 가진다.(하지만 도메인은 같을 수 있다.)
  • 한 속성의 값은 모두 같은 도메인 값을 가진다. (= 도메인이라는 집합에 있는 값을 가져야 한다)
  • 속성의 순서는 상관없다. 속성의 순서가 달라도 릴레이션 스키마는 같은 것으로 본다. (주문번호, 고객번호) 와 (고객번호, 주문번호)는 같은 스키마이다.
  • 릴레이션 내의 중복된 투플은 허용하지 않는다.
    • 유니크한 키 값이 없으면 테이블 내에 같은 데이터를 가진 행이 존재할 수 있다.
    • 하지만 이 경우에도 저장된 데이터들은 사용자가 입력하지 않았더라도 시스템 내부에선 각각 다른 index 번호를 가지기 때문에 사실은 다른 투플이라고 볼 수 있다.
  • 투플의 순서가 달라도 같은 릴레이션이다. (즉, 정렬과 상관없다.)

Super Key

  • relation에서 tuples를 unique하게 식별할 수 있는 attributes set(즉, 속성 하나여도 되고, 여러 개의 속성의 집합이어도 된다는 것)
  • 위 테이블에선 ‘주문번호’가 super key가 될 수 있다.
  • 마찬가지로 (주문번호, 고객코드) 또한 super key가 될 수 있다.
  • 다만 키를 구성하는 속성이 많으면 그만큼 관계 표현이 복잡해지므로 최소한의 속성 집합에 관심을 갖는다.

Candidate Key

  • 후보키(candidate key)는 투플을 유일하게 식별할 수 있는 속성의 최소 집합. 즉 위 테이블에선 ‘주문번호’만 해당된다. (주문번호, 고객코드)는 고객코드가 없어도 되기 때문에 ‘주문번호’가 유일하게 하나의 속성으로 투플을 식별할 수 있는 속성이므로 후보키가 될 수 있다.

Primary Key

  • 투플들을 unique하게 식별하기 위해 채택된 candidate key
  • 위에서는 ‘주문번호’만 될 수 있다.

Unique Key = Alternate key

  • Primary Key가 아닌 candidate key

Foreign Key

  • 다른 relation의 PK(primary key)를 참조하는 attributes set
  • 위 주문정보 테이블에서 ‘고객코드’는 고객 정보 테이블이 있고 고객코드가 그 테이블의 PK라면 foreign key에 해당한다.

Constraints(제약조건)

  • domain constraints : attribute의 value는 해당 attribute의 domain에 속한 value여야 한다.
    • ‘가격’의 도메인은 자연수이기 때문에 ‘10.25’와 같은 값이 올 수 없다.
  • key constraints : 서로 다른 tuples은 같은 value의 key를 가질 수 없다.
    • 즉 주문정보 테이블에서 ‘주문번호’가 같을 수 없다.
  • NULL value constraint : attribute가 NOT NULL로 명시되어 있다면 NULL을 가질 수 없다.
  • Entity integriry contraint : PK는 value에 NULL을 가질 수 없다.
    • NULL이 가능하다면 투플을 식별할 수가 없게 되기 때문이다.
  • Referential integrity contraint : FK와 PK와 도메인이 같아야 하고 PK에 없는 values를 FK가 값으로 가질 수 없다.
    • 즉, ‘주문정보’ 테이블의 ‘고객코드’는 ‘고객’ 테이블의 ‘고객코드’와 도메인이 같아야하고 ‘고객’ 테이블에 있는 ‘고객코드‘값만을 참조할 수 있다.
728x90