테이블의 열이 고정되지 않은 스키마를 디자인하려고합니다. 예 : 테이블의 열이 고정되어 있지 않고 가변적 인 Employee 테이블이 있습니다 (Employee의 특성은 고정되어 있지 않고 다양합니다). 새로운 속성/열의 빈번한 추가가 요구됩니다. 주소 테이블 주소를 생성 한 후 추가 할 열 경우 : Employee 테이블에서테이블의 열이 고정되지 않은 스키마를 디자인하는 방법
Null 허용 열 자체가 개별 테이블 전에서에서 그 열을 구분하는 대신, 널 (NULL) 컬럼을 추가하는 더 정상화를
을 즉 없습니다 [EmployeeId, AddressValue].
ExtensionColumnName [EmployeeId, ColumnName] 및 ExtensionColumnValue [EmployeeId, ColumnValue] 테이블을 만듭니다. ExtensionColumnName은 ColumnName을 "Address"로, ExtensionColumnValue는 ColumnValue를 주소 값으로 갖습니다.
Employee 테이블
는 직원 ID
이름ExtensionColumnName 테이블
ColumnNameId는
는이 ExtensionColumnValue 테이블
를 직원 ID umnValue
이
ColumnNameId
골을 직원 ID
의 ColumnName
스키마가 새로운 속성마다 변경되면서 처음 두 가지 방법이 있다는 단점이 있습니다. 새로운 속성을 추가하는 것은 빈번하고 요구 사항입니다.
좋은지 나쁜지 잘 모르겠습니다. 사람이 만들 수있는 유사한 결정이 있다면, 당신은을 사용하는 경우 하나의
Property:
EmployeeID foreign key
PropertyName string
PropertyValue string
로 ExtensionColumn 테이블을 결합 등
OMG 조랑말, 결국 스키마를 생각해 냈습니다. 그러한 스키마 문제에 관심이 있습니다. 예 : EMPLOYEE_ATTRIBUTES의 VALUE 열이 ID (다른 테이블의 기본 키)이면 문제가됩니다. 이러한 속성은 조회 및 상응하는 조회 테이블 이름임을 나타내는 별도의 메타 테이블을 갖는 것으로 해결할 수 있습니다. 이것은 일부 동적 SQL 또는 반사를 포함하고 유형 안전을 잃게됩니다. – hIpPy