存储多种类型字段的最佳方式

Ahm*_*laf 3 architecture database-design types entity-attribute-value

假设我们有一个可以有多种类型的字段,例如:字符串或日期或XML数据类型.

现在我们有两种方法将它存储在数据库中

1-使用字符串类型字段+字段定义类型:丢失"类型感知"排序功能,需要强制转换

2-个单独的表(StringValues,DateValues,Decimal,XML ...等):指向值+字段定义类型的外键:某种程度上复杂,性能

如果仅存储唯一值,则第二种方法可能具有额外的优势:它将作为索引使用.

你有什么想法吗?


注1:最好考虑基于MS SQL Server 2008和Linq2SQL的项目


注2:也许我们将讨论如何在另一个问题中实现EAV,我在关系存储中询问EAV.


注3:类型可以更改,但不经常更改

Bil*_*win 5

听起来你正在设计一个EAV解决方案,你的表存储多个属性的值,每行一个值.

EAV是一种非关系设计.关于关系数据库设计的正确规则,没有"正确"的方法来做到这一点.

正确的设计是将每个属性存储在一个表的单独列中.为每列提供正确的数据类型和描述性名称.仅在每列中存储相同逻辑类型的值.

如果需要动态属性,请使用非关系数据管理解决方案.

  • 如果您仍然认为EAV是您唯一的选择,请阅读这篇关于其他人使用EAV体验的优秀文章:http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/ (2认同)