【问题标题】:I wanted to store List values as a array in MYSQL column. Whats the best practice?我想将列表值存储为 MYSQL 列中的数组。最佳做法是什么?
【发布时间】:2010-03-03 21:14:56
【问题描述】:
我有一个包含常用注册字段的注册表单和两个标题为“服务”的多项选择列表。
我想将表单数据存储到数据库中的表中。
目前我只有一个表“registrations”,我也在考虑是否应该创建另一个名为“registration_services”的关系表并存储 regid 和 serviceid
我预计此表中至少有 10000 条记录
将多选列表值存储在同一张表的一列中会更好吗?
或者我应该创建另一个表并存储为父子关系吗?
最佳做法是什么?
请指教
谢谢
新航
【问题讨论】:
标签:
mysql
optimization
denormalization
【解决方案1】:
如果这些服务用在别处,最好创建registration_services表,使用JOINs获取数据。它应该足够有效。 10000 根本不是一个大数字。
如果它纯粹是提供信息,并且您没有对这些服务的其他引用,您可以将它们作为 CSV 存储在一个列中,但这是一种罕见的情况,我怀疑您在其他任何地方都不需要它们。
【解决方案2】:
不要将值列表存储在单个列中。
您所描述的是注册与另一个实体之间的一对多关系。将您的关系数据库用作关系数据库。
将多个值放在单个列中的大问题是几乎不可能(当然也不是高性能)查询具有这些值中的特定值的记录。
【解决方案3】:
最好将数据放在单独的表中。我怀疑除非您的数据集变得真正,真正庞大,否则它会导致您的速度变慢,此时您可能无论如何都可以使用某种形式的缓存。从长远来看,这将使维护数据变得更加容易,您将能够从索引以及使用 FK 约束来帮助维护数据的完整性中受益。