我正在开发一个网站,而且我是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] ]
]
答案 0 :(得分:2)
您可能永远不必查询单个坐标对,但仍需单独存储它们。
由于链接到子阵列的坐标数量可变,因此无法将它们直接保存在列中(或者您将拥有无限量的空列)。
这要求一个单独的Coordinate
表,您可以使用外键链接到SubArray
表。
现在,您还希望将子数组存储在一个要求Array
表的数组中。同样:子数组的数量是可变的,因此您无法将它们存储在列中。
我建议使用label
和path
作为Coordinate
表的主键,但您也可以使用整数形式的代理键。无论你最喜欢什么。
我摆弄了一下,这看起来像什么。 You can see that here
答案 1 :(得分:1)
您可以将其存储为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或文本字符串是合适的。实际位表示仅在某些情况下(例如图像)有用。
您可以存储应用程序中实际使用的表示形式 - 或者实际上是它的序列化版本。但是,您可以从中获得 no SQL功能,例如能够计算坐标数或获取仅具有特定名称的行。