2010-12-30 6 views
2

나는 가사 테이블, 성인 테이블 및 사용자 테이블의 세 가지 테이블을 가진 데이터베이스를 가지고 있습니다. 세대 테이블에는 두 개의 외래 키, iAdult1ID 및 iAdult2ID가 있습니다. Users 테이블에는 iUserID 기본 키가 있고 Adult 테이블에는 해당 iUserID 외래 키가 있습니다. Users 테이블의 열 중 하나는 전자 메일 주소 인 strUsername입니다.두 번째 테이블의 단일 기본 키에 연결된 하나의 테이블에서 여러 개의 외래 키

나는 가구와 관계가있는 성인을위한 전자 메일 주소를 검색 할 수있는 쿼리를 작성하려고합니다. 그래서 두 가지 질문이 있습니다. 모든 값이 null이 아니라고 가정하면 어떻게 할 수 있습니까?

사실, iAdult2ID는 null 일 수 있습니다.이 작업을 수행하는 쿼리를 작성할 수 있습니까?

도움 주셔서 감사합니다. 더 자세한 정보가 필요하면 알려주세요.

답변

3

예, 단지 두 번 같은 테이블에 가입 왼쪽 :

select u1.strUsername, u2.strUsername 
FROM Household h 
LEFT JOIN Adult a1 on a1.ID = h.iAdult1ID 
LEFT JOIN Users u1 on u1.ID = a1.iUserID 
LEFT JOIN Adult a2 on a2.ID = h.iAdult2ID 
LEFT JOIN Users u2 ON u2.ID = a2.iUserID 
+0

감사합니다! 매력처럼 작동합니다! – croker10

2

를 허용 대답은 내가 원래 문제는 데이터가 얼마나의 결과임을 지적하는 것이 도움이 될 것이라고 생각 올바른 동안 모델.

이상적으로 AdultIds를 HouseHold 테이블에서 HouseholdId와 iAdultId를 모두 포함하는 HouseholdAdults라는 새 테이블로 이동해야합니다. 그런 다음 한 세대에 한 명 이상의 성인을 가질 수 있습니다.

내가 무슨 뜻인지 설명하는 스크린 샷.


alt text


현재는 성인과 가정에 적어도 하나없이 두 개 이상의 사이의 관계를 제한했다. 어른이나 셋이없는 집은 어떨까요? 또한 성인 기록을 추가하기 전에 세대 기록을 추가 할 수 없습니까? 성인 관계에 관한 정보는 가구에 어디에 저장합니까? 예를 들어, 누가 주인인지, 세입자인지, 이사했을 때 등. 기본적으로 관계와 관련된 모든 것.

이것들은 모두 현재로서는 문제가 아니지만 생각해 볼만한 가치가 있습니다.

이 리모델링은 데이터를 쿼리 할 때 발생하는 문제를 해결합니다. 집 테이블과 성인 테이블에 가입 할 수있는 새로운 테이블을 사용하면 다음과 쉽게 관계를 쿼리 할 수 ​​있습니다.

SELECT Adult.iAdultId, Household.HouseHoldId, Users.strUserName FROM Adult 
INNER JOIN HouseholdAdults ON Adult.iAdultId = HouseholdAdults.iAdultId 
INNER JOIN Household ON HouseholdAdults.HouseholdId = Household.HouseHoldId 
INNER JOIN Users ON Adult.iUserId = Users.iUserId 

더 자세히 설명하는 링크가 있습니다.
Many-to-Many relations
Database normalization

+0

감사합니다. 필자가 작성한 다른 데이터베이스의 구조를 염두에 둡니다. 그들이 합법적 인 것처럼 나의 목적을 위해, 나는 가구 당 2 명 이상의 성인을 할 수 없다. – croker10

+1

문제 없습니다. 이 제한은 아마도 비즈니스 제약 조건이며 응용 프로그램 계층에 더 잘 배치 될 것입니다. 나는 위에서 언급 한 다른 장점들에 대해서만 개조를 재고 할 것이다. 어쨌든, 그냥 생각 :) – bic

관련 문제