[SQL] 엔티티 - 속성 - 값 테이블 디자인
SQL엔티티 - 속성 - 값 테이블 디자인
저는 현재 전자 상거래 플랫폼의 제품 섹션에 대한 데이터베이스 구조를 설계하고있다. 그것은 가능한 다른 속성의 무한한 수있는 제품의 다른 유형의 무한한 수를 판매 할 수있는 방식으로 설계 될 필요가있다.
예를 들면 노트북의 속성은 RAM, 화면 크기, 무게 등 책의 속성이 될 것이다 저자 것, ISBN, 제작사 등
가장 적합 할 것 인 EAV 구조처럼 보인다.
나는 결과 집합을 받고 지금은 테이블이 알려져있는 두 번째 쿼리를 구축하지 않고 올바른 데이터를 얻기 위해 attribute_values_datetime 테이블에 선택 가입 할 수 위의 가정? 큰 성능이 유형의 쿼리를 작성 치거나 아래 더 적합 할 것이다있을 것입니다 (작은 기능이지만)
해결법
-
==============================
1.이 질문에 의견의 대부분에 반대 의견을 제공하겠습니다. EAV는 철저하게 찾을 수 있도록 DBA.SE 여기에 여러 번 설명 할 수있는 이유의 모든 악은 다른 곳에서, 하나 정말 일반적인 응용 프로그램이 있지만 EAV와 잘못된 것들의 대부분 (거의 무관하고 있습니다 EAV의 몇) 장점은 매우 밀접한 관계가 있습니다. 즉, 응용 프로그램은 온라인 제품 카탈로그입니다.
이 질문에 의견의 대부분에 반대 의견을 제공하겠습니다. EAV는 철저하게 찾을 수 있도록 DBA.SE 여기에 여러 번 설명 할 수있는 이유의 모든 악은 다른 곳에서, 하나 정말 일반적인 응용 프로그램이 있지만 EAV와 잘못된 것들의 대부분 (거의 무관하고 있습니다 EAV의 몇) 장점은 매우 밀접한 관계가 있습니다. 즉, 응용 프로그램은 온라인 제품 카탈로그입니다.
EAV의 주된 문제는 데이터베이스가 스키마에서 그들을 배열하여 다른 개체에 대한 정보를 다른 속성에 적절한 컨텍스트를 제공하는 데 도움이되는, 일을 정말 좋은 일을하지 않는다는 것입니다. 스키마를 갖는 것은, 접근 해석하고 데이터의 무결성을 시행 주위에 많은, 많은 장점을 제공합니다.
제품 카탈로그에 대한 사실은 제품의 특성이 거의 카탈로그 시스템 자체에 완전히 관련이없는 것입니다. 제품 카탈로그 시스템 (대부분에서) 제품 속성을 가진 세 가지를 않습니다.
시스템이하는 모든 (시스템에) 의미 상 관련이 역류 정보 인 경우,이 정보에 대한 스키마는 기본적으로 인정한다. 당신은 항상 새로운 제품 카테고리 또는 속성 유형을 허용하는 그것으로 수리를 스키마로 다시 갈 필요하고 있기 때문에 실제로 스키마, 카탈로그는 제품의 많은 다양한 종류가 특히, 온라인 제품 카탈로그에 방해가 .
그것이 사용되는 방법 때문에, 제품 카탈로그의 속성 값도 데이터 형식은 반드시 (참으로) 중요하지 않다. 일부 속성 위해 당신은 "이 목록 {...}에서 와야" "숫자 여야합니다"와 같은 제약 조건을 부과 할 또는 수 있습니다. 즉 속성 일관성 카탈로그 및 방법을 정교하게 당신이 당신의 구현이 원하는 얼마나 중요한지에 따라 달라집니다. 내가 가장 말하고 싶지만 여러 온라인 소매 업체의 제품 카탈로그를 살펴보면 것은 일관성을 위해 단순성을 거래 할 준비가되어 있습니다.
예, EAV는 그렇지 않은 경우를 제외하고, 악입니다.
-
==============================
2.네, 일반적으로 EAV 모델에 대한 쿼리를 조립에 큰 형벌이있다. DBMS에 당신을 위해 그것을 할 수있을 것하지 않기 때문에 데이터의 자기 일관성을 확인하기위한 더 큰 성능 저하가 있습니다. 뭔가 잘못되면, DBMS는 말할 수 없습니다.
네, 일반적으로 EAV 모델에 대한 쿼리를 조립에 큰 형벌이있다. DBMS에 당신을 위해 그것을 할 수있을 것하지 않기 때문에 데이터의 자기 일관성을 확인하기위한 더 큰 성능 저하가 있습니다. 뭔가 잘못되면, DBMS는 말할 수 없습니다.
의견 오뎃에서 권장하는 더 정통 데이터베이스 디자인, 데이터베이스의 데이터보다 거의 일치 DBMS의 보장하지만입니다. 나는 강력하게 조언 일반 (비 EAV) 디자인 사용할 수 있습니다.
-
==============================
3.이 코멘트 나 대답을해야하는지 모르겠어요. 그럼에도 불구하고 여기에 간다.
이 코멘트 나 대답을해야하는지 모르겠어요. 그럼에도 불구하고 여기에 간다.
나는 당신이 구축하고 정확히 모른다. 하지만 당신은 마 젠토 EAV 데이터베이스 구조로 살펴 보셨나요? 예, 쿼리가 거대 할 수 느릴 수 있지만 우리를 위해 흑자는 더 마이너스보다. 그리고 다른 한편으로 젠토에 쿼리 처리합니다.
우리는 마 젠토를 사용하는 우리의 온라인 상점 (중간 큰 크기 저장소)의 이동의 중간에 있고 지금 우리는 EAV 방식에 매우 만족합니다.
from https://stackoverflow.com/questions/11779252/entity-attribute-value-table-design by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL 변수에 간부 인 결과를 할당? (0) | 2020.04.04 |
---|---|
[SQL] 어떻게 MySQL은 시퀀스를 만들려면 어떻게해야합니까? (0) | 2020.04.04 |
[SQL] T-SQL : 라운드 근처로 15 분 간격 (0) | 2020.04.04 |
[SQL] SQL Server의 SYSNAME 데이터 형식은 무엇입니까? (0) | 2020.04.04 |
[SQL] 오라클 : 'WHERE 절에`(+)의 기능은 무엇입니까? (0) | 2020.04.04 |