现在一个物流的项目有一个要求,如下:
在采购订单中,除了系统给定的一些字段之外,允许用户自定义字段。我们会在数据库中预留一些各种类型的字段,比如:col1 : int
col2 : int
.
.
col50 : string
col51 : string
.
.
col70 : date
col71 : date用户可重命名这些字段,即系统中不显示col。假设用户设定col2为“付款方式”,col51为“订单备注”,那么,存储“付款方式”,“订单备注”数据的表应该如何设计呢?注:系统中采用了hibernate,不知道这样的数据库如何设计,请各位高手帮忙了!越详细给分越高!
在采购订单中,除了系统给定的一些字段之外,允许用户自定义字段。我们会在数据库中预留一些各种类型的字段,比如:col1 : int
col2 : int
.
.
col50 : string
col51 : string
.
.
col70 : date
col71 : date用户可重命名这些字段,即系统中不显示col。假设用户设定col2为“付款方式”,col51为“订单备注”,那么,存储“付款方式”,“订单备注”数据的表应该如何设计呢?注:系统中采用了hibernate,不知道这样的数据库如何设计,请各位高手帮忙了!越详细给分越高!
rename column col2 to 付款方式;alter table tablename
rename column col51 to 订单备注;
给定参数
create or replace procedure xx( v_1 varchar2,v_2 varchar2)
is
sqlstr varchar2(200);
begin
sqlstr:='alter table tablename rename column '||v_1||' to '||v_2||';';
execute immediate sqlstr;
end;当用户要修改那个列的时候只要调用这个存储过程就可以。
P1TEXT VARCHAR2(64)
P1 NUMBER
P1RAW RAW(8)
P2TEXT VARCHAR2(64)
P2 NUMBER
P2RAW RAW(8)
P3TEXT VARCHAR2(64)
P3 NUMBER
P3RAW RAW(8)
--提供个思路:(假如此表的名称为:user_define_table)Create or replace trigger biu_user_define
Before update or insert On user_define_table
for each row
begin--使用循环进行判断:if updating then
if ... then ... --使用:new.col=:old.col对每列进行判断,看用户修改了有没有?
--如果已修改,则记录表名为user_table_i,col名为v_col_i,修改值为u_col_i:select 'alter table user_table_i rename column ' || v_col_i || ' to ' || u_col_i from user_define_table;
end if;
if inserting then
--如果是新增表,则用insert into来做。
end if;
end biu_user_define;
因為這樣,你可以依記錄不同,取得不同的標題
我在設定工資表的時候,因為不同人的項目不同,就用二個字段來處理的。或都你可以用二個表來實現,A,B
A 視情況是否存儲字段名稱,長度
B 字段名稱可能會是col1..col100數據長度盡量放大
所以要设计一个专门的表来存放,表中设计关联字段.可以尝试这样设计:create table 用户字段表
(
用户ID int, -- 用于关联对应的用户
自定义字段所在的表名 varchar2(50), -- 用于关联被定义的表
定义字段name varchar2(50),
定义字段value varchar2(100)
)
你的設計是把每個用戶的自定議字段內容有記錄下來,但是後續輸入數據如何來對應,是否會出現每個用戶一個表,在存取數據的時候會比較麻煩 樓主的用戶自定議是否會經常變動也是要考慮的問題