2017-10-22 7 views
0

우선, 나는 C & P와 같이 보이는 "기술적 인"답변으로 몇 가지 유사한 질문을 읽었습니다. 명확한 예가 필요합니다. 정규화는 3NF입니다.식별하고 식별 할 수없는 관계

이 프로젝트에서는 관리 패널에서 도시와 구역을 만들어야하며 각 구역은 도시에 속해야합니다. 또한 사람들을 다른 이름으로 동일한 호텔을 알고 있으므로 호텔을 만들고 해당 구역에 지정하고 마지막으로 각 호텔의 별칭을 만듭니다. 테이블 hotels 및 hotels_alias는 자동 완성 입력을 채 웁니다.

가격 계산은 지역에 따라 서비스 (표준, 개인 및 VIP)에 따라 이루어지며 승객 수와 계절에 따라 승객 당 가격을 계산할 논리 또는 테이블을 아직 만들지 않습니다 계절. 이것이 아래 다이어그램에없는 이유입니다.

내가 찾은 좋은 설명은 좀 의심이 그러나 What's the difference between identifying and non-identifying relationships?

입니다.

Example 1

hotels_alias 차례로 영역 테이블 없이는 존재할 수 없습니다 테이블의 호텔 없이는 존재할 수 차례이 도시없이 존재하지 않습니다. 도시는 여러 구역으로 나누어 져 있으므로 호텔은이 구역에 속하고 도시의 일부인 구역은 호텔에 속하며 호텔이 없으면 존재할 수 없습니다.

지금까지 도시는 강하거나 모회사이고 구역, 호텔 및 호텔 _ 별칭은 하위 실체입니다.

EER 다이어그램에서 식별 관계가 있음을 알 수 있습니다. 첫 번째 질문은 : 아이 엔티티가 자신의 ID를 가지고 있음에도 불구하고 올바른 것인가? 이 ID는 PK, NN 및 AI입니까? 일부 예에서,이 하위 엔티티는 자체 ID를 가지지 않으므로 PK는 N : N (zones_has_servicees) 관계와 같이 관련 테이블의 두 FK로 구성됩니다.

실제로 부모 테이블에서 자신을 식별 할 수 있어야하므로 하위 테이블에 고유 ID가 필요하지 않은 경우 어떻게 영역이나 호텔 또는 호텔 별칭을 업데이트하거나 삭제할 수 있습니까? ?

DELETE FROM zones WHERE name = 'name' 

이 정보가 맞습니까? 이름 열에 대한 색인을 생성해야합니까? 어떤 장점이 있다면, 자체 ID 대신 이름 열을 사용하면 어떤 이점이 있습니까? 자식 테이블이 자체 ID를 가지고이 ID와 부모 테이블의 ID를 사용하여 복합 PK를 만드는 것이 괜찮습니까? 이런 종류의 관계는 어떤 기능을 가지고 있습니까? 아니면 InnoDB와 같은 엔진에만 해당합니까? ON DELETE CASCADE 작업을 수행 하시겠습니까?

동일한 이름의 두 영역이 있으면 어떻게됩니까? 예 : 호텔 존, 칸쿤과 툴룸의 두 도시가 그 지역을 가지고 있습니다. ?를 DELETE가 될 수 있도록하려면

DELETE FROM zones WHERE name = 'name' AND cities_id = ID 

워드 프레스는 당신이 wp_postmeta와 wp_posts와 약한 관계를 사용하고 있음을 알 수있는 아래와 같은 관계를 만들어 왜 부모와 자식 개체가 다음 무엇인지 이해. wp_postmeta가 wp_posts 없이는 존재할 수 없다고 가정합니다. 그것은 주석과 사용자에게도 똑같이 적용됩니다.

WP EER

답변

0

먼저, 실시 예 1 (오히려 테이블도 호출)이 EER도 아니다. ER 또는 EER 다이어그램이라고하려면 엔티티 관계 모델 개념을 나타내고 엔티티 세트를 관계와 구별하는 표기법 (Chen의 표기법과 같은)을 사용해야합니다. ER 모델에서 엔티티 관계와 관계 관계는 테이블을 사용하여 구현되며 무결성 메커니즘 인 FK 제약 조건에 매핑되지 않습니다. 많은 사람들이 이전 네트워크 데이터 모델에 대한 ER 모델을 혼동합니다.

둘째, 일반 (상위) 엔티티 세트의 기본 키가 약한 (하위) 엔티티 세트의 기본 키의 일부인 약한 엔티티 세트와 함께 식별 관계가 사용됩니다. 엔터티 집합이 자체 특성으로 식별되면 일반 엔터티 집합입니다.

약한 엔티티 릴레이션에서 행을 삭제하려면 대개 기본 키로 식별해야합니다. 약한 엔티티 세트는 일반적으로 상위 키와 추가 약 키로 구성된 합성 기본 키를 갖습니다. 약한 키는 상위 키와 관련해서 만 고유해야합니다. 예를 들어, zonescities_idname에 의해 확인되었다, 당신은 그 속성을 지정하여 영역을 삭제할 수 :

DELETE FROM zones WHERE cities_id = 1 AND name = 'name'; 

복합 기본 키는 자동으로 색인하고 고유 당신이 PK로 선언 된 경우 DBMS에 의해 제한되어야한다 . 취약한 엔티티 세트의 장점은 경우에 따라 의미없는 대용 키를 도입하는 것보다 자연스러운 식별 방법이라는 것입니다.

유일한 사로 게이트 ID와 상위 ID와 같은 다른 속성으로 구성된 복합 기본 키가있는 테이블을 갖는 것은 좋지 않습니다. 고유성이 올바르게 적용되지 않으면 의도하지 않은 중복 값의 위험이있을뿐 아니라 단순한 대리 PK가있는 직접적인 테이블이 될 필요가없는 것을 과도하게 복잡하게 만듭니다.

WordPress 다이어그램은 취약한 엔티티 세트 또는 관계를 식별하지 못합니다 (이전에 언급 한 것처럼 EER 다이어그램이 아닙니다). 각각 언급 한 표에는 자체 대리 키가 있습니다. ER 모델에는 약한 관계가 없다는 점에 유의하십시오.