2012-08-22 30 views
1

我們有一個關係數據庫(MySql)和一個存儲「無論」的表。這個表格有許多存儲不同(邏輯和數據)類型屬性的字段。該請求是另外添加150個不相關的新屬性。使用NoSql功能修飾現有的關係SQL數據庫

我們當然不想添加150個新的列。我看其他兩個選項:

  1. 添加一個簡單的鍵值表(ID,FK_Whatever,鍵,值也許型),其中* FK_Whatever *引用無論ID和關鍵會名稱的財產。使用JOIN查詢會起作用。
  2. 加入到大文本字段中,然後將150個新屬性序列化爲它(也許是Xml)。在某種程度上,這將是NoSql存儲數據的方式。查詢這些字段意味着要實施一些智能的全文語句。

在這兩種情況下,類型安全性都會丟失,但我們並不需要這樣做。

我有一種感覺,這個常見問題有一個更明智的解決方案(由於各種原因,我們無法移動到NoSql數據庫)。有沒有人有提示?

回答

3

在我們需要存儲任意擴展屬性的業務對象早期的一個項目,我們創建了一個擴展架構如下:

CREATE TABLE ext_fields 
{ 
    systemId INT, 
    fieldId INT, 
    dataType INT // represented using an enum at the application layer. 

    // Other attributes. 
} 

CREATE TABLE request_ext 
{ 
    systemId INT, // Composite Primary Key in the business object table. 
    requestId INT, // Composite Primary Key in the business object table. 
    fieldId INT, 
    boolean_value BIT, 
    integer_value INT, 
    double_value REAL, 
    string_value NVARCHAR(256), 
    text_value NVARCHAR(MAX), 
} 

給定的記錄將只有_value列的基礎上設置ext_fields表中定義的字段的數據類型。這使我們不會失去該領域的類型,並且它的價值並且在利用DBMS爲這些數據類型提供的所有過濾方法方面工作得非常好。

我的兩分錢!

+1

這將是選項1的擴展,但我喜歡強類型值的方法。謝謝。 – Olaf

+0

沒錯,我們選擇了一個強類型的[key,value]數據存儲。 – Vikdor