2014-01-06 2 views
1

Microsoft Access 테이블에서 하나의 레코드에 여러 개의 외래 키를 가져 오는 중 문제가 발생했습니다.Microsoft Access 2013 - 동일한 레코드의 여러 외래 키

나는이 필드 두 테이블을 가지고 :

표 1 : 소유자 분야 : 소유자 ID (기본 키) 이름 성

표 2 : 선박 필드 : 선박 ID (기본 키) 선박 이름

표 1과 표 2 사이의 관계를 만들어야합니다. 누구가 배를 소유하고 있는지 보여줍니다. 소유자 ID (외래 키)라고 불리는 표 2에 번호 필드를 추가하려고 시도했지만 이것이 정상적으로 작동합니다.

작업 예 :

Table 1 – Owners     Table 2 – Ships 
Owner ID (Primary Key)__   Ship ID (Primary Key) 
First Name    \   Ship Name 
Last Name    \________Owner ID (Foreign Key) 

불행하게도 표 2에서 내 배는 동시에 (5까지) 여러 소유자를 가질 수 있습니다. 내가 표 2에

가 작동하지 연결 필드의 시리즈를 만들려고 할 때 내 문제는 발생 :

Table 1 – Owners      Table 2 – Ships 
Owner ID (Primary Key)__    Ship ID (Primary Key) 
First Name    \   Ship Name 
Last Name    \   Owner1 ID (Foreign Key) 
          \______/ Owner2 ID (Foreign Key) 
           \ Owner3 ID (Foreign Key) 

나는 선박의 소유자 테이블에서 가져온 여러 소유자를 표시 할 수 있도록 사람이 어떤 해결 방법을 추천 할 수 표?

도움 주셔서 감사합니다.

+0

작동하지 않는 기능은 무엇입니까? 5 개의 필드를 추가하고 각각의 _each_에 대한 관계를 정의하면 _separately_ (!) 잘 작동합니다. 귀하의 다이어그램은 나에게 당신이 그들 중 5 명을 실제로 만들려고 할 때 당신이 1 개의 관계를 만들려고 한 느낌을 준다/ – oerkelens

+1

약간 노력한 후에도 쉽게 작동 할 수 있지만 기존 관계를 편집하지 않도록해야합니다 (액세스 내가 원한다면 나에게 물었다.). 대신 관계형 다이어그램에 table_1의 복사본을 추가하고 거기에 관계를 만듭니다. 혼란스럽고 imho는 불필요하지만 작동합니다. :) – oerkelens

답변

0

문제는 Access에서 Nullable FK를 허용하지 않으므로 소유자의 수에 관계없이 모든 소유자 필드를 채워야하는 것입니다.

내가 생각할 수있는 유일한 해결책은 ShipID 및 OwnerID 열 (선박 및 소유자 테이블에 대한 FK)이있는 ShipOwner 테이블을 소개하는 것입니다. 그러면 원하는만큼 소유자를 확보 할 수 있습니다.

Pros: You can add things like %Owned if that matters 
Cons: The software has to enforce the limit of 5 owners 

Biggest Pro : 작동합니다.

건배 -

편집 : 첫 번째 파라가 잘못 : 액세스가 당신이 널 FK의를 추가 할 수 없습니다. 그러나 나는 아직도 여기에 좋은 제안입니다. 반복 그룹 (소유자 1 - 5)은 정규화 규칙에 위배되며이 제안은 정규화됩니다.

+1

Access에서 언제 nullable 필드를 허용하지 않으므로 외래 키입니까? 나는 그것의 근원을보고 싶다. – oerkelens

+0

그것은한다. 그러나 나는 긴 숫자를 생각한다. 그리고 나는 그것을 시험해 보았을 때 null로 설정하지 않았다. (Access 2013). –

+0

나는 틀렸다. 나는 다시 점검했다. 답변 됨 –

1

데이터베이스 설계가 잘못되었습니다.

당신이 설명하는 경우 선박과 소유자 사이에 다 대다 관계가 있습니다. 관계는 관계형 모델의 "관계 테이블"로 변환되어야합니다.
이 경우 : 2 개의 필드가있는 [Ownership] 테이블은 관련 테이블의 2PP (Primary Key)입니다.PK는

  • 소유자 (OwnerId는, 이름이, 성) PK가 OwnerId
  • 소유입니다 (ShipId ShipId입니다

    • 선박 (ShipId, ShipName, 무엇이든) : 즉

      , 당신은 3 테이블이 필요 , 소유자 ID) PK는 2 개의 FK로 구성됩니다.
  • +0

    5 명 이상의 소유자가있을 수 있다면 귀하의 권리입니다. 하지만 그 OP의 질문에 대답하지 않습니다 :) 내 고객 지정 테이블을 참조하는 테이블에 Customer ShipFrom 및 CustomerShipTo 포함 할 때 같은 문제가 발생할 수 있습니다. – oerkelens

    +0

    @oerkelens : 올바른 디자인으로 질문 *이 존재하지 않을 것입니다 *. 그리고 나는 내 견해를 유지합니다. 5 명의 소유자에 대한 제한은 적절한 제 3 또는 제 4 NF에 대한 면제를 구성하지 않는 제한 조건입니다 –

    관련 문제