2015-01-01 134 views
0

我試圖從法律執行組織的十個本地數據源中提取有關人員的信息。我創建了一個名爲Person表:建模其他字段

CREATE TABLE Person 
(ID int identity, 
    DateOfBirth datetime, 
    Occupation varchar(100), 
    LastVisit datetime, 
    datecreated datetime, 
    datemodified datetime, 
    primary key (id)); 

每十個數據庫的成立:出生日期,職業,LastVisit,dateCreated會和datemodified所以很簡單的創建該表。

某些數據庫包含其他信息。例如,數據庫1包含地址和數據庫2,包含車輛和數據庫3,包含屬性和數據庫4,包含智能等。

我試圖想出建立這些需求的最佳方法。我相信有兩種選擇:

  1. 創建附加信息表車輛表,地址表,屬性表等。Person和每個附加表之間將存在零對多的關係。
  2. 使用更動態的方法,即CustomTable1,CustomTable2,CustomTable3等。CustomTable1將具有CustomField1,CustomField2等。此方法意味着在附加表格之上引入抽象層。有沒有這樣的設計模式,我不知道?
+1

你的第二點是可怕的......如果你要創建額外的表格(複數),那麼至少要正確命名它們(所以你回到第一點)。如果你要在一個表中完成它,它被稱爲EAV(實體屬性值)。 – Ben

回答

1

(竊竊私語)你是Java程序員嗎?

如果您建立一個表來存儲車輛數據,並將其命名爲「CustomTable17」,那麼每個寫查詢的人都會詛咒你,直到你臨終的一天。你甚至會詛咒自己。

不要這樣做。就你而言,你甚至在開始之前就知道你需要建模的每個屬性。你不需要「更多動態」。你不需要一個「抽象層」。

將車輛數據存儲在名爲「車輛」的表格中,除非有令人信服的理由使用不同的名稱。 「更具活力的方法」和「抽象層」並不是使用不同名稱的令人信服的理由。

「這張表不適用於任何車輛,只適用於扣押車輛。」現在將是一個令人信服的理由使用不同的名稱。但我們正在談論像「impounded_vehicles」這樣的名稱,而不是像「CustomTable135」這樣的名稱。

當我不得不整合來自多個來源的數據時,我有時會發現存儲每行來源非常有用。給一些想法。

+0

感謝+1:「每行的源代碼」。有沒有這個模式的名稱? – w0051977

+0

*謝謝+1:「每行的源代碼」。*不客氣。這不是我所說的,儘管有時可以爲每個原始行存儲源數據庫和密鑰提供一個很好的例子。 (有些應用程序需要這樣做,有些則不需要。)專業數據庫開發人員不使用四人組意義上的設計模式。選擇要存儲的屬性通常是開發需求的一部分。選擇如何存儲它們通常是數據庫設計和數據庫規範化的一部分。 –

相關問題