1

저는 직원과 호텔에서 일하는 데 소비 한 시간을 추적하는 관계를 분해했습니다. 나는 기능 의존성이에서이 테이블은 세 번째 정규 형식입니까?

F:(A->D, E->F, AB->C, B->E, BA->E) 

나는 다음과 같은 3 개 테이블

1. 
Employees: 
national insurance number(A) 
eName(D) 
PRIMARY KEY(A) 


2. 
Works at: 
contract Number(B) 
Hours(C) 
national insurance number(A) 
PRIMARY KEY(B, AND A) 

3. 
Hotel: 
contract Number(B) 
hotel Number(E) 
hotel Location(F) 
PRIMARY KEY(B) 
만들었을 발견
R(A, B, C, D, E, F) 

R(national insurance number, contract Number, hours, eName, hotel Number,  hotel Location) 

은 다시 다음과 같이 원래의 관계는

세 번째 테이블에는 호텔의 위치와 수를 결정할 수있는 기본 키가 있습니다. 그러나 호텔 번호는 위치를 결정할 수 있습니다. 호텔 번호만으로 호텔 위치를 새 테이블로 옮겨야합니까? 그것은 더 많은 공간을 사용하지만, 3RD 정규 형식에 도달해야합니까?

+1

은 '호텔'테이블의 테이블 같은 계약 번호 '에서 작품'의 계약 번호는 다음과 같은

그래서, 나에게 표준화 된 양식을 볼 것인가? –

+0

계약서를 직원과 계약서를 연결하는 테이블의 작업과 함께 자체 테이블로 계약 할 것을 기대합니다. 호텔에 단 하나의 계약 만있을 수있는 경우 계약 번호는 호텔에 적용되지만 계약이 만료되거나 호텔이 여러 계약을 체결 할 수있는 경우는 어떻게됩니까? 이 경우 해당 조항을 규율하는 호텔 - 계약 연계 테이블이 있습니다. –

+0

어쨌든 계약 번호가 호텔 테이블의 PK가 될 것 같지 않습니다. –

답변

1

FD에서 파생 된 FD가 정확하고 완전하다고 가정하면 Hotel(B,E,F) { B->E, E->F }HotelContract(B,E) { B->E }Hotel(E,F) { E->F }으로 나눌 필요가 있습니다. 공식적으로 { B->E, E->F }에서 B은 (단독) 키이고 E은 "비 프라임"속성 (즉, 키의 일부가 아님)이므로 F은 키의 비 소수 속성을 통해 전이에 의존합니다. 이것은 제 3 정규형을 위반합니다.

3NF를 위반하는 스키마 Hotel(B,E,F) { B->E, E->F }을 사용하면 "삭제 예외"가 발생합니다. 즉, 튜플을 Hotel에서 삭제할 때 필요한 것보다 더 많은 정보가 손실됩니다. Hotel 다음과 같은 확장을한다고 가정하면 튜플 (b2,e2,f2)을 삭제

Hotel 
B | E | F 
---|---|--- 
b1 | e1| f1 
b2 | e2| f2 

는, 당신은 그 호텔 e2f2에있는 정보를 느슨하게, 당신은 단지 계약을 삭제하고 싶어하지만.

더 나쁜, 당신은 같은 호텔 e1 예를 f1f2를 들어, 두 개의 서로 다른 위치를 얻는 것을 허용 할 것이다 당신이 실제로, FD E->F 생략

다음
Hotel: 
contract Number(B) 
hotel Number(E) 
hotel Location(F) 
PRIMARY KEY(B) 

로 계획을 번역 할 때 :

Hotel 
B | E | F 
---|---|--- 
b1 | e1| f1 
b2 | e1| f2 -> permitted by your scheme, but not intended! 

따라서 인트로에서 권장하는대로 표를 분할하십시오.

1

당신이 옳은 것처럼 보입니다. 호텔은 별도의 테이블에 있어야합니다.

또한 직원 한 명 이상이 한 개 이상의 호텔에서 계약을 할 가능성이 있으며 호텔 한 곳에 직원에 대한 계약이 두 개 이상있을 수 있습니다.

1. Employees: 
    national insurance number(A) 
    eName(D) 
    PRIMARY KEY(A) 

2. Hotels: 
    hotel Number(E) 
    hotel Location(F) 
    PRIMARY KEY(E) 

3. Contracts: 
    contract Number(B) 
    hotel Number(E) 
    PRIMARY KEY(B) 
    FOREIGN KEY(Hotels.E) 

4. Works at: 
    work at(G), 
    national insurance number(A) 
    contract Number(B) 
    Hours(C) 
    PRIMARY KEY(G) 
    FOREIGN KEY(Employees.A) 
    FOREIGN KEY(Contracts.B) 
+0

정규화는 새로운 열 이름을 도입하지 않습니다. 또한 FD가 무엇인지에 대해 이야기 했으므로 "가능성이 있다고 생각하는 것"이 ​​부적절합니다. – philipxy