我想設計一個表格來幫助跟蹤坦克的內容隨着時間的推移。坦克一般都是一次裝滿,並且將會應用很多名字,並且它將被清空。如果這是唯一的情況,那麼我會這樣做。批量跟蹤的最佳餐桌設計
表:dye_tank
dye_id (PK)
dye_lot
dye_color
表:油漆
paint_id (PK)
paint_lot
paint_color
表:dye_transfer
dye_transfer_id(PK)
dye_id (FK)
paint_id (FK)
dye_transfer_note
這將讓我多很多染料轉移到油漆一箱油,並在多批油漆之間使用一個染料罐。
如果我還願意能夠將大量油漆轉移到另一批油漆中,該怎麼辦。例如,我可以在油漆罐中添加黃色染料來製造大量黃色油漆,然後將其泵入現有的一批藍色中,以製成一批新的綠色油漆。你推薦一個單獨的表像很多轉讓:
表:paint_transfer
paint_transfer_id (PK)
paint_id (FK)
paint_id (FK)
還是有更好的解決方案。我可以擴大染料轉移表,並使其:
表:轉讓
transfer_id (PK)
source_id
source_type
paint_id (FK)
transfer_note
有了這個,我可以在源類型設置爲是「漆」或「染」,並設置SOURCE_ID是來源成分的適當PK。這樣做的一個缺點是我不得不使用一些更復雜的觸發器,而不是依靠內置的外鍵級聯來維護參照完整性。
第一個解決方案看起來更簡單,但第二個解決方案似乎可以提供更大的靈活性。
第三個解決方案是忽略油漆桶到油罐轉移發生的事實,並將「綠色」油罐創建記錄爲從黃色油罐和所有從綠色油罐轉移的所有油罐坦克。
任何人都可以看到具體的優點或缺點解決方案,或使用不同的東西類似的問題?
爲什麼要使用這樣的小列名。 dye_id,paint_id,transfer_id更易於理解和閱讀。對於具有人們可以理解的列名的性能沒有影響。 – Hogan
我已經改變了它 –
我會爲兩種轉移類型推薦兩個表格,除非您希望存在許多不同類型的轉移。只有兩種類型,兩張表更好。 4個或更多更通用的系統會更好。如果您覺得需要這種格式的數據,您可以隨時查看組合表格。 – Hogan