2009-04-15 104 views
0

將記錄插入到與另一個表具有1:m關係的數據庫表中時,確保相關表已更新(插入)有新的記錄?如果只更新其中一個相關表,是否有任何後果?另外,如果我更新關係的m面上的表(例如,一輛車可以有多個車輪但車輪只能屬於一輛車的汽車和車輪的關係),我應該總是插入外鍵作爲顯式參數?例如。如果另一個相關表的PK系統爲1,2,3,4,5並且以獨特的方式向上走,我應該只通過存儲過程插入外鍵值作爲值嗎?關於將數據插入1:m關係的表部分的問題

編輯:這聽起來很n00bish,但不幸的是,我只學過/學習數據庫設計和Sql Server特別是從自我實踐(沒有正式的培訓)。

回答

1

讓我們用你的例子..

car: 
    car_id 
    name 

wheel: 
    wheel_id 
    car_id 

如果你的第一個問題是問你是否應該確保有一個相應的行car表,當你插入一條記錄到wheel表,然後是的!實際上,如果您的RDBMS使用外鍵正確設置,那麼您將無法在表中插入一行,而在car中沒有父行。

我想這也可以解決你的第二個問題。如果沒有,你能否詳細說明一下?

+0

嗨,它解決了我的第二個問題! :)我想知道的事情是在一個大的數據庫模式,你可以有相關的表,但你不提供細節來填充每個表。例如,一個產品可以有評論(因此是一種關係),但是產品可以被添加而沒有評論(例如亞馬遜)。 – dotnetdev 2009-04-15 13:25:42

0

當您有一對多關係時,您必須先將記錄插入到父表中。在插入父表時,您可能需要也可能不需要插入到子表中。這完全取決於您的設計以及插入初始記錄時可用的信息。例如,客戶和訂單有一對多的關係。但是在他或她實際購買任何東西之前可能會添加一個cusotmer,因此將沒有訂單。或者一個新客戶可能會試圖購買某些東西,並且需要存儲他/她的客戶信息和他/她的訂單。 YOu應該在您設置數據庫結構時設置主鍵/外鍵關係。這將確保您從未有關聯客戶的訂單。在訂單表中,您可以爲Customer表中的id字段添加一列。當您插入記錄時,該值將與其他信息一樣成爲插入的一部分。

如果更新父表或子表,則不需要更新其他表,除非更改具有PK.FK關係的字段,否則不需要更新其他表。最好如果你永遠不要改變這個值(主鍵應該是這樣的,以至於他們幾乎不需要chnaged。如果你使用的是主鍵的名稱等,你需要重新考慮你的設計。)