當某table內有not null的foreign key, 如何新增一項記錄 |
尚未結案
|
pasphi
一般會員 發表:16 回覆:12 積分:5 註冊:2002-11-29 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
引言: Table TA 內有一field f1, 它是not null並且是foreign key, reference to Table TB 內某一field. 當執行AdoTable.insert, 會出錯, 原因為f1必要有一個值. 但程序員也沒有理由在用戶未填入數據時, 任意填了這一欄位, 請問應如何處理呢?我的觀念是~其實上述你所說的紅色那段話就道出了問題的所在!既然TA中的一個field是TB中的一個索引,且是forieng key,那麼為何在還未有TB的值就要有TA的值呢?是不是資料庫正規化沒做好?還是要作舊有系統的更新而遷就舊系統的格式?如果按此TB及TA中的資料沒有關連好,爾後新增到TB中的資料就會變成像是銀行的呆帳! 如果真要先新增TB的話,建議將思維反過來,也就是將TA中的一個field當作是TB中的一個field的索引,且該field是TB的foriegn key,而TB中那個not null的field就以「自動編號」來替代。 ----------------------- Practice makes perfect. |
pasphi
一般會員 發表:16 回覆:12 積分:5 註冊:2002-11-29 發送簡訊給我 |
多謝你們的回覆 而就Stallion兄的答覆中,其實這資料庫設計我可以舉出一個例子:
TA是記錄商戶的資料,如: name | f1
--------- ------
大大公司 | 1
大元公司 | 3 而TB是記錄公司類型,如:
f2 | description
--------- --------------
1 | 飲食業
2 | 工業
3 | 運輸業
而當delphi用一個form讓用戶輸入公司資料(TA),
則AdoTable.insert時, 若不給予f1值, 就會出錯,
但程序員又無理由預設為f1 = 1, 而就malanlk 兄所言, 可以在TB加一項記錄為"未設定",
但假設這個table是不可變, 大家會如何處理這些問題呢?
------
DELphi== |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
問題很簡單~
1.以此例而言TB本身是一個MASTER DATABASE,而它的每個FIELD都應該是UNIQUE,所以本身也應該有獨立的新增,修改,刪除功能。
2.TA本身也是一個MASTER DATABASE,只不過其中一個FIELD是要來自於TB,因此在新增TA時,其中一個FIELD就由TB中讀出後強制一定要使用者選擇一類,也就是說TA中的f1 foriegn key是TB中的f2。
3.可以設計的精巧一點,就是當使用者在新增TA時不選擇TB中的一種類別,而直接輸入一個新的類別,就詢問使用者是不是要新增一個新的種類至TB中(需要先檢查是否有重複鍵值),作為下次新增時新的選項。
4.以上請參考~ -----------------------
|
pasphi
一般會員 發表:16 回覆:12 積分:5 註冊:2002-11-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |