【问题标题】:How do I create a field with a vector type in MySQL?如何在 MySQL 中创建具有向量类型的字段?
【发布时间】:2014-08-12 08:12:50
【问题描述】:

我在 MySQL 中创建了一个表。我想存储名称、姓氏和双精度向量,但问题是:如何在 MySQL 中创建向量列?我的向量包含 130 个元素。

【问题讨论】:

  • 两个主要选项:1) 创建二进制 BLOB 或 2) 将向量打印为文本(例如,每个数字由“;”分隔)并将列保存为文本字符串。看这个帖子:BLOB vs VARCHAR for storing arrays in a mySQL table.
  • 矢量听起来基本上像一张桌子。在关系数据库建模中,您可能正在寻找一对多的关系。

标签: mysql


【解决方案1】:

基本上有两种方法可以做到这一点。

一个简单的方法是创建一个 LONGBLOB 或 LONGTEXT 字段,您将在其中存储矢量的 serialized 版本。

但从数据库建模的角度来看,这是一个非常丑陋的解决方案,因为 DBMS 无法执行搜索或索引这些向量的内容。

正确的方法是在1-to-many relationship 中使用两个表。

这意味着,您将拥有一个表table_A,其结构如下:

CREATE TABLE table_A ( -- records
    id        INT UNSIGNED NOT NULL AUTO_INCREMENT,
    name      TEXT,
    surname   TEXT,
    PRIMARY KEY (id)
);

还有一个表table_B,其中包含向量中的值以及与table_A中它们各自记录的关联:

CREATE TABLE table_B ( -- vector values
    parent    INT UNSIGNED NOT NULL,
    id        INT UNSIGNED NOT NULL, -- for indexing, in case the order of the vector elements matter
    value     TEXT,
    PRIMARY KEY (parent, id),
    FOREIGN KEY (parent) REFERENCES table_A (id) ON DELETE CASCADE ON UPDATE CASCADE
);

工作示例:http://sqlfiddle.com/#!2/79521/2

使用这种格式,您可以允许 DBMS 执行搜索并管理向量的值。

【讨论】:

    【解决方案2】:

    我建议你看看 JSON 数据类型。这样,您可以以比 text 或 varchar 更有效的方式存储向量,并且可以直接从 MySQL 访问数据,而无需解析整个内容。

    看看这个链接:https://dev.mysql.com/doc/refman/5.7/en/json.html

    您只需将矢量存储为 JSON 格式,例如 [24, 12, 54, 39, ...]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 2021-08-25
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      相关资源
      最近更新 更多