2

나는 대부분의 시간을 채울 수있는 몇 개의 열이 이미있는 모델을 가지고 있습니다. 이제 매번 다른 필드를 추가해야합니다.추가 속성이있는 레코드 : 스파 스 테이블 또는 EAV?

무엇이 최선의 방법입니까? 나는 EAV 패턴을 좋아하지 않는다. 나는이 여분의 속성이 매우 다른 것을 고려할 때 특히 드문 드문 한 테이블을 가지고 있다는 생각을 좋아하지 않습니다.

예 :

WorkOrder: 
PK id 
FK assigned_to 
FK contractor 
DATE expected_completion 
DATE actual_completion 
... (many more) 

가 지금과 같은 속성을 추가 할 이러한 추가 특성이 기록은 기록 할에서 격렬하게 다를 수 있습니다

ep_1 (extra_property) 
ep_2 
ep_3 
ep_4 
... (many more) 

, 그리고 대부분의 시간 제한이있을 것 그들의 수는 있지만 보증은 없습니다. 로 기록

생각한다

나는 그 여분의 속성이 실제로 컬럼 인 경우, 예를 들면 같이, 필터링 및 검색 기록을 나열 할 수 있도록하려면
id | assigned_to | contractor | ... | ep_1 | ep_2 | ep_3 | ... | ep_n 
1 | 2   | 3   | ... | XYZ | NULL | NULL | ... | 23 
2 | 3   | 5   | ... | NULL | 1  | NULL | ... | NULL 
3 | 2   | 1   | ... | NULL | 0  | NULL | ... | NULL 
4 | 4   | 1   | ... | XYZ | NUL | NULL | ... | 45 

: 나는 SELECT fields FROM table WHERE ep_n > 20 같은 쿼리를 만들 수 있어야하고 SELECT fields FROM table WHERE ep_1='ABC'

무엇이 최선의 해결책입니까?

+0

예상되는 모든 속성을 알지 못하면 제안을하기가 어렵습니다. –

+0

@OMG 이렇게하면 질문이 너무 현지화됩니다. 데이터로 생각하십시오. 나는'SELECT table FRERE table WHERE ep_n> 20'이나'SELECT fields FROM table WHERE ep_1 = 'ABC''와 같은 쿼리를 만들 수 있어야합니다. – Aillyn

+2

나는 당신의 기대에 동의하지 않습니다. 대신 테이블을 적절히 모델링하고 필요한 조인을 통합하는 것이 대안입니다. 그들이 무엇인지 모른 채 그 테이블을 모델링 할 수는 없습니다 ... –

답변

3

어떤 데이터베이스가 있습니까? 예를 들어 SQL Server에서는 희박한 표에 맞게 최적화 된 Sparse Columns을 사용할 수 있습니다. EAV 모델링의 경우 SQL Server 고객 고문 팀의 백서 (Best Practices for Semantic Data Modeling for Performance and Scalability)를 읽어 보는 것이 좋습니다. 많은 권장 사항이 다른 공급 업체에도 적용되며 SQL Server와 관련이 없습니다.