1

현재 MySQL 데이터베이스를 설계하고 있으며 다음 문제에 직면하고 있습니다. 어떻게 해결해야하는지 잘 모르겠습니다. (간체)관계형 데이터베이스 디자인 : 긴 경로를 가진 관계를 디자인하는 방법?

Providers, Addresses, Letters, Faxes 

지금 :

나는 실체가 그래서

Adresses belong to providers, Providers have many Addresses 

Letters belong to Addresses, Addresses have many Letters 

Faxes belong to Letters, Letter have many Faxes 

지금은이 데이터베이스 모델과 ORM과 PHP에서 작업 상황에서 자신을 발견하고를 그 I Fax-Object의 인스턴스와 해당 Provider를로드 할 대상이 있어야합니다.

이제 큰 결합이나 여러 쿼리가 들었을 것입니다. 내가 갈 필요가

경로는 다음과 같습니다 나는이 문제를 해결할 것이다, 팩스 및 공급자 사이의 직접적인 관계를 설정하는 경우는

Fax -> Letter -> Address -> Provider 

는 지금은 생각하고있다. 그러나 이것은 중복되지 않으며 이중 노력으로 희생되지 않을까요? 팩스와 제공자 간의 관계가 변경되면 어떻게 될까요? 그런 다음 두 가지 관계 경로를 조정합니다.

이렇게하는 것이 바람직한 방법은 무엇입니까? 내 예제는 약간 단순화되었습니다. 실제로 나는 가야만하는 길은 조금 더 길다. (: 관계를 식별 N 1을 통해) 각 테이블의 식별 기본 키의 일부가 다른 테이블에 종속이다 - 당신은 무엇을 할 수 있는지

+0

의견에 감사드립니다. – Norwald2

답변

2

는 공급자가 이후 서로 weak entities로 관련 테이블을 만들 수 있습니다. 당신과 같이이 문제를 모델링 할 수 있습니다 :

providers 
----------------- 
provider_id [PK] 
... 


addresses 
----------------- 
provider_id [PK] (FK Referencing providers.provider_id) 
address_id [PK] 
... 


letters 
----------------- 
provider_id [PK] (FK Referencing addresses.provider_id) 
address_id [PK] (FK Referencing addresses.address_id) 
letter_id  [PK] 
... 


faxes 
----------------- 
provider_id [PK] (FK Referencing letters.provider_id) 
address_id [PK] (FK Referencing letters.address_id) 
letter_id  [PK] (FK Referencing letters.letter_id) 
fax_id  [PK] 
... 

이 방법을, 당신은 단지 관련 공급자에 대한 자세한 정보를 찾을 필요가 특정 팩스 기록을 주어, 당신은 단지 하나 개의 테이블과 같이 가입해야합니다

SELECT 
    subj, 
    content 
FROM 
    faxes 
INNER JOIN 
    providers USING (provider_id) 
WHERE 
    fax_id = <faxid here> 
5

음, 관계 및 "보다 자연스러운"키를 식별하면 조인의 필요성을 줄일 수 있습니다. 예를 들어

:

enter image description here

Faxes.ProviderId이 있으므로, 직접 FaxesProviders 가입 할 수 있습니다.

InnoDB tables are clustered부터 반대 방향으로 가면 좋은 실적을 기대할 수 있습니다 (예 : "특정 제공 업체의 모든 팩스 가져 오기").

단점은 ORM을 향한 "친숙한"키와 상대적인 불쾌감입니다. 그래서, 이것은 타협의 문제라고 생각합니다. 그리고 당신은 어느 옵션이 더 좋은지를 결정하는 사람입니다.

+0

고맙습니다. 오프 토픽 : 어떻게 다이어그램을 그리는 지 물어봐도 될까요? – Norwald2

+0

@ Norwald2 "소프트웨어 및 데이터베이스/데이터베이스 모델 다이어그램"드로잉 유형을 사용하는 Microsoft Visio. 그런 다음 PNG로 내보내고 SO에 업로드하십시오. –

+0

그리고 주소가 다른 공급자에 연결될 때 편지함과 팩스 안에 ProviderId의 모든 foreign_keys를 수동으로 업데이트해야한다고 가정 해 봅시다. – Norwald2

관련 문제