2014-01-30 86 views
0

考慮數據庫表的架構可能會發生變化的情況,即字段,字段數和字段類型可能因客戶端ID而異。創建非NoSQL關係多模式數據庫的好方法是什麼?

取,例如Users表。通常,我們會在一個水平表具有以下字段來表示:

  • 名字
  • 年齡

然而,正如我所說,每個客戶可以有不同的要求。

我的想法是,以表示SQL Server等關係數據庫中的多模式方法Users,這將是兩個表進行:

  1. UsersFieldNames - {FieldNameId,客戶端Id,字段名,的FieldType}
  2. UsersValues - {UserValueId,FieldNameId,fieldValue方法}

檢索數據(使用的EntityFramework DB前),我想數據透視表,像LINQ Extentions - Pivot Extensions使用的東西可能是有用的。

我想知道任何其他方法可以滿足這個要求。

我提出這個問題是爲了我自己的好奇心,我回想起過去類似的對話,以及關於this提出的問題。

謝謝。

回答

1

雖然我認爲NoSQL數據庫最適合這種工作,但我曾嘗試過這樣的事情。

有一個名爲像元表的表,這樣

元表= {table_name的,字段名}

和另一個

ACTUAL_DATA = {table_name的,FIELD_NAME,actual_data_id,float_value,STRING_VALUE, double_value,varchar_value}

在actual_data中,字段table_name和field_name是外鍵,指向METATABLES。在METATABLES中,您可以定義每個客戶需要的特定字段。 ACTUAL_DATA表根據數據類型(如果字段值是字符串,它將存儲在string_Value字段中)保存這些字段的實際值,存儲在相應的值字段中。

雖然這種方法可能不是最高效的。希望能幫助到你。

0

我認爲如果架構不同,將會是一個錯誤。這通常是你想成爲標準的東西。

在這種情況下,您可能擁有具有不同屬性的用戶。在user表中你存儲在所有用戶共同的屬性:

用戶{ID(主鍵),用戶名,第一,最後,出生日期,等...}

注:年齡是應該沒有被存儲,它應該被計算。

然後你可以有一個USER_ATTRIBUTE表:

{用戶id,鍵,值}

所以用戶可以有不相關彼此沒有模式變更多個屬性。

更改模式通常會中斷應用程序。

相關問題