sql-server - 数据库设计模式 - 多对多分类/分类标记

标签 sql-server database design-patterns database-design entity-attribute-value

我有一个存储职位空缺的现有数据库设计。

“空缺”表在所有客户中都有一些固定的字段,例如“职位”、“描述”、“薪资范围”。

客户可以自行设置“自定义”字段的 EAV 设计,例如“经理姓名”、“工作时间”。字段名称存储在“ClientText”表中,数据存储在具有 VacancyId、ClientTextId 和 Value 的“VacancyClientText”表中。

最后,还有多对多 EAV 设计,用于自定义标记/对职位空缺进行分类,例如职位空缺所在的位置/办公室、所需技能列表。这存储为列出标签类型的“ClientCategory”表,“位置,技能”,“ClientCategoryItem”表列出每个类别的有效值,例如,“伦敦,巴黎,纽约,罗马”,“C#, VB、PHP、Python”。最后,有一个“VacancyClientCategoryItem”表,其中包含空缺的每个选定项目的 VacancyId 和 ClientCategoryItemId。

客户可以添加的自定义字段或自定义类别的数量没有限制。


我现在正在设计一个与现有系统非常相似的新系统,但是,我能够限制客户可以拥有的自定义字段的数量,而且它是从头开始构建的,所以我没有遗留问题需要处理与。

对于自定义字段,我的解决方案很简单,我在空缺表上有 5 个额外的列,称为 CustomField1-5。这将删除其中一个 EAV 设计。

我正在苦苦挣扎的是标记/分类设计。如果我将客户限制为具有 5 个类别/类型的标签。我应该创建 5 个表列出可能的值“CustomCategoryItems1-5”,然后再创建 5 个多对多表“VacancyCustomCategoryItem1-5”

这将导致 10 个表执行与现有系统中的三个表相同的存储。

此外,如果我需要 6 个自定义类别而不是 5 个,那么(天禁止)需求发生变化,那么这将导致大量代码更改。


因此,任何人都可以建议任何更适合存储此类数据的数据库设计模式。我很高兴坚持使用 EAV 方法,但是,现有系统遇到了与此类设计相关的所有常见性能问题和复杂查询。

非常感谢任何意见/建议。

使用的 DBMS 系统是 SQL Server 2005,但是,如果任何特定模式需要,也可以选择 2008。

最佳答案

您是否考虑过使用 XML 列?您可以通过 XSL 以声明方式强制执行所有约束。

代替 EAV,使用单个列,其中包含由模式(或模式集合)验证的 XML 数据。

关于sql-server - 数据库设计模式 - 多对多分类/分类标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3013831/

相关文章:

sql - 在 Sql Server 中更新该字段后更改年份

php - array_push 后数组为空

php - 如何访问新 View 文件中的模型数据?

c# - 生命周期长于页面生命周期的 MVVM 和异步任务

user-interface - 过滤时添加/编辑 UI 表数据的最佳实践

php - 通过 PHP、SQL STATE IM004、驱动程序在 SQL_HANDLE_ENV 上的 SQLAllocHandle 与 SQL Server 的连接错误

sql - 使用 VB.Net 访问数据库存储过程后返回 True/False

sql-server - 在 SSIS 中使用合并任务的指南

sql - 在 self 加入问题上需要一些认真的帮助

c++ - 不同的行为取决于数据