c# - 在关系数据库中保存任何类型的对象

标签 c# database relational-database object-persistence

这可能有点花哨,但是有没有任何模式或东西可以以最佳方式在关系数据库(不是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

最佳答案

您所描述的本质上是 Entity-Attribute-Value table 。

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

使用不当,就是Inner Platform Effect的经典例子.

关于c# - 在关系数据库中保存任何类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9488888/

相关文章:

c# - 使用 WriteImageToSavedPhotosAlbum 时未保存 Gps exif 数据

codeigniter - 我应该如何处理我的多对多关系?

database-design - 我应该为同一平台内的不同 Web 产品创建单独的用户表吗?

mysql - 连接两个表未按预期工作

c# - EntityFramework 代码优先中的 DateTime 列未按预期工作

c# - 监视自定义 Windows 服务

c# - 为什么 .NET 异常不适用于接口(interface)而不是基类?

PHP 准备的 postgres 查询失败,返回 :"could not determine data type of parameter $1"

database - 为什么刷新物化 View 会同时阻止插入/更新?

MySQL AUTO INCREMENT with Prefix (YYMM) 每月重置