mysql - 在 MySQL 数据库中存储非关系元数据

标签 mysql sql metadata relational

我想知道在 MySQL 数据库中存储非关系元数据的最佳方式是什么?不会查询数据,因此不需要对数据应用索引。

这是我尝试的第一个例子,理论上看起来不错,但事实证明我使用的 ORM 很难解析成有用的结构:

CREATE TABLE test (
  id INT(11) PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(255)
);
CREATE TABLE test_metadata (
  id INT(11) PRIMARY KEY AUTO_INCREMENT,
  test_id INT(11),
  name VARCHAR(255),
  value TEXT,

  FOREIGN KEY (test_id)
  REFERENCES test(id),
  UNIQUE KEY `uk_test_id_name` (test_id, name)
);

完整示例: http://sqlfiddle.com/#!2/9d84f1

然后我正在考虑尝试的另一个解决方案是将元数据作为 JSON 存储在架构的另一列中,如下所示:

CREATE TABLE test2 (
  id INT(11) PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(255),
  metadata TEXT
);

虽然这样做可能有很多缺点,但我认为更新元数据需要在调用 UPDATE 之前执行额外的 SELECT >

以下哪种解决方案最适合将元数据存储在关系数据库中?或者有没有更好的方法我没有看到?

最佳答案

我写了一篇关于在 MySQL 中存储半结构化数据的不同选项的演示文稿。

Extensible Data Modeling with MySQL

我介绍了几种选择并比较了它们的优缺点:

  • 额外的列
  • 实体属性值
  • 类表继承
  • 序列化 LOB 和倒排索引
  • 在线架构更改
  • 非关系数据库

最佳解决方案通常取决于您将如何使用数据。没有一个解决方案是完美的,因为底线是您在 RDBMS 中存储非关系数据。所以你必须在某个地方做出一些妥协。诀窍是在对您的应用程序使用数据不重要的功能上做出妥协。

您提到您不熟悉 EAV。这里有一些资源:

关于mysql - 在 MySQL 数据库中存储非关系元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26411511/

相关文章:

MYSQL导入: Cannot get geometry object from data you send to the GEOMETRY field

mysql - 每个人获得最大的结果

mysql - SQL文件夹实体去重流程

metadata - 如何在 Objective C 中保留 XMP 元数据?

Java EE 简单登录

mysql - MySQL 可以拆分列吗?

mysql - 按 order BY 指定顺序

sql - 如何在 Derby 中将时差转换为小时(小数点后两位)?

javascript - Node JS : storing music metadata on JSON

mysql - 按与纬度和经度的接近程度对 WordPress 帖子进行排序