我打算编写一本管家书
因此,我在代码中创建属性,例如Name
,Category
以及其他一些需要在运行时创建的属性。
那么我应该如何在SQL Server数据库中保存人类可读的内容呢?
我的建议是创建一个名为Properties
的表,其中包含2列(Id, Name
),在该表中我可以存储我的所有属性,但它不再是人类可读的
我也不确定在一个大表中为每个属性创建一个列是否明智
我还可以创建一个XML“文件”并将其存储在我的数据库中,但我不知道这是一个好主意
非常感谢任何建议
答案 0 :(得分:3)
基本上有三个接近这个 每个值的列
您建议的那个称为实体属性值模型
或者您打折的那个是xml(或序列化对象)
他们都有利弊,有些缺点可能会非常严重。
每个值的列意味着每次要存储更多数据时都必须更改数据库和模型,这使得它非常脆弱且维护成本高。
EAV很容易导致查询成为巨大的连接,并且在其上强加数据完整性是隐藏的。
基于对象也可能导致重大的优化和维护问题,例如,必须打开每个对象以查看是否存在某些内容。
如果您坚持使用关系数据库,那么当您做出决定时,这些中的任何一个都可能是最好的(它们在某个方面都是脆弱的)。
看看其中一个NoSQL替代方案,它们是为这类数据而设计的。