2013-04-25 141 views
0

我在設計數據庫時遇到問題。將文檔映射到不同實體

我有一個包含具有以下表結構的文件表:

[Documents] 
Id [int] 
FileName [varchar] 
FileFormat [varchar] 
FileContent [image] 

在我的程序:每個文檔可以是獨立的(沒有一個實體的任何關係)或與相對於一個對象或者客戶或員工類型(更多可能即將推出)

每個實體在數據庫中都有一個Id。例如Employee-Table看起來像:

[Employee] 
Id [int] 
Fk_NameId [int] 
Fk_AddressId [int] 
Fk_ContactId [int] 

我的想法是爲實體和文檔的連接創建一個表。我想過類似於:

[DocumentConnection] 
DocumentId [int] 
EntityId [int] 
Entity [varchar] 

DocumentConnection-Table中的實體列包含關係的表名。

在Employee類型的實體示例中,此列將包含「Employee」。 在我的應用程序中,我通過從數據庫讀取實體字符串來構建文檔的select語句。

我不確定這是否是一個很好的方法來做到這一點。

+0

不會DocumentConnection也需要一個EmployeeID/CustomerID字段? – Melanie 2013-04-25 14:44:52

+0

哦,是的。我更新了我的排隊。 – Tomtom 2013-04-25 14:53:26

回答

2

我認爲這將是一個更好的設計有一個EmployeeDocument表,CustomerDocument表等

這將允許你使用外鍵的實體表,這會不會對你提出的設計成爲可能。在您的設計中,您將能夠將任何內容放入實體和entityId列中,並且不會通過實際與現有實體相關的外鍵關係強制執行。

我可以看到使用DocumentConnection表的唯一原因是如果您的應用程序需要動態創建新類型的關係。我認爲情況並非如此,因爲你說每種類型的實體都有自己的表格。

+0

是的,每種類型的實體都有它自己的表格。但是,如果我將文檔從員工移動到客戶,那麼我不得不將其從員工表中刪除並向客戶表中添加新內容,對吧? – Tomtom 2013-04-26 04:49:27

+0

@Tomtom,好的。我想這比在DocumentConnection表中更新兩個字段要稍微多一點。國際海事組織,這是支付數據庫強制執行參照完整性的一個小的代價。 – 2013-04-26 14:50:04