gpt4 book ai didi

sql - 为什么我应该使用一张 table 而不是两张 table ?

转载 作者:可可西里 更新时间:2023-11-01 07:46:14 25 4
gpt4 key购买 nike

我有两个名为 (Up|Down)Vote 的表,您可以同时进行赞成票和反对票,因此它不是一个带有 bool 值的表。人们建议我应该使用一个名为 votes 的表并有一个名为 type 的字段。

我为什么要这样做?我认为写唯一的表名比写 Vote 更容易,然后写额外的 where 语句 (type & upOrDownTypeBit) <>0 .

注意:(向上|向下)投票表是 PK id, FK userId

最佳答案

对于数据建模,了解事物的含义通常很重要。

同一个人对同一件事投赞成票和反对票是否等同于一个人对某件事根本没有投票?

在任何情况下,为了便于管理,将它放在一个表中当然是可能的(通过适当的性能索引)。在该基表之上,您可以添加 UpVote 和 DownVote View 。或者,为了方便起见,您可以采用另一种方式,使用两个基表和一个投票 View 。

通常,拥有两个表现在意味着两组参照完整性、要维护的两个半相同的表架构以及一个不太统一的数据 View 。这也意味着您可能必须有两个归档和/或分区计划来处理历史等。

这并不意味着它是错误的,但如果实体非常相似,在单个表中对它们建模通常很有意义。

有时实体可能看起来很相似,但实际上并非如此,它们应该在单独的表中建模。此处会想到报价单、采购订单和发票。很多人喜欢将两个或多个这样的东西硬塞到同一张表中,这确实是个坏主意。

关于sql - 为什么我应该使用一张 table 而不是两张 table ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074163/

25 4 0