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

rekjcdws  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(60)

我想知道在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/9d 84 f1
然后我想尝试的另一种解决方案是将元数据作为JSON存储在模式的另一列中,如下所示:

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


不过,这样做可能有很多缺点,我可以不假思索地认为,在调用UPDATE之前,更新元数据将需要额外的SELECT
在这些解决方案中,哪一个是在关系数据库中存储元数据的最佳方案?或者有没有我没有看到的更好的方法?

px9o7tmv

px9o7tmv1#

我写了一篇关于在MySQL中存储半结构化数据的不同选项的演讲。
Extensible Data Modeling with MySQL
我介绍了几种替代方案,并比较了它们的优缺点:

  • 额外的列
  • 权限-属性-值
  • 类表继承
  • 序列化LOB和倒排索引
  • 联机架构更改
  • 非关系数据库

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

相关问题