이 기능적 종속성이 맞습니까?
문제
이것은 제가 만든 예일 뿐입니다.이것이 내가 가지고 있는 관계라고 가정합니다:
0NF 자동차(CarID PK, (TireID,Tire_Colour, Tire_Punctured), 안전) 여기서 TireID, Tire_Colour, Tire_Punctured는 반복되는 그룹의 일부입니다.
타이어가 모두 펑크나지 않으면 자동차는 안전한 것으로 간주됩니다.
다음 기능 종속성이 올바른가요?
카드ID, TireID, Tire_Punctured -> {안전함}
정규화를 계속하고 관계를 별도의 테이블로 분해하면 테이블 전체에서 Safe의 종속성을 어떻게 표시할 수 있습니까?
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
해결책
고전 정규화 이론은 스키마의 (TireID, Tire_Colour, Tire_Punctured) 부분을 나타내는 것으로 간주하는 경우에만 이 시나리오에 적용될 수 있습니다. *하나의* 속성/열, 해당 속성/열 자체가 다음 작업을 수행합니다. *관계(/테이블) 값 *.현대 이론에서는 관계 가치 속성(Relation-valued attribute, RVA)을 줄여서 표현합니다.
이 경우 두 FD의 carID -> yourRVA 및 yourRVA -> safe가 있습니다.
전자는 우리가 말하는 자동차를 알면 어떤 타이어 세트(및 그 상태)가 관련되어 있는지 알 수 있다는 사실을 표현하고, 두 번째는 타이어 상태에 따라 타이어 상태가 (모두 자체적으로) 결정된다는 사실을 표현합니다. 차가 안전한지 아닌지.
이 디자인(*)을 보다 전통적인 디자인으로 "해제"하면(RVA 속성을 포함된 스칼라 속성으로 교체하여) yourRVA -> 안전한 FD는 더 이상 표현할 수 없습니다. 분명히 yourRVA가 더 이상 존재하지 않기 때문입니다.그러한 디자인에서 그러한 규칙을 지정하는 것은 기능적 종속성의 범위를 벗어나며 수행될 수 없습니다.
(*) SQL 시스템에서 이를 구현하려는 경우 SQL 시스템(및 SQL 언어 자체도)은 일반적으로 기본 테이블에서 RVA를 지원하지 않기 때문에 그렇게 해야 합니다.