릴레이션 10

릴레이션 분해(decomposition)과 제1정규형

01. 릴레이션 분해란? 릴레이션 분해는 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것입니다. 릴레이션을 분해하면 중복이 감소되고 갱신 이상이 줄어드는 장점이 있는 반면에, 바람직하지 않은 문제들을 포함하여 몇 가지 잠재적인 문제들을 야기할 수 있습니다. 첫째, 일부 질의들의 수행 시간이 길어집니다. 릴레이션이 분해되기 전에는 조인이 필요 없는 질의가 분해 후에는 조인을 필요로 하는 질의로 바뀔 수 있습니다. 둘째, 분해된 릴레이션들을 사용하여 원래 릴레이션을 재구성하지 못할 수 있습니다. 셋째, 어떤 종속성을 검사하기 위해서는 분해된 릴레이션들의 조인이 필요할 수 있습니다. 따라서 이런 잠재적인 문제와 중복성 감소 간의 균형을 고려해야 합니다. 다음의 학생 릴레이션은 함수적 종속성들이 만족됩니..

릴레이션 정규화에 대해서

데이터베이스를 설계하여 생성하는 업무를 맡았다고 가정해봅시다. 좋은 데이터베이스를 설계하는 것은 매우 중요한 작업입니다. 부주의한 데이터베이스 설계는 제어할 수 없는 데이터 중복을 야기하여 여러 가지 갱신 이상(update anomaly)을 유발합니다. 그렇다면 어떻게 좋은 데이터베이스를 설계해야 할까요? 데이터베이스에 어떤 릴레이션을 생성해야 할까요? 각 릴레이션에 어떤 애트리뷰트를 만들어야 할까요? 01. 릴레이션의 정규화 좋은 관계 데이터베이스 스키마를 설계하는 목적은 ➀ 정보의 중복과 갱신 이상이 생기지 않도록 하면서, ➁ 정보의 손실을 막고 실세계를 훌륭하게 나타내며 ➂ 애트리뷰트들 간의 관계가 잘 표현되는 것을 보장하며, ➃ 어떤 무결성 제약조건의 시행을 간단하게 하여 ➄ 효율성 측면을 고려하..

논리적 설계:ER스키마를 관계 모델의 릴레이션들로 사상

04. 데이터베이스 설계 사례 (2) 개념적 설계 단계에서 ER 모델을 사용하여 조직체의 데이터베이스 응용을 위한 개념적 스키마를 생성하였으면, 논리적 설계 단계에서는 ER 스키마를 관계 데이터 모델의 릴레이션들로 사상해야 합니다. ER 데이터 모델의 기반으로 한 상용 DBMS가 없으므로, 또한 대부분의 DBMS는 관계 데이터 모델을 기반으로 하기 때문에 ER 스키마를 관계 데이터 모델로 변환해야 합니다. 또한 ER 스키마에는 엔티티 타입과 관계 타입이 존재하지만 관계 데이터베이스에는 엔티티 타입과 관계 타입을 구분하지 않고 릴레이션들만 들어 있습니다. 릴레이션으로 사상할 대상이 ER 스키마에서 엔티티 타입인지 또는 관계 타입인지, 엔티티 타입이라면 정규 엔티티 타입인지 또는 악한 엔티티 타입인지, 관계..

SQL의 데이터베이스 갱신의 세가지 명령어

오라클의 SQL의 데이터 조작어에는 데이터베이스를 갱신하는 세 가지 명령이 있습니다. INSERT문은 릴레이션에 새로운 투플을 삽입하고, DELETE문은 릴레이션에서 기존의 투플을 삭제하며, UPDATE문은 기존의 투플의 애트리뷰트 값들을 수정합니다. 01. INSERT문에 대하여 INSERT문은 기존의 릴레이션에 투플을 추가합니다. 참조되는 릴레이션에 투플이 추가되는 경우에는 참조 무결성 제약조건의 위배가 발생하지 않으나 참조하는 릴레이션에 투플이 추가되는 경우에는 참조 무결성 제약조건을 위배할 수 있습니다. INSERT문은 릴레이션에 한 번에 한 투플씩 추가하는 것과 한 번에 여러 개의 투플들을 추가할 수 있는 것으로 구분합니다. 한 번에 한 투플씩 추가하는 INSERT문의 구문은 다음과 같습니다. ..

SQL의 SELECT문에 대하여(3)

03. SELECT문의 여러 가지 검색과 연산 ► 범위를 사용한 검색 원하는 투플들의 조건을 명시하기 위해서 WHERE절에 범위를 나타내는 연산자인 BETWEEN을 사용할 수 있습니다. BETWEEN의 장점은 SQL문의 WHERE절을 좀 더 읽기 쉽게 만들어준다는 것입니다. ► 리스트를 사용한 검색 IN은 리스트 내의 값과 비교합니다. [IN]의 부정은 [NOT IN]입니다. 다음의 WHERE절은 DNO의 값이 (1,2,3)에 속하는지를 검사합니다. WHERE DNO IN (1,2,3) 따라서 이 WHERE절은 OR를 사용하여 다음과 같이 표현할 수 있습니다. IN을 사용하면 다수의 OR을 사용할 필요가 없습니다. WHERE DNO = 1 OR DNO = 2 OR DNO = 3 ❶ IN Q. 1번 부서나..