为这个冗长的话题道歉,我不打算让它这么长,但这是我一直遇到的一个非常简单的问题。:)
假设您有一个名为的简单表tags
,其中包含列tag_id
和tag
. tag_id 只是一个自增列,而 tag 是标签的标题。如果我需要添加一个描述字段,平均大约 1-2 段(最多大约 3-4 段),我应该简单地向表中添加一个描述字段还是应该创建一个名为 tag_descriptions 的新表并存储带有 tag_id 的描述?
我记得读过最好这样做,因为如果您执行不选择描述的查询,该描述字段仍然会减慢 mysql。这是真的?我什至不记得我从哪里读到的,但我已经追了几年了……最后我怀疑我是否需要这样做,我有一种感觉,我不需要。每当您需要描述字段时,您还需要进行内部连接。
我的另一个问题是,创建最多只能容纳很少行的新表通常是不好的吗?如果这些数据不适合其他任何地方怎么办?
我在下面有一个与这两个问题有关的简单案例。
我有三个表内容、标签和 content_tags,它们构成了多对多关系:
内容
- content_id
- 区域(具有大约 6-7 个不同值的枚举列,以后很可能不会增长)
标签
- tag_id
- 标签
内容标签
- content_id
- tag_id
我想为每个标签存储大约 1-2 段的描述,但也为每个区域存储。我想知道最好的方法是什么?
选项 A:
- 只需在标签表中添加描述列
- 为 region_descriptions 创建一个新表
选项 B:
- 创建一个名为 descriptions 的新表,其中包含以下字段:id、description 和 type
- id 将是内容的 id 或枚举字段的 id
- 类型是标签描述还是区域描述(将使用枚举列)
也许在 id 和 type 上有一个主键?
选项 C:
- 为 tag_descriptions 创建一个新表
- 为 region_descriptions 创建一个新表
如果添加描述列不会减慢不需要描述的 mysql 选择查询,选项 A 似乎是一个不错的选择。
假设描述列会减慢 mysql,选项 B 可能是一个不错的选择。它还消除了对仅包含 6-7 行来保存区域描述的小表的需要。虽然现在我想起来了,如果最初要获得区域描述,那么连接到这个表会很慢,你只需要经过很少的行。
如果描述列会减慢 mysql 的速度并且如果像区域描述这样的小表无关紧要,选项 C 将是理想的。
也许这些选项都不是最好的,请随时提供其他选项。谢谢。
PS 什么是理想的列类型,用于保存通常 1-2 段的数据,但有时可能会更多?