2010-12-23 2 views
6

연락처 관리자/주소록과 유사한 응용 프로그램을 디자인하고 있지만 데이터베이스 디자인을 결정할 수는 없습니다.주소록 데이터베이스 디자인 : 비정규 화 하시겠습니까?

현재 나의 설치에는 주소, 전화 번호, 이메일 및 조직이있는 연락처가 있습니다. 모든 연락처 속성은 현재 Contact 테이블에 대한 fk가있는 별도의 테이블입니다. 말할 것도없이 연락처에 이러한 속성이 여러 개있을 수 있습니다.

이제 앱에 연락처를 읽고 싶다면이 모든 테이블을 하나로 합칩니다. 관련 테이블에서 필터, 역방향 조회, 정렬 등을 수행하지 않으므로 Contact 테이블의 직접 등록 정보에 json 인코딩 목록으로 관련 필드를 저장하는 것이 더 좋고/더 간단한 솔루션이 아닙니까?

예 : 3 개의 항목이있는 fk와 phonenumber 테이블의 연락처 대신 모든 Phonenumbers를 인코딩하고 Contact 테이블의 필드에 저장 하시겠습니까?

통찰력은 정말 감사합니다! (fyi 장고를 사용하고 있어도 상관 없습니다.)

답변

6

앱이 이러한 다른 기능을 필요로하지 않는다고 보장 할 수 있습니까? 모퉁이에 자신을 페인트하고 나중에이 모든 것을 쉽게 지원할 수 없습니까?

일반적으로 비정규 화는 우선적 인 이유로 만 발생합니다. 그런 다음 정규화 된 데이터의 복사본이 라이브 작업을 위해 계속 유지되며 정적이 아닌 스냅 샷을 갖는 오프라인 처리에는 비정규 화 된 데이터가 사용됩니다.

글쓰기 조인에 익숙해집니다. SQL이 작동하는 방식입니다. 그렇게하는 것이 그릇된 것을 의미하지는 않습니다.

+0

+1 ... 100 % 동의합니다! –

0

현재 사용자는 5 개의 SQL 테이블로 모델링 된 데이터를 가져 와서 일반적인 다중 값 유형으로 변환하는 것과 같은 소리가 나옵니다 (SQL 제품이 이것을 잘 지원합니까?) 이것이 내가 볼 수있는 유일한 방법은 ' 비정규 화 '는 1NF을 위반한다고 제안하는 경우 데이터가 더 이상 관계형이 아니기 때문에 SQL을 데이터 저장소로 포기할 수 있습니다. 그렇지 않으면 데이터가 여전히 정상화되지만 SQL 제품에 다중 값 속성을 쿼리하기위한 확장이없는 경우 SQL을 사용하여 해당 속성을 쿼리하는 기능이 손실됩니다. 결정 요인은 다음과 같습니다. SQL을 사용하여 이러한 속성을 쿼리해야합니까?

관련 문제