4

새 응용 프로그램을 시작했는데 이제는 두 가지 경로를보고 있으며 계속 진행하는 것이 좋은 방법인지 모릅니다.
저는 전자 상거래 사이트를 만들고 있습니다. 나는 카테고리하위 범주 있습니다.
문제는 제품에 제품이 있고 각각 속성이입니다. 해당 사이트의 사이트는 이어야하며이어야합니다.
이 내 초기 데이터베이스 디자인 : EAV 데이터베이스 디자인 모델이나 많은 테이블을 사용해야합니까?

Products{ProductId, Name, ProductCategoryId} 
ProductCategories{ProductCategoryId, Name, ParentId} 
CategoryProperties{CategoryPropertyId, ProductCategoryId, Name} 
ProductPropertyValues{ProductId, CategoryPropertyId, Value} 

지금은이 디자인이 실제로 EAV 모델이며, 나는 사람들이 일반적으로 이 디자인을하지 않는 것이 좋습니다 읽어보고 몇 가지 분석 후.
동적 SQL 쿼리가 모든 작업에 필요합니다.

그건 한 가지 방법이며 지금 당장보고 있습니다.

내가 보는 또 다른 방법은 아마도 로터스 워크웨이이라고 이름이 지어졌지만 더 좋으면 거기에 가고 싶습니다. 는

Product{ProductId, CategoryId, Name, ManufacturerId} 

테이블을 만들려면 및 데이터베이스 느릅 나무 테이블 상속이 나는 이것이 매우 큰 데이터베이스와 매우 큰 응용 프로그램 도메인이 될 것이라는 점을 이해

Cpus{ProductId ....} 
HardDisks{ProductId ....} 
MotherBoards{ProductId ....} 
erc. for each product (1 to 1 relation). 

같은 테이블을 의미하지만 되어 있는지 확인하기 EAV 디자인의 옵션 1보다 더 좋고, 더 쉽고, 성능이 우수합니다.

+1

초기 디자인이 EAV라는 것에 동의하지 않습니다. –

+0

해당 ProductPropertyValues ​​테이블은 EAV가 아닙니까? 가자. –

+0

왜 그렇지 않다고 생각하십니까? – 1110

답변

5

EAV는 거의 승리하지 않습니다. 귀하의 경우 다른 카테고리가 다른 속성을 가지므로 다른 방법으로 관리하기가 어려워 EAV의 매력을 볼 수 있습니다. 그러나 누군가가 "10k rpm으로 회전하는 SATA 인터페이스를 사용하여 3 개 이상의 플래터가있는 모든 하드 드라이브를 검색하려고합니까?"라고 가정합니다. EAV에서의 귀하의 질의는 힘들 것입니다. 이와 같은 쿼리를 지원하려면 EAV가 필요합니다.

그러나 다른 접근법이 있습니다. 확장 된 데이터가있는 XML 필드를 고려하거나 PostgreSQL 9.2를 사용하는 경우 JSON 필드 (XML은 쉽게 검색 할 수 있음)를 고려할 수 있습니다.이렇게하면 EAV의 두통없이 검색 가능한 범위가 상당히 넓어집니다. 스키마 시행이 더 어려워진다는 단점이 있습니다.

+0

예, 정확히이 질문을하도록 강요 한 문제였습니다. 저는 EAV 구조 및 필터링 제품을 만들었습니다. 다른 카테고리에 따라 동적 SQL과 많은 고통을 사용하도록합니다. 그래서 작은 테이블로 데이터베이스를 재구성하기 시작했고, 지금은 40 개의 상속 된 제품 테이블을 편안하게 느끼고 있습니다.하지만 여전히 문제를 분석합니다 ... – 1110

4

This 질문에 대해 더 자세히 논의 된 것 같습니다. 외에도 성능, 확장 성 또한 고려,이 논의의 복잡성에서

: SQL Server와 같은

  • SQL 데이터베이스가 전체 텍스트 검색 기능이있다; 따라서 제품을 설명하는 단일 필드가있는 경우 전체 텍스트 검색으로 색인을 생성하고 고급 의미 검색을 제공 할 수 있습니다.

  • 지금 당장은 분노없는 no-SQL 시스템을 살펴보십시오. 확장 성은 그 (것)들과 확실히 좋아야하고 당신이 가지고있는 것과 같은 비 구조화 된 데이터에 대한 지원을 제공합니다. 하둡과 카산드라는 좋은 출발점입니다.

+0

을 계산하거나 정렬 할 필요가 없습니다. NoSQL 데이터베이스는이 프로젝트에 관심이 없으므로 고려할 수 없습니다 . '제품을 설명하는 단일 필드 ...'란 가능한 모든 속성을 제품으로 추가하는 것을 의미합니까? 그것은 내가 할 수없는 1000 열을 가진 테이블이 될 것입니다 :( – 1110

+0

아니요,이 모든 속성을 가진 단일 열 –

0

EAV 모델로 잘 작업 할 수 있습니다. Logistics 응용 프로그램과 비슷한 작업을 수행합니다. 그것은. NET에 내장되어 있지만. 테이블을 제외하고 응용 프로그램 코드는 개체를 올바르게 처리해야합니다. 각 개체에 대해 일반 테이블을 추가 할 수 있는지 확인하십시오. 그것은 우리를 위해 일합니다.