1

이것은 내가 만든 예입니다. 가정이 내가 가지고있는 관계입니다 : 자동차 이 기능 종속성이 맞습니까?

0NF

(CarID PK (TireID, Tire_Colour, Tire_Punctured), 안전) TireID, Tire_Colour, Tire_Punctured가 반복 그룹의 일부입니다.

타이어에 구멍이 뚫리지 않으면 자동차는 안전하다고 판단됩니다.

다음과 같은 기능 의존성이 올바른 다음과 같습니다

CardID, TireID, Tire_Punctured -> {안전} 내가 정상화를 계속했고, 내가 종속성을 표시 할 방법을 별도의 테이블로 관계를 분해하면

테이블 전체에 걸친 안전. 당신이 (TireID, Tire_Colour, Tire_Punctured)를 * 단일 * 속성/컬럼을 나타내는 등 스키마의 일부, 그리고 그 속성/컬럼을 생각하는 경우에만

Sample Data 
------------ 
CarID | TireID | Tire_Colour | Tire_Punctured | Safe | 
    1   23    black    false   true 
    1   11    blue    false   true 
    1   29    black    false   true 
    1   1    black    false   true 

    2   4    red    false   false 
    2   34    purple    false   false 
    2   24    black    true    false 
    2   64    black    false   false 
+0

안전은 타이어가 아닌 자동차의 속성입니다 : CarID -> Safe. BCNF 솔루션에 대한 나의 시도는 Car {CarID *, Safe}, Tire {TireID *, CarID, Tire_Colour, Tire_Punctured}입니다. * = 열쇠. – sqlvogel

+0

안전은 계산 필드가 되겠습니까? 또는 데이터베이스를 사용하는 사용자에게 각 행의 안전 값을 수동으로 설정하도록 남겨 두겠습니다. – Jafnee

+0

항상 타이어 상태에서 직접 파생되는 경우 계산하는 것이 더 좋습니다. – sqlvogel

답변

2

고전 정상화 이론은이 시나리오에 적용 할 수있는 자체는 * 관계 (/ 표) 값 *을 차지합니다. 관계형 속성, RVA는 현대 이론에서 짧게 나타냅니다.

그런 경우 FD의 carID -> yourRVA 및 yourRVA -> safe가 있습니다.

전자는 우리가 말하는 자동차가 어떤 타이어가 관련되어 있는지 (그리고 그 상태) 알 수 있다는 사실을 나타내고 두 번째는 타이어 상태가 결정한다는 사실을 표현합니다 그 자체가) 차가 안전한지.

RVA 속성을 포함하는 스칼라 속성으로 대체하여이 디자인 (*)을보다 전통적인 방식으로 "푸는"경우, yourRVA -> safe FD는 더 이상 표현할 수 없습니다. 왜냐하면 분명히 yourRVA 더 이상 존재하지 않다. 이러한 설계에서 이러한 규칙을 지정하는 것은 기능적 종속성의 범위를 벗어나며 수행 할 수 없습니다.

(*) SQL 시스템에서이를 구현하려는 경우 SQL 시스템 (및 SQL 언어 자체)이 일반적으로 기본 테이블에서 RVA를 지원하지 않으므로 강제로 수행해야합니다.