2016-08-24 3 views
0

는 내가 지금은 다른 테이블에서 각 가정에있는 사람들의 세부 사항에 대한 다양한 속성을 가지고데이터베이스에있는 모든 테이블의 기본 키를 한 테이블의 외래 키로 참조 할 수 있습니까?

Household(Primary key - hid) 
People(Primary key - pepid) 
ParChildOld(Primary key - pcoid) 
Job(Primary key - empid) 
School(Primary key - schlid) 
Pension(Primary key - penid) 

같은 테이블이있는 곳이 데모 데이터베이스를 만들려고 노력하고 있습니다.

모든 테이블의 기본 키를 가져와 하나의 테이블을 만들고, 예를 들어 AllKeys라고 말하면이 특정 테이블에서 외래 키를 참조 할 수 있습니까?

예 :

AllKeys Table 
Primary Key: AKid 
-- Other columns include 
foreign keys- hid,pepid,pcoid,empid,schid,penid* 

이 물어 바보인지,하지만 경우 나도 몰라,

는 참조가 허용되어 있습니까? 정규화 된 형식으로 간주 될 수 있습니까? 이 방법으로 쿼리를 실행하면 AllKeys 테이블과 다른 테이블 (쿼리에 따라)이 효율적으로 작동합니까?

+0

나는 문제가 무엇인지 정확히 잘 모르겠지만, 당신은 당신의 외래 키가 참조하는 테이블을 정확하게 지정해야합니다. 딱 하나만. (하지만 당신은 같은 컬럼에 많은 외래 키 제약을 가질 수 있습니다. 모두 다른 것들을 가리키고 있습니다) – Thilo

+1

그것은 사용할 수 있지만 모두 ur 요구 사항에 달려 있습니다 .. –

+0

더 중요하게도 적절합니까? 테이블 이름 (AllKeys)은 그러한 사용을 정당화 할 수있는 비즈니스 술어를 나타내지 않습니다. 왜 이것을하고 싶습니까 /이 테이블의 의미는 무엇입니까? – reaanb

답변

1

모든 테이블이 관련되어있을 수 있지만 테이블에 기능적 및 다중 값 종속성이 모두있는 세 번째 및 네 번째 일반 형식이 실패 할 수 있습니다.

한 가구 (hid = 1), 두 부모 (pepid = 1,2), 두 자녀 (pepid = 3,4), 네 부모 (펠드 = 1,2,3,4), 두 직업 (엠피 = 1,2), 둘 다 어린이 (슐 리드 = 1)와 두 개의 연금 (페니드 = 1,2)에 대한 학교가 있습니다.

AKid | hid | pepid | pcoid | empid | schlid | penid 
-----|-----|-------|-------|-------|--------|------ 
1 | 1 | 1  | 1  | 1  | null | 1 
2 | 1 | 1  | 2  | 1  | null | 1 
3 | 1 | 2  | 3  | 2  | null | 2 
4 | 1 | 2  | 4  | 2  | null | 2 
5 | 1 | 3  | 1  | null | 1  | null 
6 | 1 | 3  | 2  | null | 1  | null 
7 | 1 | 4  | 3  | null | 1  | null 
8 | 1 | 4  | 4  | null | 1  | null 

또 다른 문제는 테이블 ParChildOld을 가정하는 것은 부모와 자식 열을 포함, 당신은 pepid가 부모 또는 아동을 말한다 여부해서 AllKeys에서 pcoid 참조 여부를 지정하는 방법이 없습니다입니다.

간단히 말해서,하지 마세요.

+0

감사합니다 .. 예제가 혼란을 해결 .. – Shachi

1

아니요, 복잡성이 증가합니다.

당신은 이러한 테이블이 교착 상태 (DB 엔진을 사용하려고하는지에 따라)를 만들 수 있습니다
  • 인해 광범위한 DML 작업에 FKS 및 전체 DB가 중지를 유지하기 위해 별도의 코드를 작성해야합니다
    1. 대부분의 쿼리가이 테이블에 따라 달라지기 때문에 응답합니다.

    데이터를 정규화 된 형식으로 유지하고 쿼리를 수행하고 유지 관리하십시오.

    테이블에 대한 적절한 인덱싱 (쿼리 방법에 따라)에 중점을 두어야합니다.

    David Scarlett has defined it with a very nice example.

  • +0

    ... 그것을 사용하지 않는 것이 좋습니다 .. 감사합니다. – Shachi

    관련 문제