특정 개체 (즉, 제품)의 테이블 하나와 동적 특성 테이블 한 개를 포함하는 모델로부터 쿼리하는 데 도움이 필요합니다. SQL Server 2012의 엔터티 특성 값 모델 ("동적 특성") 쿼리에 대한 지원
은 이제 나는 그런Price
,
Color
,
Weight
하고 또한
Engine
,
Gears
,
Color
같은 속성을 가진
Car
같은 속성을 가진
Chocolate
를 저장할 수 있다는 가정 해 봅시다. 나는 클라이언트 목록에서 얻을
Id (int) -- of the attribute
ProductId (int) -- of the specific product
AttributeType (int) -- enum with the following values ("Color", "Price","Height", "Width"....)
StringValue -- of the product
IntValue -- of the product
DoubleValue -- of the product
BooleanValue -- of the product
:
Id (Int),
Name (NVarchar)
내가 다른 테이블은 다음 열 dynamicAttributes
를 불렀다 : 내 예에서
나는 다음과 같은 열이있는 제품이라는 테이블이 속성 코드와 그 값의 목록.
각 속성에 대해 값 유형 (일명 부울, 문자열, int)을 얻을 수 있습니다.
내 응용 프로그램에서이 모델을 쿼리하는 가장 좋은 옵션은 무엇입니까?
동적 sqls 만? 피벗 키워드 사용?
이 디자인 안티 패턴의 이름 is "엔티티 att ribute 값 ". 그것을 검색하십시오. 거기 이것에 관한 수많은 게시물이 있습니다. –
정말 대단히 나쁜 생각입니다. EAV를 피하려고 노력해야합니다. 처음에는 영리한 선택처럼 보이지만, 시간이 지남에 따라 거대한 성능과 유지 보수의 악몽이됩니다. 비효율적이고 지저분한 쿼리는 말할 것도 없습니다 모든 데이터를 가져올 수 있습니다. .... **하지 마!** –
[파괴의 EAV 피하기 (Joe Celko 저)] (http://www.simple-talk.com/sql/t-sql-programming/avoiding-the-eav-of-destruction/), [ 5 가지 간단한 데이터베이스 설계 오류 (피할 수 있어야 함) (포인트 3)] (http://www.simple-talk.com/sql/database-administration/five-simple--database-design-errors-you-should-avoid/), 그리고 [Bad CarMa] (http://www.simple-talk.com/content/article.aspx?article=292)를 방대한 EAV 오류의 극한의 예로 들었다. –