【问题标题】:Is it bad to have a column empty as NULL often in a table?在表中经常将一列空为 NULL 是不是很糟糕?
【发布时间】:2012-02-21 17:34:45
【问题描述】:

在表格中将NULL经常列为空列是否很糟糕?

comment

comment_id     member_id    user_id
1              1            NULL
2              1            NULL
3              1            NULL
4              1            NULL
5              1            NULL
6              1            NULL
7              NULL         1
8              NULL         1
9              NULL         1
10             1            NULL

【问题讨论】:

  • 会员和用户有什么区别?
  • user 是管理员。 member 在我的上下文中是公共用户...
  • @lauthiamkok 当您定义公共用户(成员)ID 时?
  • 我不知道你的代码或 mysql,但我认为你最终会用重复的数据夸大你的数据库。如果我评论两次,我会以两个 id 结束,或者不是?

标签: php mysql database-design dbnull


【解决方案1】:

不,它本质上并不坏。 NULL 条目是一种工具,您可以随意使用该工具。

现在,在您发布的情况下,您可能会考虑使用不重叠的用户 ID 和成员 ID,并使用一列来存储任何一个,但这是您的决定。

【讨论】:

  • 感谢 Borealid 的回答! :-)
  • Now, in the case you posted, you might consider having non-overlapping user and member IDs and using one column to store either, but that's your decision. 抱歉,我不太明白 - 您的意思是一张供用户使用的桌子,另一张供会员使用吗?
  • @lauthiamkok 我的意思是,如果某人是“成员”或“用户”,您可以为每个人分配不同类型的 ID(这样您就可以区分他们与ID)。那么你就不需要两列了。但是,就像我说的,由你决定。
  • a different type of ID - 比如member-1 代表会员,user-2 代表用户?
  • @lauthiamkok 可以,是的。这个想法只是让您无需担心 ID 冲突即可进行连接,如果您为每种用户类型都有单独的表。
【解决方案2】:

这可能不会造成太大的性能问题。看起来您在表中的成员和用户之间有某种区别。假设没有人可以是成员和用户,您可以有一个成员/用户 ID 列,但是您需要另一列来确定他们是用户还是成员。这实际上需要比您现在拥有的解决方案更多的存储空间,所以我认为您很好。

【讨论】:

  • 它实际上需要相同或更少的存储空间。您可以有一个 id 和区分列(即 4+1=5 字节),而不是两个 id(比如说 4+4=8 字节)。
  • NULL 值应该占用 0 个字节,不是吗?如果值为空,我认为 MySQL 不会仍然分配 4 个字节,但我可能会弄错
【解决方案3】:

不,这并不“坏”,尽管一些顽固的规范化狂热者会坚持认为允许 nulls 违反了关系数据库法律。

如果您的表格中有很多,您可能想看看设计是否合适,但如果没有更多上下文,您不能说在每种情况下都不好。

【讨论】:

  • 坚持不坚持都无所谓。它确实违反了关系理论。这不像世界末日,但它有几个缺点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2018-01-20
  • 2011-10-06
  • 2011-08-28
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多