将内容(大型列表)添加到关系数据库的最佳方法

时间:2012-10-10 01:48:16

标签: sql database relational

我很抱歉,如果这看起来像是一个新手问题(可能是这样),但我只是向自己介绍关系数据库的想法,我正在努力解决这个问题。

我有一个大约75个字段的数据库,代表'用户'的不同特征。其中一个字段代表了用户所处的位置,我想知道存储数据的最佳方式是什么,以便它可以轻松检索并可以在以后使用(即在Google地图上跟踪路线,确定是否有两个用户共享相同的位置等。)

问题在于,一些用户可能总共有5个位置,而其他用户可能远远超过100个。

最好将这些位置存储在使用每个用户的唯一ID命名的文本文件中(每行一个位置,还是csv中)? 或者为每个连接到其唯一ID的用户创建一个单独的表(这对我来说似乎有些过分)? 或者,有没有办法直接将所有位置存储在原始表中的单个字段中?

我希望我错过了一个概念,或者有一个教程链接可以帮助我理解。

如果有帮助,您可以假设这些位置将按顺序存储,一旦存储就不会更改。此外,这些位置是静态的(我不需要再添加一次,因为它们无法更新)。

感谢您抽空帮助我。我很感激!

3 个答案:

答案 0 :(得分:3)

将用户的位置数据存储在单独的表中。位置表将通过公共user_id链接回用户表。

在一个表中保留特定用户的多个位置不是一个好主意 - 您最终会得到非规范化数据。

您可能需要阅读:

答案 1 :(得分:0)

在关系数据库中,您将使用映射表。因此,您将拥有用户,位置和用户位置表(用户是保留字,因此您可能希望使用其他名称)。这允许您具有多对多关系,即许多用户可以访问许多位置。如果您想将路线建模为有序的地点集合,那么您将需要做更多的工作。该网站提供example

答案 2 :(得分:0)

最常见的方法是使用单独的表,例如

USER_LOCATION
+------------+------------------+
|  USER_ID   |   LOCATION_ID    |
+------------+------------------+
|            |                  |

如果用户3有5个位置,则会有5行包含user_id 3。

但是,如果您说位置顺序,则可以使用指定用户位置的序号位置的附加字段。

单独的表方法就是我们所说的规范化

例如,如果将位置列表存储为以逗号分隔的位置ID字符串,则维护顺序很简单,但是您无法快速回答“用户位于哪个位置的问题” X?”。您的数据将是我们所说的非规范化

当然,你确实有选项,但是关系数据库在连接表时相当不错,而且它们并不过分。当你有订单要求时,它们确实看起来有点滑稽,就像你提到的那样。但是人们一直都在使用它们。