我正在开发一个网站,而且我是mySQL的新手,所以我不确定最好的方式。
我需要存储坐标对数组(3d数组)的数组。每个子数组中有多少个坐标对没有上限,也没有每个数组中有多少个子数组。我将总是一次访问整个数组。
每个子数组也有两个不同的字符串伴随它们。
如果我有一个包含所有坐标对的表,效率会不会很低?特别是因为我在查询时总是要寻找一组完整的坐标,而且我永远不需要查询一对单独的坐标?
为了清楚起见,下面是这样一个数组的示例:
[
["label1", "path1", [10,5], [100,40], [90,70], [50,2], [900,7] ],
["label2", "path2", [30,15], [17,54], [19,12], [33,22], [83,74], [34,4], [93,6] ],
["label3", "path3", [47,93], [9,56], [69,70], [47,5] ]
]发布于 2018-05-26 19:57:06
您可以将其存储为SQL中的两个表。我正在虚构这些名字。
create table paths (
pathid int auto_increment primary key,
label varchar(255),
path varchar(255)
);
create table coordinates (
coordinateid int auto_increment primary key,
pathid int not null
x int,
y int,
constraint fk_coordinates_pathid foreign key (pathid) references paths(pathid)
);然后,您将构造所需的“数组”或组件。
也就是说,如果数组实际上是您仅在应用程序端使用的对象,那么您可能希望将其存储为单个对象。当然,这在某种程度上回避了一个问题,即为什么要使用关系数据库来完成此任务。我强烈建议将数据存储为适当的SQL表。但是这个工具是可用的:
create table arrays (
arrayid int auto_increment primary key,
arraystuff blob
);我使用blob是一种夸张。通常,JSON或文本字符串是合适的。实际的位表示仅在某些情况下(如图像)有用。
您可以存储应用程序中实际使用的表示--或者实际上是它的序列化版本。但是,您从中得不到任何SQL功能,例如能够计算坐标的数量或获取仅具有特定名称的行。
发布于 2018-05-26 19:50:22
您可能永远不需要查询单独的坐标对,但仍然需要单独存储它们。因为链接到子数组的坐标量是可变的,所以不能直接将它们保存在列中(否则会有无限数量的空列)。这需要一个单独的Coordinate表,您可以使用外键将该表链接到一个SubArray表。
现在,您还希望将子数组存储在一个数组中,该数组请求一个Array表。再说一次:子数组的数量是可变的,因此您不能将它们存储在列中。
我建议使用label和path作为Coordinate表的主键,但也可以使用整数形式的代理键。你最喜欢的都行。
我胡乱摆弄了一下,这会是什么样子。You can see that here
https://stackoverflow.com/questions/50541259
复制相似问题