2009-09-01 18 views
4

ユーザーはオブジェクトに独自のフィールドを定義し、これらのフィールドに許容値を定義できる必要があります(コンパイルなし)。EAVを使用せずにどのように解決しますか?EAVの代わりにユーザー定義フィールド?

例:すべてのオブジェクトに123ステータス番号(1.aまたは2.bまたは3.cを許可)への参照が1つ以上必要です。

答えて

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)をユーザーが提供するユーザーが読める名前にマップするエントリ(行)を追加します。

関連する問題