2

这可能有点花哨,但是否有任何模式或东西可以以最佳方式在关系数据库(不是 nosql)中存储任何类型的对象?

例如以非最佳方式:

class Person{
    string FirstName {get;set;}
    string LastName {get;set;}
} 

class Product{
    string Name {get;set;}
    decimal Price {get;set;}
} 

并在数据库中:

CREATE TABLE Data
   (Id int PRIMARY KEY, 
    TypeName nvarchar(50), 
    PropertyName nvarchar(50), 
    PropertyValue binary)

然后记录被存储在数据库中,如下所示:

1    Person    FirstName   Jalal

2    Person    LastName    A.R

3    Product   Name        Apple

4    Product   Price       2
4

4 回答 4

3

您所描述的本质上是一个实体-属性-值表。

它适用于潜在属性的数量很大但潜在值的数量很少的情况。这种用例的一个例子是医疗数据(症状),其中患者可能出现的潜在症状数量很大,但实际症状的数量很少。

使用不当,是内平台效应的经典例子。

于 2012-02-28T20:07:53.503 回答
2

您可以将对象序列化为 XML,并将其存储在数据库中。SQL Server 有一个专门的 XML 类型,它甚至允许您查询内容。

这不是最佳解决方案,但它会满足您的需求。

于 2012-02-28T20:08:37.133 回答
0

不知道为什么你会这样做几乎不是最优的。如果要寻找一个人,您将针对字符串值进行表扫描/索引查找,然后按主键过滤。

ORM 会好得多 - nHibernate 或实体框架(EF)它们会将每个类映射到一个表并自动生成 eth 主键等,您可以将对象表示为子对象等。

EF 也可以先编写代码 - 这意味着您只需编写类,它将创建数据库并自动将它们全部映射起来(nHibernate 可能也这样做,只是我也不知道产品)

于 2012-02-28T20:17:42.053 回答
0

您所描述的不是关系方法,所以我不明白您为什么要使用关系数据库。您将每个对象都集中到一张大桌子上。您完全失去了定义表之间的关系或执行关系操作的能力(例如“查找本月购买苹果的所有客户”)。

于 2012-02-28T20:23:51.233 回答