gpt4 book ai didi

sql - 数据库设计: problem with updating a table

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:55 24 4
gpt4 key购买 nike

我在设计数据库表时遇到了问题。在这里解释我的问题是一个简单的论坛数据库。论坛表包含以下列:

|  forum_id  |    title      |     desc     |   last_update    |
------------------------------------------------------------
| 1 | 'title' | 'desc' | 2011/5/3 |

现在,当我设计这个表时,我是否应该允许 title、desc 和 last_update 列为空值??

如果我从逻辑上考虑,一个论坛应该始终具有 title 和 desc 列的值,而 last_update 列可以为 null 或不为 null 但如果用户尝试更新 title 列,他/她还必须提供 desc 值.所以这并不好,因为使用这种方法我们必须找到我们正在编辑的论坛的 desc 值并将其再次传递给 sql 语句,这将导致不必要地覆盖已经存在的值!

问题 1:另一方面,如果我为每个更新语句(每个列更新一个)声明单独的 sps,并且我的表足够大,那么这将导致数据库充满 sps,基本上做同样的事情同一张 table 上的东西。

问题 2:如果我允许空值,那么像这样的更新将损害我的数据完整性:

update ForumDB(title, desc, last_update) 
values ('edited title', null, 2011/6/4)
where forum_id = 1

那么可以做些什么来防止这两种副作用?

最佳答案

我同意 Nivas 的观点,听起来这些列不应该为空,因为您应该强制执行没有这 2 个强制值就无法创建论坛的规则。

无论如何从您的问题 2 看来,您肯定希望在任何情况下都禁止更新到 null

所以你可以有一个通用的 UPDATE 过程,它接受所有参数并将 NULL 参数解释为意味着保留原始值。

SET title = COALESCE(@title, title), 
Desc= COALESCE(@Desc,Desc)

您需要检查 RDBMS 中这些非更新更新是否对性能有任何影响。 For SQL Server some information on this can be found here.

关于sql - 数据库设计: problem with updating a table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7269442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com