我正在创建一个表(使用MySQL)来存储一些数据,但由于数据量的原因,我不确定如何正确地执行此操作。例如,如果它是地址簿数据库。 所以有一个用户表和一个联系人表。每个用户可以拥有数百个联系人,并且可能有用户。我应该为每个联系人添加一个新行(它会产生很多行!),或者我可以用一个用户ID连接它们中的所有行。
uuh,这只是一个示例,但在我的情况下,一旦联系人INSERTED
,他们将永远不会UPDATED
,因此,不进行任何修改,它们只能是DELETED
。
答案 0 :(得分:0)
比如说:如果您为单个用户添加3个联系人,并且正如您所提到的那样,您将删除联系人,最好插入所有三个联系人,每个联系人都在其用户ID的新行中。因为如果你想从其中3个中删除任何一个联系人,那么这将很容易。
答案 1 :(得分:0)
如果您连接用户的所有联系人并将其添加到一行可能会导致很多问题。未来需求会发生变化,您需要为编辑/删除单个联系人的用户创建所有联系人的布局。所以你应该在每一行都有一个联系人。
您可以通过索引列来优化查询。
假设用户ID#1234在联系人表中有1000个联系人,其中联系人表中的主键是idcontact(默认为索引),然后在联系表中另一个名为“iduser”的字段也被索引,然后在iduser上选择性能在联系表上会很快。
理想情况下它是使用mysql数据库的最佳方法。有许多应用程序的例子,它可以维护数百万个数据,因此使用联系人表格可以很好,并且每个联系人都可以使用新行。
答案 2 :(得分:0)
我不担心很多行。您必须牢记用户期望的控制粒度(删除/添加联系人,根据不同因素重新排列列表等)。如果要将它们独立于类似项目(联系人,用户,地址等)进行处理,最好将其分解为自己的行。此外,如果您要连接数据,重新排序显示或删除数据将变得非常耗费资源。 MySQL的设计目的就是“廉价”。
MySQL可以轻松处理数百万行数据。如果你担心速度,只需确保你的索引在数据收集过大之前就位(我猜想,并说你需要索引联系人所属的用户ID以及第一个/最后一个名)。然而,索引是一把双刃剑,因为它们占用磁盘空间,但允许快速查询大型数据集。因此,您不希望过度索引并索引所有内容,只需要对您进行排序/搜索的内容进行索引。
(为什么地球上的联系人永远不会更新?...)
答案 3 :(得分:0)
按照常规表格,你应该有三张表
1) Users -> {User_id} (primary key)
2) Contacts -> {Contact_id} (primary key)
3) Users_Contacts -> {User_id, Contact_id} (Compound key)
Junction
表Users_Contacts
每个联系人都有一条记录 - 对于User_id + Contact_id的每个唯一值,都会有一条记录。
然而,在实践中,并不总是需要坚持规则手册。根据用例,通常建议使用非规范化表。电话是你的。
还有使用NoSQL和MySQL的另一种选择。例如,联系人可以序列化为JSON并存储。 Mysql 5.7似乎支持这种数据格式(有一些外部帮助)。 See this for details.