【发布时间】:2014-05-02 18:46:55
【问题描述】:
我正在尝试将数据数组(或向量)存储在 SQLite 数据库中,但在尝试找到合适的方法时遇到了问题。我在 StackOverflow 上发现了其他一些帖子,但我似乎再也找不到了,其中提到将数据存储在如下表中:
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 并按位置排序的所有内容:
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)
);
这将很好地创建表,但是一旦您尝试对其执行查询,外键约束就会引发错误,因为它必须同时引用 array_of_points 表的 id 和 position,因为它们是一部分复合主键。
我目前唯一的解决方案是从foo 表中删除外键,但这不是一个好的解决方案,因为这意味着它现在可以保存任何值,即使它实际上没有映射到数组在array_of_points 表中。
有没有办法解决这个问题?或者也许有一些其他的方式来存储数据,这样就可以了?
仅供参考,请不要建议我将数据存储在某种逗号/分号/任何分隔列表中,因为这是一个更糟糕的选择,我不会考虑。也无法处理将要存储在数据库中的一些更复杂的对象。
【问题讨论】:
标签: arrays sqlite reference foreign-keys primary-key