2011-01-13 4 views
0

시스템에 3 가지 유형의 사용자가 있습니다.테이블 상속 - 구조 문제

BaseUser(base_user_id, username, password, additional common data) 

base_user_id는 PK이며, 신원

UserType1(user_id, data related to type1 only) 

USER_ID가

UserType2(user_id, data related to type2 only) 

USER_ID는 PK와 FK이다 base_user_id하는 PK와 FK이다 : 각 유형은 나는 다음과 같은 테이블을 만들어 서로 다른 정보 있다 to base_user_id

UserType3(user_id, data related to type3 only) 

user_id는 PK이며 base_user_id는 FK입니다.

이제 각 유형의 사용자와 창고 테이블 간의 관계가 있습니다. type1 및 type2의 사용자는 warehouse_id 만 가져야하고 type3의 사용자는 warehouse_id 및 customer_id가 있어야합니다.

WarehouseOfUser(base_user_id,warehouse_id) 

base_user_id은 구조 2 허용 FK가

문제가

WarehouseOfTyp3User(base_user_id,warehouse_id, customer_id) 

base_user_id이 BaseUser에 base_user_id하는 FK입니다 BaseUser에 base_user_id하는 것입니다

나는이 구조에 대해 생각 보호하려는 것 : 1. type2 또는 type1의 사용자 WarehouseOfTyp3User 데이터에 추가하십시오. 2. type3에서 사용자의 WarehouseOfUser 데이터에 추가하십시오.

그런 경우에 가장 적합한 구조는 무엇입니까?

업데이트 : 모든 사용자 유형에 대해 동일한 ID의 범위를 사용해야합니다. 각 테이블마다 동일한 user_id가 필요하기 때문에 각 사용자마다 별도의 테이블을 만들 수 없습니다.

답변

0

user3 용으로 쉽게 해결할 수 있습니다. user3 테이블에 새 ID 필드를 추가하고, warehouse3 테이블에서 base_user_id를 제거하고, user3Id를 대신 추가하고, user3id를 사용하여 user3 테이블과 외래 키를 추가하십시오. 그래서 baseUser 테이블 참조가 없습니다.

마찬가지로 다른 사용자 테이블에 user1id 및 user2id를 추가하고웨어 하우스 테이블에서 base_user_id를 제거하고 userid 만 추가하고 user1 및 user2 테이블에 링크하기 위해 두 개의 외래 키를 추가하십시오. 이것은 문제 2를 해결해야합니다.

또는 트리거를 사용하려고 할 수도 있지만 특히 트리거가 마음에 들지 않습니다.

+0

내 업데이트를 참조하십시오. 모든 사용자 유형 ID를 동일한 테이블에 넣어야합니다. – Naor

1

이것은 두 번째 대답이지만 매우 다릅니다. 이 방법으로 데이터를 재구성하는 것이 좋습니다.

table BaseUser(baseUserId, password,...) 
table User1(user1Id -> PK, baseUserId -> FK to BaseUser, warehouse1id -> FK to warehouse1 table) 
table User2(user2Id -> PK, baseUserId -> FK to BaseUser, warehouse1id -> FK to warehouse1 table) 
table User3(user3Id -> PK, baseUserId -> FK to BaseUser, warehouse3id -> FK to warehouse3 table, customerId) 
table Warehouse1(warehouse1id...) 
table Warehouse3(warehouse3id...) 
+0

하나의웨어 하우스 테이블에 각 사용자에게 1 : m의웨어 하우스 테이블이 있습니다. 하나의웨어 하우스에 많은 사용자가있을 수 있습니다. – Naor

+0

@Naor : 위의 구조는 여러 사용자가 동일한웨어 하우스 ID를 사용하는 것을 막지 못합니다. 나는 뭔가를 놓친 것 같아. – Schultz9999

+0

죄송합니다, m : m. m. 사용자는 많은 창고를 가질 수 있고 창고는 많은 사용자를 가질 수 있습니다. – Naor