我試圖在SQLite數據庫中存儲數據的數組(或向量),但我遇到了問題,試圖找到一個體面的方式來做到這一點。我發現在計算器上一些其他職位,我似乎無法找到了,裏面提到在表中存儲數據如下所示:將數組存儲在另一個表中引用的SQLite中
CREATE TABLE array_of_points
(
id integer NOT NULL,
position integer NOT NULL,
x integer NOT NULL,
y integer NOT NULL,
PRIMARY KEY (id, position)
);
所以把所有的數據存儲,你會插入一個數組每個項目在同一個ID下,只是增加了位置。因此,例如與三個值插入陣列它會是這樣的:
INSERT INTO array_of_points VALUES (0, 0, 1, 1);
INSERT INTO array_of_points VALUES (0, 1, 2, 2);
INSERT INTO array_of_points VALUES (0, 2, 3, 3);
然後檢索值,你會選擇具有相同ID和order by位置的一切:
SELECT x,y FROM array_of_points WHERE id = 0 ORDER BY position;
這是非常好的,奇妙的工作,但我現在遇到了一個問題,我不知道如何引用不同的表中的數組。例如,我想要做的東西像下面這樣:
CREATE TABLE foo
(
id integer NOT NULL,
array_id integer NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (array_id) REFERENCES array_of_points (id)
);
這將創建表得很好,但一旦你嘗試在其上執行查詢的外鍵約束拋出一個錯誤,因爲它必須同時引用了id
和因爲它們是組合主鍵的一部分,所以array_of_points
表的position
。
我現在唯一的解決方案是從foo
表中刪除外鍵,但這不是一個好的解決方案,因爲它意味着它現在可以保存任何值,即使它沒有實際映射到數組中array_of_points
表。
有沒有辦法解決這個問題?或者,也許有其他方式來存儲數據,以便這是可能的?
就像一個供參考,請不要建議我存儲在某種逗號/分號/任何分隔列表的數據,因爲這是一個更糟糕的選擇,我不會考慮。對於將要存儲在數據庫中的一些更復雜的對象也是不可能的。
零大小的數組不是問題,但感謝提醒我。在允許存儲空數據的情況下,我剛剛刪除了「NOT NULL」並將該字段設置爲「NULL」,這會讓我知道在讀取它爲空時的情況。 至於解決方案,這似乎就是我所需要的。這對於爲每個數組表格維護兩張表是有點煩人的,但除非有其他解決方案,否則我沒有太多選擇餘地。 – Shenjoku
我想我想出了一個方法來實現這個工作:我將有一個'array'表,存儲所有存儲數組數據的表中的每個數組的ID。這樣我只需要添加一個額外的表,並稍微更改外部和主鍵,並對代碼進行細微更改。非常感謝,這真的救了我很多頭痛:) – Shenjoku