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

Database field with multiple allowed value types

我在 ASP.NET MVC 应用程序中使用 Fluent NHibernate 来检索数据并将数据保存到 Postgresql 数据库。

假设您有一个 table,其中包含

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 或其他类型。我试过这个但是从 Fluent NHibernate.

得到了一个 Exception

你会如何从 DDD 的角度来解决这个问题?

您可以使用 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)