各位大大好,小弟現在遇到一個難題。
因為在開發Web App頁面時,一個頁面中除了有幾項固定資料(像是生日、性別)需填之外,另外頁面上會有一個表單,橫著的欄位約有4欄(假設是A, B, C, D)是需要填的,縱向(垂直)的行數會有22個項目(假設項目名是1,2,3...,22)要填。
也就是說,一個表單內會有88個格子可以填資料(不一定都是必填)。
而每行(資料庫table中)資料也會有基本的欄位是一定會有的,例如,序列號、單位、資料的擁有人、輸入資料的人、輸入資料的日期等等。
現在問題來了,由於網頁表單縱向的數量目前看起來是很固定的 - 22行項目要填,橫向的欄位的4個也是固定的,在關聯式資料庫table的設計上,應該是同一個頁面的資料所有的儲存在相同一行之中好? (可能一個table裡面定義90多~100個欄位)
還是,在table schema設計會拆成兩個tables (T1, T2),一個table (T1)是基本資料外加獨立性資料的儲存,另外一個table (T2) 儲存那網頁中表單內所有的資料(定義A,B, C, D欄<column>跟幾個基本固定欄<column>,資料垂直的長,在該網頁按下儲存按鈕時,會在T1上有一筆資料,在T2會存有22筆資料),並再加一個foreign key與T1的某一行資料產生關聯這樣的方式好?
請高人指點。感恩~
最基本的一對多定義法
參考看看
序列號|姓名|性別|單位|資料的擁有人|輸入資料的人|輸入資料的日期
------------- | -------------| -------------
1|李大華|男|FIN|李大華|李大華|20181207
2|張小明|女|FIN|李大華|李大華|20181207
序列號 | 表單欄位鍵值 | 表單欄位內容 |
---|---|---|
1 | D1 | Y |
1 | C6 | Y |
1 | B17 | N |
1 | A22 | N |
2 | B1 | Y |
2 | B3 | Y |
2 | B8 | Y |
2 | D1 | N |
李大華的頁面呈現如下
A | B | C | D | |
---|---|---|---|---|
1 | Y | |||
2 | ||||
3 | ||||
4 | ||||
5 | ||||
6 | Y | |||
7 | ||||
8 | ||||
9 | ||||
10 | ||||
11 | ||||
12 | ||||
13 | ||||
14 | ||||
15 | ||||
16 | ||||
17 | N | |||
18 | ||||
19 | ||||
20 | ||||
21 | ||||
22 | N |
這樣的做法原因之一是
我不相信這幾句話
「四欄是固定的」
「22個項目是固定的」
「一個表單內會有88個格子可以填資料」
我覺得他提出所謂頁面上的資料,其實還只是「需求」。之後需要分析跟設計來確定資料庫長怎樣,最後再來看需求怎麼實現(也就是最後頁面真的要長怎樣)。
各位大大們您們好,不好意思回應晚了。
確實是88格資料欄位要填哦。。。而且還不只一頁的forms要填。像這種還是固定欄位的,只是資料非必要一定都得填。
有些還是動態要產生的行。不過動態產生的背後資料欄位設計到還明確,反倒是這種要填的值超多,但又固定的,就有點為難該把所有欄位值放入同一行(88欄值)裡好,還是分層次,一筆資料記載四個欄位值外加這個值所對應的項目,然後這一頁填寫實,最多在DB table上會產生22筆資料這樣的設計方式好。
蠻同意fillano大大所說的,頁面呈現倒是其次,主要是資料table怎麼設計比較好。