레거시 POI 데이터베이스를 MySQL에서 PostgreSQL으로 재 설계해야합니다. 현재 모든 엔티티에는 개별 속성을 나타내는 80-120 + 속성이 있습니다.은 EAV - Hybrid입니다. 잘못된 데이터베이스 디자인 선택
우리는 새로운 데이터베이스에 대한 유연성과 디자인 방식을 고려해야합니다. 그러나 새로운 디자인은 허용해야한다 :
N 아니오. 어떤 엔티티에 대한 속성/속성의 예 : 어떤 엔티티에 대한 속성도 고정되어 있지 않으며 정기적으로 바뀔 수 있습니다.
콘텐츠 관리자는 항상 db 스키마를 변경하는 대신 admin 인터페이스를 통해 에 새로운 속성을 추가 할 수 있습니다 ().
는 EAV의 성능 문제에 대한 꽤 많은 논의가 있지만 우리는 하이브리드 EAV와 함께 가지 않으면 우리는 결국 : 빈 열
- 가진 많은 (우리는 아직도 가서 데이터의 99 %에 해당 속성이없는 경우에도 새 열 추가)
- 데이터베이스 유지 관리에 더 많은 시간이 소요됩니다. 속성이 계속 변경 될 때
- 기존 개체 어쨌든 여기
을 새로운 속성을 추가 할 콘텐츠 관리자를 허용하는 방법은 (기본 ERD 포함) 우리가 새로운 디자인에 대해 생각입니다 :
각각에 대해 별도의 테이블을 가지고 독점적 인 몇 가지 기본 정보를 포함하는 엔티티 ID, 이름, 주소, 연락처, 생성 된 항목 등
속성 정보를 저장하기위한 2 개의 테이블 속성 유형 및 속성이 있습니다.
다 대다 관계를 사용하여 각 엔터티를 특성에 연결하십시오.
다른 테이블에 주소를 저장하고 외래 키를 사용하여 엔티티에 연결하십시오.
그러나이 설계는 주어진 경기장에 대한 모든 "속성"을 표시하기 위해 데이터를 가져올 때 조인 횟수를 증가시킬 수 있습니다. 우리는 20 개 이상의 조인을 가진 쿼리를 사용하여 단일 행의 모든 관련 속성을 가져올 수 있습니다.
이 디자인에 대한 귀하의 의견과 개선을위한 귀하의 조언은 무엇입니까?
읽어 주셔서 감사합니다.
NOSQL 데이터베이스를 사용하면 도움이 될까요? http://nosql-database.org/ –
데이터베이스 테이블의 필드에 JSON 또는 XML로 데이터를 저장하는 데 NoSQL이 필요하지 않으며 PostgreSQL을 사용하면 특정 필드에 기능적 인덱스를 만들 수 있습니다. – MkV
프로덕션 데이터베이스의 필드는 다음과 같습니다. shouldn 'on the fly'에 추가되면 데이터 혼란을 막기위한 변경 제어가 있어야합니다. 일부 초기 설계를 수행하여이를 피하십시오. 필드가 1-1이고 테이블 변경에 지장이 없다면 적절한 테이블을 추가하거나 기존 테이블에 필드를 추가하십시오. – MkV