16 database modeling primary-key
我的数据库表中是否应该始终有主键?
我们来看SO标签吧.您可以在任何修订中看到该标记,它可能位于带有postID和修订号的tag_rev表中.我需要PK吗?
此外,因为它在转换表中并且当前没有使用标签应该是一个tagID而不是多个post_id tagid对的多个条目?
Meh*_*ari 10
一个表应该有一个主键,以便你能唯一标识每一行吧.
从技术上讲,您可以拥有没有主键的表,但是您将破坏良好的数据库设计规则.
您应该努力在任何非平凡的表中使用主键,您可能希望通过该键访问(或更新或删除)单个记录.主键可以包含多个列,从形式上讲,它将是最短的可用超级键; 也就是说,最短的可用列组,它们一起唯一地标识任何行.
我不知道Stack Overflow数据库架构是什么样子的(以及我在Jeff的博客上读过的一些我不想要的东西),但是在你描述的情况下,完全有可能存在一个主要的密钥对帖子标识符,修订号和标签值; 当然,这将是最短(也是唯一)的超级密钥.
关于你的第二点,虽然支持在归档表中聚合值可能是合理的,但它确实违背了表中每个行/列交集应该包含一个单独值的原则.虽然它可能会略微简化开发,但没有理由不能保留带有版本化元数据的规范化表,即使对于像标记这样微不足道的东西也是如此.
| 归档时间: |
|
| 查看次数: |
29983 次 |
| 最近记录: |