3

如果这看起来有点像一个新手问题(可能是),我深表歉意,但我只是在向自己介绍关系数据库的想法,我正在为这个概念而苦苦挣扎。

我有一个包含大约 75 个字段的数据库,这些字段代表“用户”的不同特征。其中一个字段代表用户去过的位置,我想知道存储数据的最佳方法是什么,以便可以轻松检索并可以在以后使用(即在谷歌地图上跟踪路线,确定是否有两个用户共享相同的位置等)

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

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

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

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

感谢您花时间帮助我。我很感激!

4

3 回答 3

3

将用户的位置数据存储在单独的表中。location 表将通过一个 common 链接回 user 表user_id

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

您可能想阅读以下内容:

于 2012-10-10T01:51:29.133 回答
0

在关系数据库中,您将使用映射表。因此,您将拥有 user、location 和 userlocation 表(user 是保留字,因此您可能希望使用不同的名称)。这使您可以建立多对多关系,即许多用户可以访问许多位置。如果您想将路线建模为位置的有序集合,那么您将需要做更多的工作。这个网站给出了一个例子

于 2012-10-10T01:55:10.020 回答
0

最常见的方法是有一个单独的表,比如

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

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

但是,如果您说位置的顺序很重要,那么可以使用指定位置在用户中的顺序位置的附加字段。

分离表方法就是我们所说的normalized

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

当然,您确实有选择,但关系数据库在连接表方面非常出色,而且它们并不过分。当您有订购要求时,它们看起来确实有点有趣,就像您提到的那样。但是人们一直在使用它们。

于 2012-10-10T01:55:34.457 回答