如何在MySQL

时间:2018-05-26 09:26:30

标签: mysql sql database

我正在开发一个网站,而且我是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] ]
]

2 个答案:

答案 0 :(得分:2)

您可能永远不必查询单个坐标对,但仍需单独存储它们。 由于链接到子阵列的坐标数量可变,因此无法将它们直接保存在列中(或者您将拥有无限量的空列)。 这要求一个单独的Coordinate表,您可以使用外键链接到SubArray表。

现在,您还希望将子数组存储在一个要求Array表的数组中。同样:子数组的数量是可变的,因此您无法将它们存储在列中。

我建议使用labelpath作为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功能,例如能够计算坐标数或获取仅具有特定名称的行。