2014-06-21 62 views
1

我在MySQL中創建了一個表。我想存儲名稱,姓氏和雙向矢量,但問題是:如何在MySQL中創建矢量列?我的矢量包含130個元素。如何在MySQL中創建一個具有矢量類型的字段?

+0

兩個主要選項:1)創建一個二進制BLOB或2)打印矢量到文本(例如每個數字用「;」分隔)並將該列保存爲文本字符串。看看這篇文章:[用於將數組存儲在mySQL表中的BLOB vs VARCHAR](http://stackoverflow.com/questions/3106548/blob-vs-varchar-for-storing-arrays-in-a-mysql-table) 。 – FoggyDay

+0

一個向量聽起來基本上像一張桌子。在關係數據庫建模中,您可能正在尋找一對多的關係。 – Brandon

回答

2

基本上有兩種方法可以做到這一點。

一個簡單的方法是創建一個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_Atable_B表:

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

使用這種格式,您可以f允許DBMS執行搜索並管理向量的值。

0

我建議你看看JSON數據類型。通過這種方式,您可以以比text或varchar更高效的方式存儲矢量,並且您可以直接從MySQL訪問數據,而無需分析整個事物。

看看這個鏈接:https://dev.mysql.com/doc/refman/5.7/en/json.html

你只需要你的載體存儲在一個JSON形式這樣[24, 12, 54, 39, ...]

相關問題