具有多个允许值类型的数据库字段
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)
我在 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)