2013-03-21 3 views
1

친구를위한 대출 데이터베이스를 모델링하고 있습니다.고객 주소, 부동산 주소 및 회사 주소

고객는 N주소 (주소 또는 POBOX 주소 또는 1 개 이상의 거리 주소와 POBOX 주소에보다 더 많은)에 0을 가질 수 있습니다. A 속성에는 주소가이어야합니다. A 회사 (고용 정보)은 주소 중 하나만 있어야합니다.

주소고객 테이블을 가지고있는 것이 좋습니다. 주소기업속성기업 테이블과 함께 갈 수 있습니다.

그러나 우리는 테이블 여기 주소를 갖고 있기 때문에, 당신이 좋은 아이디어라고 생각하거나 회사속성뿐만 아니라 테이블이 주소 테이블을 공유하지합니까?

우리는 엔티티 사이의 관계에 대해 생각할 때, 우리는 시점 (정적 방법?) 차단해야 또는 우리가 그들의 관계를 분석 할 수있는 시간 (동적 방법은?)의 특정 범위를 볼 것인가? 예를 들어 회사는 특정 시점에 하나의 주소 만 가질 수 있지만 회사는 최근 한 장소에서 다른 장소로 이동할 수 있습니다. 그런 다음 회사는 일정 기간 동안 둘 이상의 주소를 가질 수 있습니다.

답변

3

고객은 자신의 주소가 어디인지 알고 싶어 할 수있는 대출을하고 있으므로 0에서 N까지 1보다 N이 더 나은 관계가됩니다.

회사 (고용 정보)에는 주소가 하나만 있어야합니다.

그런 다음 회사는 특정 범위의 시간 동안 둘 이상의 주소를 가질 수 있습니다.

당신은 약간 모순됩니다. 두 주소가 필요한 이유는 무엇입니까? DB를 새로운 주소로 업데이트 할 수있는 시점에서 새로운 주소로 모든 것을 얻을 때까지 회사는 공식 주소를 하나만 갖게 될 것입니다. 우리가 여기에 주소 테이블이 있기 때문에

그러나, 당신은 좋은 생각이나 회사뿐만 아니라 속성 테이블에 대한 테이블 주소를 공유하지 않을 생각하십니까?

그리고 여기 모델링에 대한 몇 가지 아이디어와 좋은 링크 예

:

http://www.databaseanswers.org/data_models/

+0

가정에 대한 좋은 질문입니다. –

2

A 중대 (취업 정보)는 하나의 주소가 있어야합니다.

반드시 그렇지는 않습니다. 회사는 우편 주소와 실제 주소를 가질 수 있습니다.

여기에 Addresses 테이블이 있으므로 기업 및 등록 정보 테이블에도 해당 Addresses 테이블을 공유하는 것이 좋습니까?

예. 주소 테이블에 주소를 입력하는 것이 좋습니다. Properties 테이블에는 주소 행 외래 키가 있고 Companies 테이블에는 우편 주소 용 주소와 실제 주소 용 외래 키가 각각 2 개씩 있습니다. 우편 주소는 선택 사항 (널 (NULL) 입력 가능) 외래 키입니다.

고객과 주소 간의 0 - N 관계를 유지하려면 CuustomerAddress 테이블이 필요합니다. 원하는 경우 주소와 고객간에 0 - N 관계를 가질 수도 있습니다.

표는 다음과 같습니다.

CustomerAddress 
--------------- 
CustomerAddress ID 
Customer ID 
Address ID 

CustomerAddress ID는 기본 (클러스터링) 색인입니다. 오름차순 정수 또는 long 또는 다른 고유 ID입니다.

고유 한 색인 (고객 ID, 주소 ID)이 있어야합니다.

고객과 주소를 연결하려면 (주소 ID, 고객 ID)에 다른 고유 색인이 있어야합니다.

회사는 특정 시점에 하나의 주소 만 가질 수 있지만 회사는 최근 한 장소에서 다른 장소로 이동할 수 있습니다. 그런 다음 회사는 일정 기간 동안 둘 이상의 주소를 가질 수 있습니다.

이 정보가 중요하면 CompanyAddress 테이블에 날짜로 작성된 열을 포함시켜야합니다. (회사 ID, 내림차순으로 작성된 날짜)에 고유 색인을 작성하십시오. 이렇게하면 주소 테이블에서 검색하는 첫 번째 행이 가장 최신 주소가됩니다.

+0

0-n 관계에 대해 CustomerAddress 테이블이 필요한 이유는 무엇입니까? 보통 관계 테이블은 n-n 관계에 대한 것입니다. 맞습니까? – 5YrsLaterDBA

+1

고객과 주소를 연결하려는 경우가 아니면 필요하지 않습니다. –

1

모든 주소를 자신의 테이블에 넣는 것은 매우 인기있는 아이디어처럼 보입니다. 개발자는 반복을 찾아서 제거하는 것을 좋아합니다. 그러나이 경우 대부분의 응용 프로그램과 마찬가지로 주소를 본격적인 엔터티로 취급하지 않으면 너무 복잡해지기 때문에 엔티티 상태로 주소를 위장하는 것을 주저합니다.

주소를 실제 엔터티로 처리 한 경우 두 회사가 어떻게 든 동일한 주소를 공유하거나 한 위치에 잠시 동안 거주 한 다음 다른 위치에 동일한 위치에 거주 한 경우 해당 회사는 동일한 주소를 참조하게됩니다. 응용 프로그램이 주소를 입력으로 받아 들일 때 기존 주소가 있는지 여부를 확인한 후 주소 테이블에 일부 가비지를 슬래 밍하지 않고 참조하기 때문에. 어느 쪽을 할 계획입니까?나는 그것이 슬램 하나라고 생각합니다. 왜냐하면 대부분의 비즈니스 응용 프로그램처럼 당신이 넣고있는 새 주소가 이미 데이터베이스에있는 다른 주소와 같은지 전혀 신경 쓰지 않기 때문입니다. 개별 사물로서의 주소. 이것이 개체와 고양이 음식의 차이입니다.

통합을 통해 교차 테이블을 도입하고 색인을 생성해야하며 주소가있는 모든 엔티티가 참여해야하므로 주소를 열심히 얻거나 지연로드를 사용할지 여부를 고려해야합니다. 우리는 모든 주소를 하나의 양동이에 넣고 모든 사람들이 자신의 주소로 빨리 도착할 수 있도록 노력해야합니다. 실제 엔티티의 경우 이는 서로 다른 것들이 동일한 엔티티에 연결해야하기 때문에 이해가되지만 위의 사항은 상관하지 않으며 아무도이 엔트리를 공유하지 않습니다.

어디에서 하나의 테이블에 주소를 통합하여 제거 할 것인지요? 같은 필드에 관계없이 주소는 데이터베이스에서 어딘가에서 끝날 것입니다. 우리는 공간을 절약하지 못합니다. 유일한 반복은 우리가 관리 할 수있는 스키마를 생성하는 데 사용되는 DDL에 있습니다.이 스키마는 주소 (응용 프로그램 코드의 중복성을 나타냄)에 대한 재사용 가능한 구성 요소 ("구성 요소"가 Hibernate 용어 임)를 만들고 ORM 도구를 사용하여 스키마를 생성하십시오. 아니면, 최악의 경우, 그냥 무시하고, 주소가 그렇게 많이 변경되지 않는다면, 그것은 당신의 가장 큰 문제가 아닙니다.

당신이 설명하는 이러한 요구 사항은 친구를 위해 수행하는 프로젝트에 대해 의심 스러울 정도로 기업용이라고 생각합니다. 친구의 뇌는 자신이하는 일을 모르는위원회에서 요구하는 요구 사항을 상세히 설명하기 위해 노출 과다로 중독되었을 가능성이 있습니다. 직장에서이 쓰레기를 참을 수있을 정도로 나쁘지는 않지만 개인적인 프로젝트를 위해? 얘기 해봐.

하지만 어쩌면 친구가 자신의 엔터프라이즈 작업을 아웃소싱하고 있으며 고객 당 0-N 주소가 붙어있을 수도 있습니다. 그렇다면 피해를 포함 시키십시오 : 고객 주소 전용 테이블을 작성하여 교차 테이블이 필요 없도록하고 다른 엔티티의 주소를 인라인에 넣으십시오. 주소가 하나 뿐인 엔티티가 다른 테이블에서 주소를 가져 오게되면 아무것도 조인하지 않고 더 많은 조인을 사게됩니다. 기록이 필요한 경우 기록이없는 별도의 기록 표에 기록을 기록하십시오.

+0

AndresL은 고객에게 1 또는 N 주소가 있어야한다고 지적했습니다. 길버트 (Gilbert)가 지적했듯이, 회사는 두 개의 주소 (거리 및 포보 스트)를 가질 수 있습니다. 한 주소가 회사보다 많은 주소로 공유 될 수 있다는 점을 매우 잘 알고 있습니다. 그러나 Company와 Address 테이블 간의 관계를 변경하지 않고도 새로운 요구 사항을 충족시킬 수 있습니다. 권리? 현재 Company 테이블에는 두 개의 addressId 외래 키가 있습니다. Make Property address inline은 의미가 있습니다. 나는 그 길로 갈지 모른다. – 5YrsLaterDBA

+0

@ 5YrsLaterDBA : 속성 인라인을 퍼팅하는 것이 좋습니다. 내가 말하고자하는 것은, 프로젝트에서 중요한 것은 데이터베이스 설계를 이끌어내는 것입니다. –