它可能有点花哨,但是有没有任何模式或东西以最佳方式在关系数据库(而不是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
答案 0 :(得分:3)
您所描述的内容基本上是Entity-Attribute-Value表。
适用于潜在属性数量较多但潜在值较小的情况。这种用例的一个例子是医疗数据(症状),其中患者可能具有的潜在症状的数量很大,但实际症状的数量很少。
使用不当,这是Inner Platform Effect的典型示例。
答案 1 :(得分:2)
您可以将对象序列化为XML,并将其存储在数据库中。 SQL Server有一个专门的XML类型,甚至允许您查询内容。
这不是最佳解决方案,但它可以满足您的需求。
答案 2 :(得分:0)
不确定为什么你会这样做不是最佳的。如果要查找某个人,您需要对字符串值进行表扫描/索引查找,然后按主键过滤。
ORM会好得多 - nHibernate或实体框架(EF)他们会将每个类映射到表和autogenerat eth主键等,你可以将对象表示为子对象等。
EF也可以先做代码 - 这意味着你只需要编写类,它就会创建数据库并自动映射它们(nHibernate也可以这样做,我也不知道产品)
答案 3 :(得分:0)
您所描述的不是关系方法,因此我不明白您为什么要使用关系数据库。你将每个对象都集中在一个大表中。你完全失去了定义表间关系或执行关系操作的能力(比如“查找本月购买苹果的所有客户”)。