옵션 중 하나는 EAV 모델 (Entity-Attribute-Value)입니다.
이 모델은 당신이 테이블 표현이 넓은 테이블 초래 도메인에 하나의 클래스 (열 많은, 많은 null 값)
그것은 원래 의료 도메인에 대한 설계가있는 경우에 적용하는 것이 좋다, 여기서 객체는 수천 개의 열 (sympthoms)을 가질 수 있습니다.
은 기본적으로 당신은 당신은 몇 가지 추가 메타 데이터 테이블을 가질 수
엔티티 (ID) (예를 들어 귀하의 제품 테이블) 특성 (ID,의 ColumnName) 값 (ENTITYID,의 AttributeId, 값)이있다.
값은 유형에 대해 하나가 아닌 여러 개의 테이블이어야합니다. 예 : ShortStringValue (EntityId, AttributeId, Value nvarchar (50)); LongStringValue (EntityId, AttributeId, 값 nvarchar (2048)); MemoValue (EntityId, AttributeId, Value nvarchar (max)); IntValue (EntityId, AttributeId, Value int);
심지어는 완료 유형 : ColorComponentsValue (EntityId, AttributeId, R int, G int, B int);
내 경험에 따르면, EAV를 모든 용도로 사용해서는 안된다는 것입니다. 단일 클래스 인 EAV를 예로 들자. 다른 기본 클래스에 확장 성을 사용해야하는 경우 별도의 EAV 테이블 집합으로 둡니다.
그 외에도 객체에 대한 스마트 구현 전략을 고안해야합니다. 이 값을 넓은 행 집합으로 피벗하지 않고 쿼리 조건에 필요한 수의 collumn 만 피벗 한 다음 선택한 각 개체에 대해 좁은 값 행 컬렉션을 반환합니다. 그렇지 않으면 피봇 팅은 대량 조인과 관련됩니다.
고려해야 할 몇 가지 점이 있습니다 : . 각 값에는 외래 키 의 저장 공간이 필요합니다. 예를 들어 행 수준 잠금은 이러한 쿼리에 대해 서로 다르게 동작하므로 성능이 저하 될 수 있습니다. . 색인 크기가 커질 수 있습니다.
실제로 얕은 헬로우 월드 테스트에서 EAV 솔루션은 조건에 관련된 4 개의 열이 포함 된 쿼리에서 20 열 테이블의 정적 카운터 파트보다 성능이 우수했습니다.
확장 성이 있다고 할 때 확장 성을 말합니까? –