EAV 数据库设计:历史数据管理方法
实体-属性-值 (EAV) 数据库模型虽然经常因潜在的数据完整性和报告挑战而受到批评,但它在跟踪历史数据以及桥接 SQL 和键值存储环境方面具有优势。 本文探讨了一种改进的 EAV 方法来缓解这些问题。
按数据类型组织实体属性
传统 EAV 的一个关键改进是根据数据类型分离实体属性。 这有利于关系的管理(例如,“belongsTo”、“has”、“hasMany”、“hasManyThrough”),并允许对属性和实体进行正确的索引。
建议的关系模式
提出以下关系数据库模式:
entity_type { id, type, -- e.g., "product," "user" created_at } entity { id, entity_type_id, created_at } attr { id, entity_id, type, name, created_at } option { id, attr_id, entity_id, multiple, -- Allow multiple values name, created_at } attr_option { id, attr_id, entity_id, option_id, option, created_at } -- Additional tables for various attribute types (e.g., attr_int, attr_datetime)
追踪历史数据
此架构通过添加新属性值并利用时间戳来识别最新更改来实现历史数据跟踪。 这避免了数据更新的需要,同时保留了完整的修改历史记录。
示例查询
说明性查询演示数据检索:
-
实体类型检索:
SELECT * FROM entity_type et LEFT JOIN entity e ON e.entity_type_id = et.id WHERE e.id = ?
-
实体属性检索:
SELECT * FROM attr WHERE entity_id = ?
-
属性值检索(单个和多个值):
SELECT * FROM attr_option WHERE entity_id = ? AND multiple = 0 ORDER BY created_at DESC LIMIT 1 -- Single Value SELECT * FROM attr_int WHERE entity_id = ? ORDER BY created_at DESC LIMIT 1 -- Integer Value -- ... other attribute type queries
-
关系检索:
SELECT * FROM entity AS e LEFT JOIN attr_relation AS ar ON ar.entity_id = e.id WHERE ar.entity_id = 34 AND e.entity_type = 2;
挑战和考虑
尽管有好处,但这种方法也带来了一些挑战:
- 查询复杂性:可能需要多个查询,类似于键值存储交互。
- 性能调优:优化策略可能很复杂。
- 关系管理:即使在关系上下文中,也需要以编程方式显式定义和处理关系。
以上是EAV 数据库设计是高效历史数据管理的正确解决方案吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

本文讨论了在PostgreSQL,MySQL和MongoDB等各个数据库中的JSON列上创建索引,以增强查询性能。它解释了索引特定的JSON路径的语法和好处,并列出了支持的数据库系统。

文章讨论了使用准备好的语句,输入验证和强密码策略确保针对SQL注入和蛮力攻击的MySQL。(159个字符)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

SublimeText3 Linux新版
SublimeText3 Linux最新版

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Atom编辑器mac版下载
最流行的的开源编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),