我很抱歉,如果这看起来像是一个新手问题(可能是这样),但我只是向自己介绍关系数据库的想法,我正在努力解决这个问题。
我有一个大约75个字段的数据库,代表'用户'的不同特征。其中一个字段代表了用户所处的位置,我想知道存储数据的最佳方式是什么,以便它可以轻松检索并可以在以后使用(即在Google地图上跟踪路线,确定是否有两个用户共享相同的位置等。)
问题在于,一些用户可能总共有5个位置,而其他用户可能远远超过100个。
最好将这些位置存储在使用每个用户的唯一ID命名的文本文件中(每行一个位置,还是csv中)? 或者为每个连接到其唯一ID的用户创建一个单独的表(这对我来说似乎有些过分)? 或者,有没有办法直接将所有位置存储在原始表中的单个字段中?
我希望我错过了一个概念,或者有一个教程链接可以帮助我理解。
如果有帮助,您可以假设这些位置将按顺序存储,一旦存储就不会更改。此外,这些位置是静态的(我不需要再添加一次,因为它们无法更新)。
感谢您抽空帮助我。我很感激!
答案 0 :(得分:3)
将用户的位置数据存储在单独的表中。位置表将通过公共user_id
链接回用户表。
在一个表中保留特定用户的多个位置不是一个好主意 - 您最终会得到非规范化数据。
您可能需要阅读:
答案 1 :(得分:0)
在关系数据库中,您将使用映射表。因此,您将拥有用户,位置和用户位置表(用户是保留字,因此您可能希望使用其他名称)。这允许您具有多对多关系,即许多用户可以访问许多位置。如果您想将路线建模为有序的地点集合,那么您将需要做更多的工作。该网站提供example
答案 2 :(得分:0)
最常见的方法是使用单独的表,例如
USER_LOCATION
+------------+------------------+
| USER_ID | LOCATION_ID |
+------------+------------------+
| | |
如果用户3有5个位置,则会有5行包含user_id 3。
但是,如果您说位置顺序,则可以使用指定用户位置的序号位置的附加字段。
单独的表方法就是我们所说的规范化。
例如,如果将位置列表存储为以逗号分隔的位置ID字符串,则维护顺序很简单,但是您无法快速回答“用户位于哪个位置的问题” X?”。您的数据将是我们所说的非规范化。
当然,你确实有选项,但是关系数据库在连接表时相当不错,而且它们并不过分。当你有订单要求时,它们确实看起来有点滑稽,就像你提到的那样。但是人们一直都在使用它们。