【问题标题】:What is the best way to store multiple selections from drop down list to database?将多个选择从下拉列表存储到数据库的最佳方法是什么?
【发布时间】:2016-06-04 21:54:53
【问题描述】:

我有一个多选下拉列表。一世:

我只是想知道将它存储到 MySQL 数据库中的最佳方法是: 1) serialise() PHP 的方法或 2) 用不同符号如逗号 (,) 竖线 (|) 等的特定格式。

例如,我有 cities 表。它包含 city_idcity_name。 一个人可以前往多个城市。所以他会选择多个城市。我想以某种方式存储这个选择,以便我可以在需要时通过 mysql 连接使用它们。

我使用 Laravel 5。

【问题讨论】:

  • 或 3) 使用表来存储每个带有外键的条目
  • 比特组合怎么样?
  • 这可能会导致非常困难的查询和数据库优化。对 sql 数据库坚持 3NF。

标签: php mysql laravel serialization multi-select


【解决方案1】:

您将拥有 3 张桌子:

  • 城市(ID、名称)
  • 用户(ID、姓名)
  • City_user (id, id_city, id_user)

例如,您的用户 (1, Sakuto) 已前往 (1, Belgium) 和 (2, France),您的表 city_user 将包含:

  • (1, 1, 1)(用户 1 已前往城市 1)
  • (2, 2, 1)(用户 1 已前往城市 2)

【讨论】:

  • id 在 city_user 中似乎是多余的
  • 老实说,我从来没有在课堂上真正学会如何正确使用主键,所以我总是加一个。但你可能是对的,它们可能都是主键
  • 哈哈,和我的回答一样:-)。如果您没有单列主键(即使您将索引放在其他列上),我在数据库引擎的实际体验中表现不佳。
【解决方案2】:

以标准化方式存储数据的正确方法是为选定的城市提供一个单独的表。

我不知道您的选择与什么实体相关联,但请说是用户。

用户表

id   int
name string

等等

userCities 表:

id       int
userId   int
cityId   int

城市

id       int
name     string

因此,如果用户选择三个城市,他或她将在 users 表中保留一行,在 userCities 中保留三行。与将选择作为串联值存储在 users 表中的一列中相比,这样做将使您能够创建更好、更快的查询。要检索用户及其城市,您需要与 userCities 和 city 进行外部联接(这样也会返回没有城市的用户)。

【讨论】:

  • Id 在 userCities 中似乎是多余的
  • 从规范化的角度来看 - 是的。我认为在每个表上放置一个单列主键只是我的手指(来自不良版本的 MS SQL Server 的旧习惯 ;-))
  • 谢谢@AndersBornholm,我想我会用这种方式。
猜你喜欢
  • 2016-10-20
  • 2011-08-09
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
相关资源
最近更新 更多