1

我在我的ASP.NET MVC應用程序中使用Fluent NHibernate來檢索數據並將其保存到Postgresql數據庫。具有多個允許值類型的數據庫字段

說你有持有

Fields {Name, DataType, Value} 

//Model 
public class Table { 

    public virtual string Name { get; set;} 

    public virtual string DataType { get; set;} 

    public virtual string Value { get; set;} 
} 

一個表,所以一個典型的記錄可能是:

Record { "Firstname", "Varchar", "Bob" } 
Record { "DateOfBirth", "Timestamp", "2003-04-12 04:05:06" } 

因此,爲了使這樣工作,值需要Varchar類型。

有沒有更好的方法來做到這一點?我不喜歡Valuestring/Varchar

我寧願值類型是object什麼的。我已經嘗試過,但從Fluent NHibernate得到Exception

您如何從DDD的角度來解決這個問題?

+0

我不知道postgresql,但我在過去成功的MSSQL中使用了這個確切的策略。 SQL沒有給你一個「對象」數據類型來處理,所以我發現的下一個最好的東西是一個varchar列中的序列化對象,第二列存儲數據類型。也許別人會有更好的解決方案。 – 2015-03-08 23:19:53

回答

1

你可以使用json(或者jsonb,如果你的postgres版本支持的話)。

在這種情況下我不會那樣做。爲了充分利用索引和數據搜索的優勢,最好提出一種結構,將不同的數據類型保存在不同的字段中,以便對其進行排序和高效搜索。

一個例子:

create table obj as (obj_id serial, 
        name varchar, 
        vc_data varchar, 
        ts_data timestamp, 
        intdata integer 
        datatype varchar); 

您可以創建在所有的領域,如果有必要的索引,甚至視圖(由數據類型時不搜索或排序),使 一些你的代碼更簡單

create view obj_view as 
    (select obj_id, 
    name, 
    coalesce(vc_data, ts_data, int_data) data 
    from obj) 
+2

'json'支持PostgreSQL 9.2及以上版本,'jsonb'支持PostgreSQL 9.4及以上版本 – 2015-03-09 08:56:32

+0

這對NHibernate ORM有效嗎? – 2015-03-09 21:19:51

+1

該視圖對於原樣查詢會很有效,但您將不得不更改用於插入/更新/刪除的應用程序邏輯 – 2015-03-10 14:18:26

相關問題