2014-04-26 2 views
0

데이터베이스 디자인 문제를 생각해보십시오. 내가 이런 식의 테이블을 가지고 있다고 가정 해 보겠습니다.기본 키를 계산하는 것은 나쁜 생각입니까?

CREATE TABLE LEGACYD.CV_PLSQL_COUNT 
(
    RUN_DTTM DATE NOT NULL, 
    TABLE_NAME VARCHAR (80) NOT NULL, 
    COUNT Number(50) PRIMARY KEY 
); 

PRIMARY KEY를 COUNT로 만드시겠습니까? 일반적으로 기본 키는 무엇을 결정해야합니까?

+2

목적은 무엇입니까? 시퀀스를 사용하지 않는 이유는 무엇입니까? – Mihai

+0

@Mihai - 음, 시퀀스가 ​​왜 더 좋은가요? – Coffee

+2

이 정의는 데이터베이스에서 합법적입니까? 'COUNT'는 예약어입니다. – chrylis

답변

2

중요한 생각입니까? COUNT을 (를) PRIMARY KEY로 지정 하시겠습니까? 일반적으로 기본 키는 무엇을 결정해야합니까?

후보 키는 기능 종속성을 기반으로합니다. 기본 키는 후보 키 중 하나입니다. 후보 키 집합을보고 "이 기본 키 여야합니다."라고 말하는 공식적인 방법은 없습니다. " 이 결정은 공식적인 논리가 아니라 실제적인 문제에 근거합니다.

귀하의 테이블 구조는 이러한 사실을 알려줍니다.

  • COUNT는 고유합니다. 이 테이블에 몇 개의 행이 있더라도 COUNT에 대해 동일한 값을 가진 두 행을 결코 찾을 수 없습니다.
  • COUNT은 TABLE_NAME을 결정합니다. 즉, COUNT에 대한 값이 주어지면 TABLE_NAME에 대해 하나의 값만 영원히 발견하게됩니다.
  • TABLE_NAME은 고유하지 않습니다. TABLE_NAME에 대해 동일한 값을 가진 여러 행을 찾을 것으로 예상됩니다.
  • COUNT는 RUN_DTTM을 결정합니다. 즉, COUNT에 대한 값이 주어지면 RUN_DTTM에 대해 하나의 값만 영원히 발견하게됩니다.
  • RUN_DTTM은 고유하지 않습니다. 우리는 RUN_DTTM에 대해 동일한 값을 가진 여러 행을 찾을 것으로 예상합니다.
  • TABLE_NAME과 RUN_DTTM의 조합은 고유하지 않습니다. TABLE_NAME 및 RUN_DTTM에 대해 동일한 값을 갖는 여러 행을 단일 행에 포함 할 것을 기대합니다.
  • 다른 결정 요인은 없습니다. 즉, TABLE_NAME 값이 주어지면 COUNT 및 RUN_DTTM에 대해 서로 관련이없는 값이 여러 개 발견됩니다. 마찬가지로, RUN_DTTM에 대한 값 또는 열 쌍 {TABLE_NAME, RUN_DTTM}에 대한 값이 주어진 경우.

이러한 모든 사항이 참이면 COUNT가 기본 키가 될 수 있습니다. 그러나 나는 모든 것들이 진실임을 의심합니다.

위험한 진행 방법 인 열 이름만을 기반으로 생각하면 유일한 후보 키는 {TABLE_NAME, RUN_DTTM} 일 가능성이 훨씬 높습니다. RUN_DTTM의 이름이 잘못되었거나 RUN_DTTM의 데이터 유형이 잘못되었을 가능성도 있습니다. 그것이 날짜라면 RUN_DT라고 이름을 붙일 것입니다. 그것이 시간 소인 인 경우, 데이터 유형은 TIMESTAMP 여야합니다.

관련 문제