[SQL] 데이터베이스 설계(1)

업데이트:     Updated:

카테고리:

태그:

🫶 관계 데이터 모델의 릴레이션 특성


  1. 투플의 유일성: 하나의 릴레이션에는 동일한 투플이 존재할 수 없다.

    • 하나의 릴레이션에 똑같은 투플이 있으면 안 되고, 모든 투플에는 다른 투플과 구분할 수 있는 유일한 특성이 있어야 한다.
    • 이처럼 투플을 유일하게 구분하기 위해 선정되는 속성(또는 속성들의 모임)을 키key 라고 부른다.
  2. 투플의 무순서: 하나의 릴레이션에서 투플 사이의 순서는 무의미하다.

    • 투플의 순서가 바뀐다고 다른 릴레이션이 될 수 없고, 순서와 상관없이 투플 내용이 같아야 같은 릴레이션이다.
    • 테이터베이스는 위치가 아닌 내용으로 검색되므로 투플의 순서는 중요하지 않다.
  3. 속성의 무순서: 하나의 릴레이션에서 속성 사이의 순서는 무의미하다.

    • 속성의 순서가 바뀌어도 다른 릴레이션이 될 수 없고, 순서와 상관없이 같은 속성들로 구성되어 있어야 같은 릴레이션이다.
  4. 속성의 원자성: 속성 값으로 원자 값만 사용할 수 있다.

    • 모든 속성 값은 더는 분해할 수 없는 하나의 값, 즉 원자 값만 가질 수 있다. 다시 말해 하나의 속성은 여러 개의 값, 즉 다중 값을 가질 수 없다.
    • 물론 현실에서는 직업이 둘 이상인 고객이 존재할 수 있지만, 관계 데이터 모델은 이런 복잡한 개념을 배제하고 릴레이션을 단순한 구조로 정의하고자 하는 특징이 있어 다중 값을 허용하지 않는다.

🔒 키의 종류


고객 릴레이션

2022-12-20 21 18 28

  1. 슈퍼키

    • 슈퍼키는 유일성의 특성을 만족하는 속성 또는 속성들의 집합이다. 유일성은 키가 갖추어야 하는 기본 특성으로, 하나의 릴레이션에서 키로 지정된 속성 값은 투플마다 달라야 한다는 의미다. 즉, 키 값이 같은 투플은 존재할 수 없다.
    • 고객아이디 속성만으로도 모든 투플을 구별할 수 있으므로 고객아이디와 고객이름 속성 값의 조합도 유일성을 만족한다. 즉, 고객아디를 포함하는 속성 집합은 모두 슈퍼키가 될 수 있다.
    • 슈퍼키 중에는 투플 하나를 유일하게 구별하기 위해서 불필요한 속성 값까지 확인하는 비효율적인 작업이 필요한 경우도 있다. 그래서 꼭 필요한 속성의 집합만으로 투플을 유일하게 구별할 수 있도록 하는 또 다른 키의 개념이 필요한데, 이것이 후보키다.
  2. 후보키

    • 후보키는 유일성최소성을 만족하는 속성 또는 속성들의 집합이다. 최소성은 꼭 필요한 최소한의 속성들로만 키를 구성하는 특징이다.
    • 후보키는 투플을 유일하게 구별하기 위해 꼭 필요한 최소한의 속성들로만 이루어지므로 슈퍼키 중에서 최소성을 만족하는 것이 후보키가 된다.
    • 후보키가 되기 위해 만족해야 하는 유일성과 최소성의 특성은 새로운 투플이 삽입되거나 기존 투플의 속성 값이 바뀌어도 유지되어야 한다.
  3. 기본키

    • 릴레이션에서 투플을 구별하기 위해 여러 개의 후보키를 모두 사용할 필요는 없다. 데이터베이스 설계자나 관리자는 여러 후보키 중에서 기본적으로 사용할 키를 반드시 선택해야 하는데 이것이 기본키다.
    • 만약 후보키가 1개만 존재하면 당연히 해당 후보키를 기본키로 선택해야 하겠지만 여러 개일 경우에는 데이터베이스 사용 환경을 고려하여 적합한 것을 기본키로 선택하면 된다.
  4. 대체키

    • 대체키는 기본키로 선택되지 못한 후보키다. 이름에서 알 수 있듯이 대체키는 기본키를 대신할 수 있지만 기본키가 되지 못하고 탈락한 이유가 있을 수 있다.
  5. 외래키

    • 외래키는 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키다. 다시 말해 다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합이 외래키다.
    • 하나의 릴레이션에는 외래키가 여러 개 존재할 수도 있다. 그리고 외래키를 기본키로 사용할 수도 있고 외래키를 포함하여 기본키를 구성할 수도 있다.
    • 외래키가 다른 릴레이션의 기본키를 참조하는 키라고 정의했지만 반드시 다른 릴레이션을 참조할 필요는 없다. 참조하는 릴레이션이 같을 수도 있다. 즉, 외래키 자신이 속한 릴레이션의 기본키를 참조하도록 외래키를 정의할 수도 있다.
    • 외래키는 기본키를 참조하지만 기본키와 다른 특징이 있다. 기본키가 아니기 때문에 널 값을 가질 수 있는 특징이다.

image

기본키를 선정할 때 고려할 사항


  • 널 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.
  • 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적합하다.
  • 단순한 후보키를 기본키로 선택한다.

🎯 관계 데이터 모델의 제약


관계 데이터 모델에서 정의하고 있는 기본 제약 사항은 키와 관련한 무결성 제약조건이다. 무결성은 데이터에 결함이 없는 상태, 즉 데이터가 정확하고 유효하게 유지된 상태를 말한다. 무결성 제약조건의 주요 목적은 데이터베이스에 저장된 데이터의 무결성을 보장하고, 데이터베이스의 상태를 일관되게 유지하는 것이다.

관계 데이터 모델이 기본으로 포함하고 있는 무결성 제약조건에는 개체 무결성 제약조건과 참조 무결성 제약조건이 있다. 데이터베이스의 상태를 일관성 있게 유지하기 위해서는 두 가지를 모두 만족시켜야 한다.

1. 개체 무결성 제약조건


  • 개체 무결성 제약조건은 기본키를 구성하는 모든 속성은 널 값을 가지면 안 된다는 규칙이다.

  • 개체 무결성 제약조건을 만족시키려면 새로운 투플이 삽입되는 연산이나 기존 투플의 기본키 속성 값이 변경되는 연산을 수행할 때 기본키에 널 값이 포함되는 경우 연산의 수행을 거부하면 된다.

  • 이는 일반 사용자가 직접 수행하는 것은 아니고 데이터베이스 관리 시스템이 자동으로 수행하므로 사용자는 새로운 릴레이션을 생성할 때 기본키를 어떤 속성들로 구성할 것인지만 데이터베이스 시스템에 알려주면 된다.

2. 참조 무결성 제약조건


image

  • 개체 무결성 제약조건이 기본키에 대한 규칙으로 각 릴레이션마다 적용된다면, 참조 무결성 제약조건은 외래키에 대한 규칙으로 연관된 릴레이션들에 적용된다.

  • 참조 무결성 제약조건이란 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙이다.

  • 외래키는 다른 릴레이션의 기본키를 참조하는 속성이고 릴레이션 간의 관계를 표현하는 역할을 한다. 그런데 외래키가 자신이 참조하는 릴레이션의 기본키와 상관이 없는 값을 가지게 되면 릴레이션을 연관시킬 수 없어진다.

  • 그러므로 외래키는 자신이 참조하는 릴레이션에 기본키 값으로 존재하는 값, 즉 참조 가능한 값만 가져야 한다.

  • 참조 무결성 제약조건을 만족시키려면 외래키가 참조 가능한 값만 가져야 하지만, 널 값을 가진다고 해서 참조 무결성 제약조건을 위반한 것으로 판단해서는 안 된다.

  • 고객 릴레이션에 존재하는 투플을 삭제하는 연산은 참조 무결성 제약조건을 위반하지 않는 경우에만 수행한다.

  • 예를 들어 주문 릴레이션에는 주문고객이 Apple인 고객이 주문한 투플이 아직 존재하는데도 고객 릴레이션에서 고객아이디가 Apple인 고객 투플을 삭제하면 존재하지 않는 고객이 주문한 내역이 되어 부정확한 데이터가 된다.

  • 이처럼 연관된 투플이 주문 릴레이션에 남아 있으면, 고객 릴레이션에서 해당 고객의 투플을 삭제하는 연산을 수행하지 않거나 주문 릴레이션의 관련 투플을 함께 삭제하여 참조 무결성 제약조건을 만족시켜야 한다.

  • 그리고 주문고객의 속성 값을 널이나 기본 값으로 지정하는 방법도 사용할 수 있다.

  • 반면, 주문 릴레이션에 존재하는 투플을 삭제하는 것은 어떠한 제약조건도 위반하지 않는다.

  • 고객 릴레이션의 고객 아이디를 변경하는 경우에도 삭제하는 경우와 마찬가지로 동작해야 한다.

📌 출처


[데이터베이스 개론2판_한빛아카데미_김연희 지음_page 132~150]


👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄

맨 위로 이동하기

SQL 카테고리 내 다른 글 보러가기

댓글남기기