具有多个允许值类型的数据库字段

时间:2015-03-08 22:05:17

标签: c# postgresql nhibernate fluent-nhibernate domain-driven-design

我在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类型。

有更好的方法吗?我不喜欢Value类型为string / Varchar的想法。

我希望值类型属于object类型。我试过这个,但从Exception获得Fluent NHibernate

您如何从DDD角度解决此问题?

1 个答案:

答案 0 :(得分: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)