4

두 번째 정규식이 무엇인지 이해하기 위해 일부 기사를 읽었으며 이해할 수없는 몇 가지 사항이 있습니다. 기사에 두 번째 표준 양식 이해 키

는 그것이 2NF 아닌 말한다 고객 테이블에 here 기본 키에 의해 there are several attributes which don’t completely rely on the entire Customer table primary key라도 좋습니다 때문에 나는 그것이 {고객 ID를, 직원 ID}

enter image description here

우리의 경우 의미가 있다고 생각 {customerId, employeeId}를 후보 키로 선택하면 Customername, customerCity, PostalCode가 후보 키에만 부분적으로 의존하므로 2NF에 종속되지 않습니다. 그러나 후보 키가 단독으로 customerId로 간주되는 경우 Customer 테이블의 모든 열은 customerId 권한에 전적으로 의존합니다 (employeeId는 customerId에 종속되므로).
마찬가지로 고객 번호 만 후보 키가 될 수 있습니다. 후보 키에는 다른 후보 키가 포함될 수 없으므로 {CustomerId, EmployeeId}를 후보 키로 사용할 수 있습니다.

그러므로 우리가 customerId 만 가지고 후보 키를 얻는다면이 테이블은 2NF 형식이 아닙니까?
그러나이 기사에서는 2NF 양식의 표가 한 가지 목적을 달성해야한다고 말하면서이 고객 표는 두 가지 용도로 사용됩니다.
To indicate which customers are called upon by each employee To identify customers and their locations.
그러면이 테이블이 2NF에없는 것 같습니다.
그럼이 테이블의 후보 키는 무엇입니까? this article

enter image description here

이 표는 3NF에에

내 두 번째 질문입니다. TABLE_BOOK 테이블에서 후보 키는 바로 bookId입니까? {bookId, genereId}를 후보 키로 선택할 수 없습니다. 선택하면 genreId에 의존하지 않으므로 가격이 2NF가 아닙니다.

누군가 나를 더 나은

+0

FD는 CK를 결정합니다. 당신은 CK를 "선택"하지 않습니다. CK는 다른 모든 열을 결정하는 열 집합입니다. 표에 행을 넣을 기준을 결정합니다. 그런 다음 열의 각 하위 집합에서 발생할 수있는 모든 상황이 0 개 이상의 열을 결정합니다. 즉 집합에서 열로 FD가 있거나없는 경우입니다. – philipxy

+0

그 기사는 무능력합니다. 어떤 교과서를 사용하고 있습니까? – philipxy

답변

4

이 두 질문은 이와 같은 운동의 한계를 보여 정상화 뒤에이 이론을 이해하는 데 도움이 바랍니다 수 있습니다. 관련 비즈니스 규칙을 미리 알거나 결정할 수없는 경우 효과적인 데이터베이스 설계를 수행하거나 정규화 원칙을 적용 할 수 없습니다. 실제 데이터베이스 설계 상황에서는 주제별 전문가를 인터뷰하고 기존 시스템 및 프로세스를 조사하여 비즈니스 규칙을 결정할 수 있습니다. 웹 사이트의 스케치 된 예제에서는 몇 줄의 샘플 데이터와 애트리뷰트 및 테이블의 모호한 이름이 있습니다. 그런 식으로 파생 된 솔루션은 필연적으로 가설적이며 종종 부정확하고 주관적입니다.

첫 번째 경우에 CustomerID가 고객 테이블의 유일한 후보 키일 경우 2NF를 만족할 것입니다. 이 경우 CustomerID -> EmployeeID라는 CustomerID 당 하나의 EmployeeID 만 가능합니다. 이 예제의 요점은 한 명 이상의 직원이 동일한 고객에게 판매 할 수 있기 때문에 EmployeeID가 동일한 테이블에 포함되어있는 경우 CustomerID만으로는 후보 키로 충분하지 않을 것이라는 점입니다. 이는 샘플 데이터에 표시된 것이 아니지만 {CustomerID, EmployeeID}가 CustomerID 만 사용하는 대신이 테이블의 키로 명시된다는 사실에 암시됩니다.

두 번째 예제는 첫 번째 예제와 매우 비슷합니다.BookID를 키로 선택하면 BookID로 식별 된 각 책은 하나의 GenreID와 하나의 가격 만 연결할 수 있습니다 : BookID-> GenreID, BookID-> Price. {BookID, GenreID}를 키로 정의하면 테이블이 여러 장르와 책 당 여러 가격을 허용하기 때문에 더 이상 종속성 BookID-> GenreID, BookID-> Price가 적용되지 않습니다. 이는 BookID-> Price 종속성과 관련하여 2NF를 위반하는 것입니다.