【发布时间】:2023-04-08 23:22:01
【问题描述】:
对不起,如果我在标题中错误地陈述了问题。举个例子会更清楚:
假设我在数据库中有Users、Topics 和Questions 表。每个用户首先选择一些topics,然后为每个主题设置questions 的数量,然后算法从Questions 中创建一个检查,这些检查用户以前没有解决过。然后问题出现了:
-
SELECT数据库中未解决的问题的最佳方式是什么?
当然,我首先使用UserId 和QuestionId 为用户解决的问题创建了一个关联表,但后来我认为最好存储未解决的问题 而不是 已解决的问题,因为我需要 SELECT 未解决的问题。
由于人口较多,我用两个问题来总结问题:
- 如果我每次都使用
solvedQuestions表检查问题是否已解决,是否会导致数据库过载? - 如果我使用
unsolvedQuestions表,是否可以为新用户插入所有未解决的问题? (未来的问题数量让我很害怕。) - 你们有更好的设计吗?
任何帮助将不胜感激。
(顺便说一句,如果我认为不重要,我会使用实体框架代码优先方法。)
【问题讨论】:
-
这真的是一道SQL题,不是数据库题。您需要了解
IN和NOT IN。 1)不,这不是“过载”。 2)不,这真的很愚蠢。我们存储事实而不是非事实。 3) @Brian 提供了答案。 -
@a_horse_with_no_name。 1)对于那些理解问题的人(a)它是通用 SQL(b)平台无关紧要。 2)另外,当然,有几个免费软件和蒸汽软件产品使用 SQL 一词而不符合 SQL 要求,这是欺诈。例如。如果你的“sql”“平台”没有
IN或者不支持子查询,那就不是SQL。 -
@PerformanceDBA:即使是商业产品也不支持所有的 SQL 标准——即使是最基本的 SQL 操作(包括商业产品),对标准 SQL 的支持程度也有很大不同。所以很高兴知道正在使用哪个具体的 DBMS。在创建带有
sql标签的问题时,甚至会出现一条要求提供该信息的通知。 -
@a_horse_with_no_name 1) 在本问答中,我们关注的是 (a) SQL
IN,其中 (b) 需要子查询。这些是标准的 SQL 要求。尽量不要因超出该范围的问题而分心。 2) 即使是最基本的 SQL 操作,对标准 SQL 的支持程度也非常不同 显然是错误的。这是假装 sql 人群的常见借口,为他们的不遵守行为辩护。如果您希望接受有关该主题的教育,请打开一个新问题,并发布一个不符合要求的真正 SQL 平台的示例。 -
更正了不正确的标签删除。问题是关于关系数据库(参见 OP 给出的示例),SQL 是关系数据库语言。
标签: sql entity-framework ef-code-first relational-database