2011-05-19 147 views
3

我有一個工作的SQLite數據庫,其中包含有關視頻文件的信息。目前的設計如下圖所示。但是,老闆決定做一些改變。數據庫設計建議

enter image description here

FileProperties表目前使用的文件名作爲主鍵。然而,PK現在必須是文件名稱和(文件)位置的複合關鍵字,無論如何,這更有意義。

如果這樣做了,將這個複合鍵作爲外鍵引用到其他表中的最佳方法是什麼?我想創建一個單獨的表,其中包含一個自動遞增的主鍵,文件名位置。然後PK可以用作所有其他表的外鍵引用。

或者,讓文件名位置組合鍵在當前FileProperties表並添加可以作爲參考,這個字段必須是自動遞增的和獨特的表中的一個新的領域。

我還沒有太多的設計數據庫實踐經驗,所以任何與我的問題或我目前的設計意見將非常受歡迎。

+1

確保您的文件名和位置足夠大。如果「位置」是一個路徑,那麼它可能會比50大。另外,對於文件名,NVARCHAR可能是更好的選擇。 – Blazes 2011-05-19 08:23:09

+0

+1布拉斯。 NVARCHAR應該是默認的,除非很有可能需要更大的空間。特別是對於Oracle--文本字段以大型對象的形式存儲,這是一個很難使用的問題。 – 2011-05-19 08:28:55

回答

3

絕對使用自動遞增主鍵。爲確保數據完整性,請在(文件名,位置)列中創建唯一索引。

following wiki article簡要介紹了自然鑰匙的優缺點。自然鍵是直接從數據中獲得的關鍵。在你的情況下,這將是(文件名,位置)的組合鍵。簡而言之,一個自然的密鑰減少了數據所需的物理空間,代價是在所有關係中傳播密鑰的變化。

即使有一個可用的自然鍵,我(幾乎)在表上總是有一個自動遞增的id。

3

添加自動遞增的FileId主鍵。
爲Location + FileName添加唯一約束。
避免使用複合主鍵。