我正在爲計算機商店設置數據庫。在數據庫中我有一個名爲computer_system的表,它具有一個數組屬性。在陣列這些組件去: CPU RAM 情況下 主板 顯卡如何在postgreSQL中設置條件約束
現在到了棘手的部分: 的不同組件都有自己的桌子,是一個被稱爲組件表中的所有子表。 主板表具有稱爲「板載圖形」的屬性。如果它有一個圖形卡,它將在這裏列出。如果不是,則該屬性爲空。
現在,當我在computer_system表中插入組件時,我需要postgres來檢查主板是否通過,有一個on_board圖形卡。如果沒有,則必須添加圖形卡,然後才能成功執行查詢。我如何添加這個約束?
我試圖解釋我的問題盡我所能,我已經檢查了我所有的書,但是我找不到答案。隨意問我,如果有什麼不清楚的。 此外,這裏是一個未完成的ER-圖我已經爲這個數據庫進行
http://i.stack.imgur.com/zAT0f.png
編輯: 在什麼我想要做的。換句話說,如果mainboard.on_board_graphics爲NULL,則graphics_card不能空值。
組件及其特性變化如此之快,您將不得不每天重新設計您的模式。看起來JSON格式更適合這個,在應用程序方面有限制。 –
@EgorRogov這是一個學校作業,所以我不需要根據組件的真實世界的特性來更新數據庫:) – yeahboy
那麼,如果沒有看到表格,很難建議一些東西。但是,如果您最多隻允許將一個圖形卡連接到主板,則可以使用這樣的FK:'mainboard.graphics_card_id引用graphics_card(id)'。然後你可以添加約束'check((on_board_graphics不爲空)或(graphics_card_id不爲null))'。 –