2009-09-01 4 views
4

사용자가 객체에 대해 자신의 필드를 정의 할 수 있어야하고이 필드에 대해 허용되는 값을 정의 할 수 있어야합니다 (컴파일하지 않음). EAV을 사용하지 않고 어떻게 해결할 수 있습니까?EAV는 사용자 정의 필드를 대체합니까?

예 : 모든 개체는 123 상태 번호 (1.a 또는 2.b 또는 3.c 허용)에 대한 참조를 하나 이상 필요로합니다.

답변

7

관계형 데이터베이스는 실제로 미리 정의 된 안정된 스키마의 존재에 의존합니다. 어쩌면 document-oriented databases을보아야 할 것입니다. 그들은 일반적으로 속성, 문서, 그리고 즉석에서 자유롭게 정의 할 수 있습니다.

스키마 유효성 검사는 스키마 자체를 사용자가 변경할 수있는 경우 응용 프로그램에서 수행해야합니다.

2

관계형 DB를 사용해야하는 경우에는 (어색한) 해결 방법이 있습니다. 나는 EAV (가능하다면) 또는 Thilo의 제안을 추천했다. 여기에 관계형 방식이 있습니다.

경고 : 우리는 에 열 수 각 데이터 유형에 대해 만들 수있는 사용자를 바인딩 최대 가정합니다

  1. : 다음은이 방법의 한계입니다. 많은 사용자가
  2. 우리는 각 열
  3. 정상 형태의 총 위반에 의미를 추가하는 사용자의 개념을 필요로하는 열 몇을 사용하는 경우
  4. 우리는 스파 스 테이블을해야합니다

_

create table main_tbl(

numColumn1 number(10), 

numColumn2 number(10), 

numColumn3 number(10), 

numColumn4 number(10), 

numColumn5 number(10), 

charColumn1 varchar2(100), 

charColumn2 varchar2(100), 

charColumn3 varchar2(100), 

charColumn4 varchar2(100), 

charColumn5 varchar2(100), 

dateColumn1 date, 

dateColumn2 date, 

dateColumn3 date, 

dateColumn4 date, 

dateColumn5 date 

) 


create table main_tblmeaning(

user_id varchar(25) foreign key references users_tbl (user_id), 

numColumn1_name varchar2(50), 

numColumn2_name varchar2(50), 

numColumn3_name varchar2(50), 

numColumn4_name varchar2(50), 

numColumn5_name varchar2(50), 

numColumn6_name varchar2(50), 

charColumn1_name varchar2(50), 

charColumn2_name varchar2(50), 

charColumn3_name varchar2(50), 

charColumn4_name varchar2(50), 

charColumn5_name varchar2(50), 

dateColumn1_name varchar2(50), 

dateColumn2_name varchar2(50), 

dateColumn3_name varchar2(50), 

dateColumn4_name varchar2(50), 

dateColumn5_name varchar2(50) 


) 

create table users_tbl(

user_id varchar2(25) primary key, 

user_name varchar2(50) 

) 

사용자가 숫자 열은 그에게 무료 번호 열 (numColumn1 - 5)을 할당하고자마다 main_tbl에 있습니다. main_tbl_meanings에 열 (numcolumn1-5)을 사용자가 제공 한 사용자가 읽을 수있는 이름으로 매핑하는 항목 (행)을 추가하십시오.

관련 문제