2013-05-23 6 views
8

Here 내가 발견이 :결정자와 후보 키는 동일하거나 다른 것입니까?

정의 : 데이터베이스 테이블에서의 결정은 당신이 동일한 행의 다른 속성 (들)에 할당 된 값을 결정하는 데 사용할 수있는 속성입니다.

예 : employee_id, first_name, last_name 및 date_of_birth 속성이있는 테이블을 고려하십시오. 이 경우 필드 employee_id가 나머지 세 필드를 결정합니다. 회사는 동일한 성 및/또는 성을 가진 직원을 2 명 이상 가질 수 있기 때문에 이름 필드는 으로 employee_id를 결정하지 않습니다. 마찬가지로 필드는 명의 직원이 같은 생일을 공유 할 수 있기 때문에 employee_id 또는 name 필드를 결정하지 않습니다.

후보 키에도 정의가 적용되지 않습니까?

답변

15

표가 완전히 정규화되지 않은 경우 행렬식이 후보 키가 아닐 수도 있습니다. 실제로 비정상적인 데이터를보다 유용하고 표준화 된 형식으로 변환하는 과정을 설명 할 때는 행렬식을 사용합니다.

CREATE TABLE US_Address (
    AddressID int, 
    Streetline varchar(80), 
    City varchar(80), 
    State char(2), 
    ZIP char(5), 
    StateName varchar(80), 
    StateTax DECIMAL(5,2) 
) 

국가는 StateName 및 StateTax에 대한 결정이지만, 행에 대한 후보 키되지 않습니다 :

이 (분명히 아닌 일반) 테이블을 고려하십시오. 적절한 정규화는 StateName과 StateTax를 US_Address 테이블에서 States 테이블로 이동시킵니다.

자세한 내용은 here을 참조하십시오.

+0

테이블이 BCNF에 있더라도 속성의 모든 하위 집합이 결정 요소입니다. 올바른 것은 "테이블이 [BCNF에서 [그렇지 않으면]]이 아닌 경우, [중요하지 않은 FD의] 행렬식이 후보 키의 [수퍼 셋]이 아닐 수도 있습니다. – philipxy

+0

또한이 링크는 "함수 종속성의 결정자"로서 "결정자"(테이블에서)를 비정상적으로 정의합니다. 그리고 "모든 관계식이 후보 키인 경우에만"BCNF에있는 관계는 "모든 사소한 결정자 [sic]"이어야합니다. – philipxy

6
  • 기본 키 또는 임의의 후보 키도 결정식이며 반대는 참이 아닙니다.
  • 행렬식은 행의 하나 이상의 속성을 고유하게 결정할 수 있습니다.
  • 후보 키는 전체 행을 고유하게 결정할 수 있습니다.

    고객 번호, 이름, 주소, 신용, 영업 담당자 번호, 영업 담당자 이름

    :

here에서 예를 촬영하는 다음과 같은 열이 테이블이 있으라

이고 Sales Rep #Sales Rep Name을 고유하게 결정한다고 가정 해 봅시다. 따라서 Sales Rep #Sales Rep Name에 대한 결정 요인이지만이 표의 후보 키는 아닙니다.

4

TL; DR 아니오 " 결정"및 " 후보 키"동일한 개념이 아니다. 결정 요인은 FD의 입니다. CK는입니다.우리는 또한 CK가 모든 열 & 열을 결정했기 때문에 CK가 테이블의 (FD의) 결정자라는 것을 불합리하게 말할 수 있습니다.


모든 다음 용어/개념 테이블 평행 값과변수를 정의한다. 테이블 변수는 주어진 비즈니스/서비스 환경에서 발생할 수있는 모든 테이블 값이있을 때 FD (기능적 종속성), 행렬식, 수퍼 키, CK (후보 키) 또는 PK (기본 키) 응용 프로그램에는 해당 인스턴스가 있습니다 (테이블 의미에서).

X와 Y 열 집합에 대해 X -> Y을 쓸 수 있습니다. 우리는 X가 세트를 결정 /를 결정이라고 말할 및 Y는 결정이 함수 종속성 (FD) X가에 /의 설정 인 -> Y.

우리 X 말 기능적 결정 Y 및 Y 은 기능적으로X로 결정됩니다. X는 이고 X-> Y의 결정자입니다. {C} -> Y에서 C 은 기능적으로 Y를 결정합니다. X -> {C} X 기능적으로 det C. X가 Y의 수퍼 세트 일 때, X -> Y는 입니다.입니다.

우리는 말할 X -> Y의/을에서 FD 입니다 -> X 각 subrow 값은 Y.에 대한 하나 개의 특정 subrow 값으로 표시 또는 우리는 X가 말할 때 Y 테이블 T에 보유 T. X가 테이블 T의 일부 FD의 결정자 인 경우 X 은 /에서 T의 결정자입니다. 테이블의 모든 사소한 FD가 그 안에 들어 있습니다.

슈퍼 키 테이블 T는 모든 열을 기능적으로 결정하는 열 집합입니다. A 후보 키 (CK)은 더 작은 슈퍼 키가없는 슈퍼 키입니다. 우리는 기본 키 (PK)로 한 CK를 선택하고 다른 CKs의 대체 키를 (AKS)를 호출 할 수 있습니다. 일부 CK에있을 때 열은 소수입니다. 행렬식하기, FD이거나 수

참고 엉성 (에 보유 FD) 테이블. 모든 CK는 테이블의 결정자입니다. (그러나, 테이블에 컬럼의 모든 세트는 결정은 다음과 같습니다.. 자신의, 사소와 유사 모든 열)

(이러한 정의가 정상화 FDS와 테이블의 CKs의에 의존하지 않습니다. 그것을 정규화하는데 사용된다.모든이 보유 적지 않은 FD퍼키입니다 결정 때 테이블은 BCNF에있다.)

SQL 테이블 관계와 SQL 연산자입니다하지 수학적/관계형 대응하지 않습니다. 다른 것들 중에서도 SQL에는 중복 된 행이 있습니다. NULL은 & 3 가지 논리로 구성됩니다. 하지만 용어를 빌려서 SQL 의미를 부여 할 수도 있지만 you can't just substitute those meanings into other RM definitions or theorems and get something sensible or true. 그래서 우리는 convert an SQL design to a relational design, apply relational notions, then convert back to SQL이어야합니다. 우리가 변환했을 경우 어떤 일이 일어날 지 알기 때문에 & 변환을 적용하면 SQL에서 직접 특정 작업을 수행 할 수있는 특수한 경우가 있습니다.

+1

정의는 * 정규화에 의존하지 않지만 정규화를 정의 할 수 있도록 명시 적으로 * 발명 *했습니다. 귀하의 정의는 매우 정확하고 수학적입니다. 그러나 그들은 매우 귀중한 정보를 가지고 있지만 읽는 것은 제 대답보다 훨씬 어렵습니다. 제 대답은 신속하게 OP가 서로 다른 개념이고 서로 다른 개념이 유용하다는 것을 이해하게했습니다. 귀하의 답변은 정식 증명에 관한 것입니다. –

+0

* 용어 *는 질문과 대답에 표시되지만 * 의미는 * 묻지 않습니다. 나는 그것을 해결하려고 노력했다. 그러므로 정의. 그들은 간단하고 정확하지만 애매하지 않습니다. * FD *, * *, * superkey * 및 * CK *에 대한 네 개의 굵은 체 문장은 충분할 것입니다. 관련 용어/개념을 추가했습니다. 나의 선택은 그것이 무엇인지에 대한 명확한 이해 없이는 차이가 인정 될 수 있다는 나의 의심을 반영한다. – philipxy