我發現很難找到一個好的標題,我希望我能更好地解釋它。 我有兩個表當候選鍵不存在時,用外鍵添加新行
"car" - id, car_id, name
"car_pictures" - id, fk_car_id, url
顯然,一個「車」能有幾張照片是那些通過在「car_pictures」表保存爲「fk_car_id」的car_id鏈接。 工作流程的前端可能是:
- you add a new car to the database
- you add pictures to this car entry
如果遵循這樣您第一次在「車」表中的新條目。然後,您可以在「car_pictures」表中引用「car_id」。
但是,如果你想改變工作流程是這樣的:
- you add a new car
- you immediately add pictures
- you save the new car to the database
如果遵循這樣,您就創建數據庫條目僅當用戶已經完成了所有「臺階」。但是,如果您想將照片添加到汽車中,那麼它還沒有「car_id」。所以你不能引用id。
如果添加汽車和添加圖片是兩個獨立的api調用,例如通常的做法是什麼。
看來我需要澄清我在做什麼。 假設我有兩個API調用: www.domain.com/api/car/add/?name=newcar - >用於添加汽車(即添加到數據庫) www.domain.com/api/car/picture/add /?car_id = x - >用於將圖片添加到汽車(即處理上載並將數據存入數據庫)
前端看起來像這樣: 帶有全部表格的頁面您可以在其他頁面上編輯和添加新照片。另一個頁面添加一個新的車也有可能添加圖片。這與編輯汽車的頁面/形式相同,只是沒有car_id可用。
編輯:
我自己能想到的幾種方法來處理這種情況。
第一:當用戶打開「添加新車」表單時立即爲汽車創建數據庫條目。這樣你總是有一個car_id。但如果用戶決定取消添加汽車並需要刪除這些「虛擬」數據庫條目,則必須處理。如果出現問題,您可能會以數據庫中的大量空車入場結束。也許該行有一個標誌,當汽車實際上被用戶「插入」時該標誌被設置。
第二種:插入具有臨時否定fk_car_id的新圖片,並在數據庫中創建行時使用實際的car_id更新這些行。
第三:在沒有car_id的情況下,將新照片保存到帶有臨時ID的臨時表中。那麼您必須返回該臨時ID並在創建數據庫中的汽車入口時從臨時表中移動這些條目。
但這些想法聽起來很複雜,我希望有一些最佳實踐方式如何做到這一點。也許問題出在我的工作流程中,並且有更好的方法來做到這一點。然而,分開添加汽車和將圖片添加到數據庫的過程似乎是一個好主意。
是否有可能爲你使用存儲過程和/或交易?用這種方法你可以做第一次插入,得到id,然後做第二次插入。如果出現問題,則不會寫入數據庫。 – GarethL 2013-02-27 17:11:35
爲什麼你需要car_id在「car」表中? 「car」.id鏈接到fk_car_id – apoq 2013-02-27 17:13:12
我無法使用事務,因爲添加圖片是一個單獨的腳本調用。 – DarsVaeda 2013-02-27 17:14:37