我现在有任何类型的内容,我现在可以为内容指定多个types
。
问题是,我应该使用多行来添加多个类型,还是使用type
字段,并在其中放置以逗号分隔的类型,并在PHP
<中解析它们/ p>
多行
`content_id` | `type`
1 | 1
1 | 2
1 | 3
单行
`content_id` | `type`
1 | 1,2,3
修改
我正在寻找更快的答案,而不是更容易,请考虑一下。性能对我来说非常重要。所以我说的是一个包含millions
或ten millions
行的真正庞大的数据库。
答案 0 :(得分:5)
我通常总是推荐“多行”方法,因为它有几个优点:
WHERE type=3
而不会有任何困难,因为您不必使用效率较低的WHERE type LIKE '%3%'
content_id
和type
对存储其他数据,您会在多行版本中发现它更容易content_id
和type
对比将它们存储为逗号分隔列表更容易通常,让SQL做它最擅长的事情,这允许您存储数据,并获取数据的子集。
答案 1 :(得分:4)
我总是使用多行。如果您使用单行,您的数据很难读取,一旦从数据库中获取数据,就必须将其拆分。
答案 2 :(得分:2)
使用多行。这样,您可以稍后将type
列编入索引,并在将来需要时更快地搜索它。此外,它还消除了对前端语言的依赖性,以便对查询结果进行解析。
答案 3 :(得分:2)
归一化与非规范化设计。 通常我会建议坚持“多行”风格(标准化) 虽然有时(出于性能/存储原因)人们故意实施“单排”风格。
看看这里:
答案 4 :(得分:1)
在少数情况下,单行可能更好。报告往往更容易,一些非规范化是主要的例子。因此,如果您的代码更清晰/单行表现更好,那么就去做吧。其他方面,多行将是最佳选择。
答案 5 :(得分:1)
永远不会将多个逻辑字段用逗号分隔符填充到单个字段中。
正确的方法是创建多行。
如果某些性能原因要求您使用单行,则至少在行中创建多个字段。但话说回来,几乎从来没有一个很好的表现理由。首先要做好设计。
您是否曾想知道所有记录,比如type = 2?对于多行,这很容易:“从mytable中选择content_id,其中type = 2”。使用填充字段,您必须说“从mytable中选择content_id,类型为'%2%'”。哦,除了超过11种类型会发生什么?上面的查询会找到“12”。好吧,你可以说“类似'%,2,%'的类型”。如果2是列表中的第一个或最后一个,则不起作用。即使您想出了一种可靠的方法,使用初始%的LIKE搜索意味着对表中的每条记录进行顺序读取,这非常慢。
你有多大的筹码领域?如果类型字符串太大而无法达到最大值,该怎么办?
您是否携带有关类型的任何数据?如果您使用“type”键创建第二个表,例如,该类型的描述,您将如何加入该表。使用多行,您只需使用(type_id)“从内容连接类型”中编写“select content_id,type_id,description”。挤满了田地......不那么容易。
如果添加新类型,如何使其保持一致?假设它曾经说过“3,7,9”,现在你加上“5”。你能说“3,7,9,5”吗?或者他们必须整理好吗?如果它们不合适,则无法检查是否相等,因为“1,2”和“2,1”看起来并不相同,但它们实际上是等价的。在任何一种情况下,更新类型字段现在变为程序而不是单个SQL语句。
如果有一些微不足道的表现,那就不值得。