2010-12-08 92 views
0

我想就特定問題提供一些數據庫/編程建議。動態數據庫結構

我有5個不同的人(生活在世界的不同地區)爲我提供數據。遵循標準的結構佈局,這些數據以各種方式提供給我。然而,它並不總是協調一致的,數據可能有額外的東西不在標準中,所以我希望結構儘可能動態以適應人們想要使用的東西。

然後將這5個數據源放置在主機的中央數據庫中。所以基本上我有5個數據源按照標準結構格式化,並且它們被上傳到我的本地數據庫。

我想盡可能爲提供數據的人自動上傳這些數據,所以我希望他們上傳自動插入到本地數據庫的新數據集。

我的問題是:

  1. 我應該如何保持結構的動力,而不必重新審視我的標準佈局,以適應新的數據字段,或者不同的結構?
  2. 如何讓他們以增量方式上傳數據?例如,他們可能正在上傳他們的數據的XML版本,我的上傳代碼應該找出已經存在的內容。
  3. 我最後的也是最重要的問題。有沒有更好的方法去做這件事,而不是有一個上傳基礎設施?
+0

也許一些靜態結構的核心列和EAV的動態?數據收到時會發生什麼?這些附加字段如何使用? – 2010-12-08 16:25:02

回答

3

我應該如何保持結構動態而不必重新訪問我的標準佈局以適應新的數據領域或不同的結構?

基本上,您將透視列和行的正常數據庫想法。

您有一個數據名稱表,它包含數據字段的唯一名稱,以及一個指示符,用於告知導入過程存儲了哪些類型的數據,如日期,時間戳或整數。

您有一個數據表,其中包含數據名稱id,序列號,數據字段和用於標識信息的外鍵。

序號用於區分同一數據名稱的不同值。

數據字段包含可能的每種類型的數據。這在大多數數據庫中都是VARCHAR(MAX)。上傳過程將日期和數字轉換爲字符串。

您的數據表將有一個外鍵用於標識數據字段所屬的其他信息。

如何讓他們以增量方式上傳數據?例如,他們可能正在上傳他們的數據的XML版本,我的上傳代碼應該找出已經存在的內容。

簡短的回答是,你不能。

您的上傳過程必須識別重複數據,而不是將其存儲在數據庫中。

我最後的也是最重要的問題。有沒有更好的方法去做這件事,而不是有一個上傳基礎設施?

這是一個很難的問題沒有更多地瞭解您收到的數據類型來回答,但是有軟件,讓您加載數據庫,而很多節目,通過定義輸入數據結構和地圖該結構到您的數據庫表。

1

這是一個非常普遍的問題,但我想我有一個普遍的答案。我認爲解決您的問題的方法是構建一個新的關係演算,其中附加到主記錄的屬性不是預先確定的。這是一個涉及電話簿應用程序的例子。使用非關係表

常用方法:

  • 表PERSON有名稱, HOMEPHONE,OfficePhone列。

一切都很好,但你會怎麼做,如果偶爾人顯示了一個手機,一個以上的移動電話,傳真電話等

相反,你要做的是:

  • 表人名有Person_ID, 名稱。
  • 表電話有列Person_ID, Phone_Type,PhoneNumber。

人與電話之間存在一對多的關係,可以有任意數量的從零到數萬的關係。這些表由Person_ID聯接。您必須具有列舉Phone_Type列的業務邏輯和表示邏輯(或者讓它成爲自由格式,這不是很有用,但更容易)。

你可以爲任何屬性做這件事,並且是關係數據庫的全部內容。我希望這有幫助。

0

正如其他人所說,EAV表格可以處理動態結構。 (請注意大桌子上的性能問題)

但是您的數據庫字段是否由客戶端指定是否符合您的興趣?你不能編寫商業邏輯來對這些新領域採取行動,因爲它們還不存在,它們可能是任何東西。

你能強制客戶端符合你的模型嗎?這使您可以提前知道這些字段,並使業務邏輯根據字段進行操作。它還允許您編寫有意義的報告,而不僅僅是調整數據轉儲。