首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中存储列表

问如何在MySQL中存储列表
EN

Stack Overflow用户
提问于 2018-05-26 17:26:30
回答 2查看 9.3K关注 0票数 7

我正在开发一个网站,而且我是mySQL的新手,所以我不确定最好的方式。

我需要存储坐标对数组(3d数组)的数组。每个子数组中有多少个坐标对没有上限,也没有每个数组中有多少个子数组。我将总是一次访问整个数组。

每个子数组也有两个不同的字符串伴随它们。

如果我有一个包含所有坐标对的表,效率会不会很低?特别是因为我在查询时总是要寻找一组完整的坐标,而且我永远不需要查询一对单独的坐标?

为了清楚起见,下面是这样一个数组的示例:

代码语言:javascript
复制
[
  ["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] ]
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-26 19:57:06

您可以将其存储为SQL中的两个表。我正在虚构这些名字。

代码语言:javascript
复制
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表。但是这个工具是可用的:

代码语言:javascript
复制
create table arrays (
    arrayid int auto_increment primary key,
    arraystuff blob
);

我使用blob是一种夸张。通常,JSON或文本字符串是合适的。实际的位表示仅在某些情况下(如图像)有用。

您可以存储应用程序中实际使用的表示--或者实际上是它的序列化版本。但是,您从中得不到任何SQL功能,例如能够计算坐标的数量或获取仅具有特定名称的行。

票数 2
EN

Stack Overflow用户

发布于 2018-05-26 19:50:22

您可能永远不需要查询单独的坐标对,但仍然需要单独存储它们。因为链接到子数组的坐标量是可变的,所以不能直接将它们保存在列中(否则会有无限数量的空列)。这需要一个单独的Coordinate表,您可以使用外键将该表链接到一个SubArray表。

现在,您还希望将子数组存储在一个数组中,该数组请求一个Array表。再说一次:子数组的数量是可变的,因此您不能将它们存储在列中。

我建议使用label和path作为Coordinate表的主键,但也可以使用整数形式的代理键。你最喜欢的都行。

我胡乱摆弄了一下,这会是什么样子。You can see that here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50541259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档