数据库设计,大量参数,非规范化?

标签 database database-design denormalization

给定表 tblProject。这具有无数的特性。比如宽度,高度等等,有几十种。

我正在添加一个新模块,让您可以为移动设备的项目指定设置。这是一对一的关系,所以所有的移动设置都应该存储在 tblProject 中。然而,列表越来越大,属性之间会有一些歧义(IE,我必须在所有移动字段前加上 MOBILE,这样 Mobile_width 就不会与宽度混淆)。

将移动设置反规范化并存储在另一个表中有多糟糕?或者更好的存储设置的方法?属性变得笨重且难以在表中修改/查找。

最佳答案

我想回应@Alexander Sobolev 的建议并提供我自己的建议。

@Alexander Sobolev 建议 EAV model .这会以最大的灵 active 为代价,但性能差且复杂,因为您需要多次加入才能获取实体的所有值。通常解决这些问题的方法是将所有实体元数据保存在内存中(即 tblProperties),这样您就不会在运行时加入它。并且,将根表中的值(即 tblProjectProperties)非规范化为 CLOB(即 XML)。因此,您仅使用值表进行查询和排序,而不是实际检索数据。此外,您通常最终也会按 ID 缓存实际实体,这样您就不必每次都进行反序列化。您遇到的问题是实体及其元数据的缓存失效。总的来说,这是一个非常重要的方法。

我会做的是创建一个单独的表,根据您的数据可能不止一个,带有鉴别器/类型列:

create table properties (
    root_id int, 
    type_id int,
    height int
    width int
    ...etc...
)

使 root_idtype_id 的组合成为唯一,例如,其中 type_id 代表移动设备 - 假设有一个单独的查找表我的例子。

关于数据库设计,大量参数,非规范化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992263/

相关文章:

mysql - 使用 mysql 的社交网站的数据库设计(只是指导)

SQL 主键,INT 或 GUID 或..?

MySQL 数据库更改数据表路径或位置?

mongodb - MongoDB 的待办事项列表模式设计有什么建议?

php - 我应该制作另一个表格还是只使用数组? (归一化或不归一化)

database - 电话间隙 : INVALID_STATE_ERR: DOM Exception 11

php - mysql查询,select从一个确定的点上

java - 通过 Java 插入图像时 Postgres 编码 "UTF8"错误

node.js - 使用 Mongoose : How to synchronize changes 进行非规范化

database - 非规范化对查询、连接和响应时间有什么影响?