如何在数据库中保存未知属性?

时间:2013-01-20 14:47:11

标签: c# sql-server database properties save

我打算编写一本管家书

因此,我在代码中创建属性,例如NameCategory以及其他一些需要在运行时创建的属性。

那么我应该如何在SQL Server数据库中保存人类可读的内容呢?

我的建议是创建一个名为Properties的表,其中包含2列(Id, Name),在该表中我可以存储我的所有属性,但它不再是人类可读的

我也不确定在一个大表中为每个属性创建一个列是否明智

我还可以创建一个XML“文件”并将其存储在我的数据库中,但我不知道这是一个好主意

非常感谢任何建议

1 个答案:

答案 0 :(得分:3)

基本上有三个接近这个 每个值的列

您建议的那个称为实体属性值模型

或者您打折的那个是xml(或序列化对象)

他们都有利弊,有些缺点可能会非常严重。

每个值的列意味着每次要存储更多数据时都必须更改数据库和模型,这使得它非常脆弱且维护成本高。

EAV很容易导致查询成为巨大的连接,并且在其上强加数据完整性是隐藏的。

基于对象也可能导致重大的优化和维护问题,例如,必须打开每个对象以查看是否存在某些内容。

如果您坚持使用关系数据库,那么当您做出决定时,这些中的任何一个都可能是最好的(它们在某个方面都是脆弱的)。

看看其中一个NoSQL替代方案,它们是为这类数据而设计的。