需求:
能夠根據數據庫在界面動態顯示表單,包括表單類型、名稱等,並且必須提供 添加新表單,修改表單等功能。
為了滿足客戶不斷的需求變化,有時候需要為某商品增加、修改、刪除、屬性,這樣的話以往的數據庫表就很難實現,
因為表的字段是定死了 如果你需要增加一個屬性的時候 ,就必須修改表,聽說這是不允許的~~。
所以我們要設計一個靈活的數據庫 下面以電腦設備為例:
pc 現有屬性 name cpu ram disk 現在我們要為pc添加一個 mainboard 屬性。
既然必須提供增加表單,那么我們創建表的時候就不能以cpu ram disk 為PC表的列名, 能夠修改的話只能是值
所以應該建立以個屬性表 來保存這些值
create table y_property(
proid varchar2(16) primary key,
proname varchar2(64),--屬性名稱
htmltype varchar2(64),--界面類型
isneed number --是否必填
)
proid | proname | htmltype | isneed |
p001 | 型號 | text | 0 |
p002 | cpu | text | 0 |
p003 | ram | select | 0 |
p004 | disk | select | 0 |
然后要建立以個表來保存這些電腦屬性的值
create table y_provalues(
proid varchar2(32) , --屬性id
entity varchar2(32) , --實例id
provalue varchar2(1024) ,--屬性值
constraints pro_fk_proid foreign key (proid) references y_property(proid),
constraints provalues_pk primary key (proid,entity)
)
proid | entity | provalue |
p001 | e001 | 聯想揚天V45 |
p002 | e001 | AMD5200 |
p003 | e001 | 金士頓 |
p004 | e001 | wd500g |
p001 | e002 | HP450 |
p002 | e002 | INTEL458 |
p003 | e002 | 黑金剛 |
p004 | e002 | wd320g |
其實也可以這樣理解:
y_property 這個表就是一個類
y_provalues 這個表就是 y_property 這個類的實例。entity屬性就是實例編號,就是一個實際存在的產品編號。
另外我們還可以在這個基礎上面拓展其他的表使其功能更為豐富,
如 電腦檔次表、cpu表(這樣的話我們就可以y_provalues中的provalue 與其他表關聯,在界面就可以提供下拉列表顯示,選擇)
這樣下來的話就能對電腦商品添加屬性了。
接下來的任務就是做一個工程實現界面的動態表單了