如何在 MySQL 中创建具有矢量类型的字段?

use*_*903 7 mysql

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

Hav*_*ard 5

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

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

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

正确的方法是在一对多关系中使用两个表。

这意味着,您将拥有一个table_A具有以下结构的表:

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

以及一个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
);
Run Code Online (Sandbox Code Playgroud)

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

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


Her*_*ine 5

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

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

您只需将向量存储为 JSON 形式,如下所示[24, 12, 54, 39, ...]