【问题标题】:Sql database design for null column on first insertion首次插入时空列的 Sql 数据库设计
【发布时间】:2020-03-23 14:07:11
【问题描述】:

我们在 sql 数据库中有一个包含三列的表:t1c1t1c2t1c3

当我在表中插入新行时,我将填充前两列(t1c1t1c2)的值,但第三列(t1c3)在第一次插入时将始终为空。之后系统内部发生了一些事情,它将填充t1c3 的值。

我的问题是关于标准化的。 t1c3 列真的应该是 table1 的一部分,还是应该是另一个表 (table2) 的一部分,只有一列 (t2c1) 等于 (t1c3)。

【问题讨论】:

  • 只有在桌面上有触发器时才会发生这种情况。否则,它是您的插入代码中的错误。
  • 我不同意。在某些情况下可能会发生这种情况。示例:我们有一个带有 id、name 和 address 的用户表。最初我们可能在用户身份验证时没有地址,但在电子邮件身份验证后的稍后时间,用户可能希望提供他的地址,该地址将填充第三列。
  • @niteshmalav 。 . .我将您的问题解释为数据库在第一次插入时生成第三列NULL。为此,您需要一个触发器。像往常一样,样本数据和期望的结果可能会阐明您想要做什么。
  • 明白。我想给出一个像上面这样的示例,但它会再次只关注用例的一个方面,这可能会以不同的方式解释问题,而其他一些用例可能会做出不同的推断。

标签: mysql sql postgresql database-normalization


【解决方案1】:

您需要两列:一列包含来自table1 的键,另一列包含tcl3 值,因此您可以将table2 中的值关联回table1 中的正确行。但是,在这种情况下似乎没有必要这样做。

【讨论】:

  • 这里我的理解很简单。如果我在表中插入某些内容并且其中一列是 NULL,那么我宁愿将该字段保留在另一个表中,因为稍后将填充该值,然后它代表我的另一个实体。
  • 那么它也应该适用于这种情况。
  • 如果它真的代表另一个实体,那么它应该在另一个表中。但是,仅仅因为一列以 NULL 值开头就推断出代表另一个实体并不是自动正确的。
  • 是的,我明白了。我想这又是特定于用例的。
猜你喜欢
  • 2016-10-04
  • 1970-01-01
  • 2011-01-20
  • 2019-10-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多