如何在MySQL中创建一个向量类型的字段?

9

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


两个主要选项:1)创建二进制BLOB或2)将向量打印为文本(例如,每个数字用“;”分隔),并将列保存为文本字符串。请查看此帖子:在mySQL表中存储数组的BLOB vs VARCHAR - FoggyDay
向量听起来基本上像是一个表格。在关系数据库建模中,您可能正在寻找一对多的关系。 - Brandon
2个回答

5

你可以用两种方式进行操作。

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

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

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

也就是说,你需要一个名为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执行搜索并管理向量的值。


4
我建议您看一下JSON数据类型。这样,您可以以比文本或varchar更高效的方式存储向量,并且无需解析整个向量,就可以直接从MySQL访问您的数据。
请查看此链接:https://dev.mysql.com/doc/refman/5.7/en/json.html 您只需要将您的向量以此形式存储在JSON中:[24, 12, 54, 39, ...]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接