2011-08-27 3 views
1

웹 기반 (ASP.NET) 전화 번호부 - 연락처 관리자 소프트웨어 용 데이터베이스를 디자인하고 있습니다.
각 연락 할 수있다 다른 전화 유형 .. (집, 직장, 모바일 등) 여기 내 데이터베이스 디자인 :전화 번호부 데이터베이스 디자인

  • : enter image description here
    전화 유형은 예를 들면 포함
  • 직장
  • 응급 또는 사용자가 원하는 모든 것.


M 이 잘 설계인가?
이 디자인에 문제가있을 것이라고 생각합니다. 모든 숫자로 연락처를 표시 할 수 없습니다. 연락처 번호가 하나가 아닌 한 행에 각 번호가있는 각 연락처를 의미합니다. 당신의 제안은 무엇입니까?


그리드의 모든 전화 유형을 가진 모든 연락처를 표시해야합니다. 나는 현재 디자인으로 그렇게 할 문제가있을 것이라고 생각합니다.

+1

(약간 지저분한) 저장 프로 시저를 사용하여이 작업을 수행 할 수 있습니다. 디자인 자체는 매우 깨끗합니다. 전 (全) PhoneType을 모른 채 간단한 SQL 쿼리로 모든 전화 번호를 그리드 패턴으로 구성 할 수있는 디자인은 생각할 수 없습니다. –

+0

결국 이것을 알아 냈습니까? – bryanmac

답변

0

나는이 디자인에 문제가있어 내가 표시 할 수 없다고 생각한다. 사용자에게 그리드로 모든 숫자가 표시된다. 제안 사항은 무엇입니까?

간단한 쿼리만으로도 가능합니다.

select c.contactid, c.contactname, 
     pt.typetitle, 
     pn.phoneno 
from contact c 
inner join phonenumber pn on pn.contactid = c.contactid 
inner join phonetype pt on pt.phonetypeid = pn.phonetype 

데이터 무결성을 위해 기본 키 제약 조건 외에도 UNIQUE 제약 조건이 필요합니다. 내가 너라면 ContactName, TypeTitle 및 쌍 (ContactID, PhoneType)에 대한 UNIQUE 제약 조건을 고려할 것입니다. 사실, 쌍 (ContactID, PhoneType)은 PhoneID보다 더 나은 기본 키일 수 있습니다. PhoneID를 완전히 삭제하는 것을 고려하십시오.

+0

귀하의 질의를 시도했습니다. 예를 들어 John이라는 연락처가 3 개의 숫자를 갖는 경우 쿼리는 3 개의 행을 반환하지만 연락처 전화를 한 행에 표시해야합니다. 제 질문의 마지막 행을 편집했습니다. 지금은 더 명확하다고 생각합니다. – Shahin

+0

PIVOT을 사용할 수는 있지만 사용자가 좋아하는 범주를 추가 할 수 있기 때문에 수평 스크롤이 필요없는 행을 만들 수 있다고 보장 할 수는 없습니다. 이 요구 사항을 변경할 수 있으면 삶이 더 쉬워집니다. –

관련 문제