应用程序SQL数据库编程的一般问题

应用程序SQL数据库编程的一般问题,sql,Sql,这只是一个关于如何处理web服务器上的CRUD操作的一般性问题。每次用户(例如)想要在某个组中发表文章时,在执行INSERT操作之前,我们是否应该始终检查该组是否存在,方法如下: SELECT COUNT(1) FROM groups WHERE id = 'group_id'; 或者这不是首选,因为它会导致性能问题?但它也更安全…我对用户可以指定一个不存在的组的设计感到困惑。这似乎是问题的根本原因 为了防止“发布到不存在的组”,您可以在posts的groupId中定义一个外键到group

这只是一个关于如何处理web服务器上的CRUD操作的一般性问题。每次用户(例如)想要在某个组中发表文章时,在执行
INSERT
操作之前,我们是否应该始终检查该组是否存在,方法如下:

SELECT COUNT(1) 
FROM groups 
WHERE id = 'group_id';

或者这不是首选,因为它会导致性能问题?但它也更安全…

我对用户可以指定一个不存在的组的设计感到困惑。这似乎是问题的根本原因

为了防止“发布到不存在的组”,您可以在
posts
groupId
中定义一个外键到
groups
表中。瞧。数据库确保它们存在


但更进一步。拥有
groupId
意味着该组存在。因此,如果您的代码使用的是“引擎盖下”的ID,那么这根本不是问题。

我对用户可以指定不存在的组的设计感到困惑。这似乎是问题的根本原因

为了防止“发布到不存在的组”,您可以在
posts
groupId
中定义一个外键到
groups
表中。瞧。数据库确保它们存在


但更进一步。拥有
groupId
意味着该组存在。因此,如果您的代码使用“引擎盖下”的ID,那么这根本不是问题。

它更安全,但不是100%万无一失。在多用户多线程环境中,在执行检查和后续插入之间,总是会删除组。依赖数据库约束(如外键)更容易。我认为最好添加一些
唯一的
约束,让完整性检查为您完成任务。这样更安全,但不是100%万无一失。在多用户多线程环境中,在执行检查和后续插入之间,总是会删除组。依赖数据库约束(如外键)更容易。我认为最好添加一些
唯一的
约束,让完整性检查为您完成这项工作。我认为可能会发生的事情是,如果用户导航到屏幕上发布到组,一旦他们导航,应用程序就会获取所有组。但是在获取和用户发布之间,可以创建一个组deleted@MichaelHsu . . . 如果这是一个问题(删除组),那么外键关系就足够了。尝试使用已删除的组插入帖子会导致错误。我认为可能会发生的情况是,如果用户导航到屏幕以向某个组发布帖子,一旦他们导航,应用程序就会获取所有组。但是在获取和用户发布之间,可以创建一个组deleted@MichaelHsu . . . 如果这是一个问题(删除组),那么外键关系就足够了。尝试使用已删除的组插入帖子将导致错误。