2010-08-16 133 views
0

也許今天早上我需要更多的咖啡,但是這裏有...一對一關係還是一對多?

我有一個非常簡單的庫存系統。現在我有兩個表:項目和庫存。

項目
編號
標題
YearReleased

庫存
標識
項目Id(外鍵項)
數量
QuantityOnHand

每個項目有一個庫存,每個庫存屬於一個項目。兩者之間的關係是一對一的。但是,當我繪製出來時,基於我的設置的關係到目前爲止是一對多的關係,這是由於我爲庫存自動遞增的ID。

現在,我可以通過消除庫存表中的自動遞增ID來實現此一對一,但這使我感到骯髒。我總是使用內部ID作爲主鍵。

我看到幾個選項:

1)在清單中刪除自動遞增ID字段,並與骯髒的感覺活着。
2.)保持原樣。
3.)將項目和庫存合併到一個表中:ItemsInventory。
4.)別的嗎?

回答

1

如果您確定映射始終爲1:1,那麼將兩個表合併成一個。

但是,你確定這種關係總是1:1嗎?

+0

是的,這種關係永遠是一對一的。每件產品都有特定的數量和數量。我開始傾向於這種方法... – Mike 2010-08-16 15:23:21

1

由於許多奧姆斯需要一個自動增量PK,我想:

4)添加一個唯一索引Inventory.ItemId,它應該顯示爲一比一的關係。

7

如果您的關係確實是一對一,請將ID從庫存表中刪除,並將ItemId作爲PK和FK。另外,將兩個鍵都命名爲ItemId - 幫助。

inventory_model

+1

+1,我想補充一點,自動遞增字段的存在會使得OP比刪除更可疑。這種方式更清潔。 – chryss 2010-08-16 15:12:44

+0

該圖如何生成? – Moeb 2010-08-17 08:39:49

+0

@Primx,ERwin - 還有一個社區版。 – 2010-08-17 11:21:06

0

會使得項目Id有一個約束是唯一的不足?這似乎滿足您的要求。

0

如果您提到的表結構將保持原樣,那麼我認爲您應該將Items和Inventory合併到一個表中:ItemsInventory。

對於這樣的小表格,將它們垂直分區是沒有意義的。這樣你會刪除一個額外的連接。在單個表格上選擇總是比聯接更快。

0

我會合並兩個表在一起我的主要原因是你將有重複的數據爲 以及不必要的數據,如果你堅持兩個表。查詢速度也會更快!看看這兩張桌子,我會合併成一張。

項目 編號 標題 YearReleased

庫存 標識 項目Id(外鍵項) 數量 QuantityOnHand

您將有兩個少collumns完整的數據,如果你合併到一個表( 「ID」ItemID「可以被刪除)編寫邏輯來回顧併發送數據到數據庫對你來說也將變得更加容易

I w烏爾德有這個表:

**ItemsInventory** 
Id 
Title 
YearReleased 
Quantity 
QuantityOnHand 

但是你必須確保它是一一對應的,否則你可能給自己很多的工作,如果經營業務需求的變化。

Simon

0

如果您確實想讓它成爲一個簡單的庫存系統,然後合併表。

不合並表的原因/它不保持簡單。

有多少商品沒有庫存記錄?你的例子只顯示了一些庫存字段,也許這就是它的全部。但是,您在庫存中跟蹤的字段會增加,並且有大部分商品不在庫存中,您將擁有大量空字段。

庫存更新的頻率如何?如果這些字段是其他交易表(採購和銷售)經常更新的結果,則沒有理由僅僅因爲購買或出售庫存而一致地更新商品表。在你當前的系統中,用戶期望這些值是實時的(如果沒有,那麼他們知道什麼是最新的,因爲他們沒有做出改變)。