Google지도 API를 사용하여지도에 점을 표시하는 매핑 응용 프로그램을 만들고 있습니다. 모든 포인트는 현재 MySQL 데이터베이스 (5M + 레코드를 보유하고 있음)에서 가져옵니다. 현재 모든 엔터티는 개별 속성을 나타내는 특성이있는 별도의 테이블에 저장됩니다.프로그래머가 따라야 할 데이터베이스 디자인 규칙
이 제시 다음과 같은 문제 :
우리는 데이터베이스, 응용 프로그램 코드와 프런트 엔드의 변경을해야 새 속성이있을 때마다. 이것은 괜찮지 만 모든 엔티티에 대해 일부 속성을 추가해야하므로 50 개 이상의 다른 테이블을 통과하고 새 속성을 추가하는 것은 악몽이됩니다.
주어진 속성을 공유하는 모든 엔티티를 찾는 방법은 없습니다. 지리학 부서가있는 모든 학교/대학 또는 대학을 찾을 방법이 없습니다 (학교, 대학 및 단과 대학을 따로 질문하지 않고).
속성을 제거하는 것도 마찬가지입니다.
개별 테이블의 속성을 정의하기위한 표준이 없습니다. 다른 테이블에 다른 이름이나 데이터 형식으로 동일한 속성이 존재할 수 있습니다.
속성에 따라 포인트를 연결하거나 그룹화 할 수 없습니다 (포인트 2와 어떻게 든 관련됨).
우리는 DBA의 도움과 전문 DB 설계 경험 부족으로 전체 데이터베이스를 재 설계하려고합니다. 우리는 정말 고심하고 있습니다.
새로운 디자인이 직면 한 또 다른 문제는 엔티티간에 많은 공유 속성/속성이 있다는 것입니다. 예를 들어
:
"대학"라는 기업은 100 개 이상의 특성을가집니다. 다른 기관 (예 : 병원, 은행 등)은 기계, 주차, 카페테리아 등의 대학과 꽤 많은 특성을 공유합니다.
우리는 실제로 별도의 테이블에 속성을 갖고 싶지 않으며 엔티티 w/foreign keys]를 사용하면 수동으로 추가/제거해야합니다. 또한 속성을 일반화하면 50 개 이상의 속성을 포함하는 그룹이 생성됩니다. 모든 레코드 (즉, 엔터티)가 이러한 속성을 필요로하지는 않습니다.
는 예를 들어, 몇 가지 기본 정보를 포함하는 각 개체에 대해 별도의 테이블을 가지고 :
그래서 마음에 유지 여기 우리가 새로운 디자인에 대해 생각하고 무엇을 ID, 이름, 등 등
는 속성 정보를 저장하기 위해이 개 테이블 속성 유형 및 속성 되세요.
링크 각 실체 (또는 당신이 좋아하는 경우 테이블) 다 대다 관계를 이용하여 속성합니다.
이라는 다른 테이블에 주소를 저장하면 외래 키를 통해 개의 링크 엔티티가 지정됩니다.
우리는 속성을 추가, 제거 또는 쿼리 할 때 더욱 유연해질 것이라고 생각합니다. 20+는 단일 행에 관련된 모든 속성을 가져 조인과 함께 우리는 쿼리가있을 수 있습니다 특정 대학에 대한 " 속성 "모두 표시 egto 데이터를 가져 오는 경우
이 디자인하지만, 조인의 수가 증가가 발생합니다 .
우리는이 디자인 접근법에서 몇 가지 의견이나 가능한 결함을 필연적으로 알아야합니다.
감사합니다.
물론 EAV는 지금까지 본 최악의 악몽 일 수 있습니다. – HLGEM
다시 일찍 돌아 오지 못해 죄송합니다. 데이터 모델이 많이 변경되어 결국 속성을 자주 추가하거나 제거하게됩니다. 또한 우리는 사용자가 사용자 정의 속성을 추가 할 수 있도록해야합니다. 그래서 나는 하이브리드 EAV 구조를 생각하고있었습니다. BTW 나는 몇 가지 예제 승/질문을 업데이 트했습니다. – nka