【问题标题】:How to SELECT the Unknown Set from a Known Set?如何从已知集中选择未知集?
【发布时间】:2023-04-08 23:22:01
【问题描述】:

对不起,如果我在标题中错误地陈述了问题。举个例子会更清楚:

假设我在数据库中有UsersTopicsQuestions 表。每个用户首​​先选择一些topics,然后为每个主题设置questions 的数量,然后算法从Questions 中创建一个检查,这些检查用户以前没有解决过。然后问题出现了:

  • SELECT 数据库中未解决的问题的最佳方式是什么?

当然,我首先使用UserIdQuestionId用户解决的问题创建了一个关联表,但后来我认为最好存储未解决的问题 而不是 已解决的问题,因为我需要 SELECT 未解决的问题。

由于人口较多,我用两个问题来总结问题:

  1. 如果我每次都使用solvedQuestions 表检查问题是否已解决,是否会导致数据库过载?
  2. 如果我使用unsolvedQuestions 表,是否可以为新用户插入所有未解决的问题? (未来的问题数量让我很害怕。)
  3. 你们有更好的设计吗?

任何帮助将不胜感激。

(顺便说一句,如果我认为不重要,我会使用实体框架代码优先方法。)

【问题讨论】:

  • 这真的是一道SQL题,不是数据库题。您需要了解INNOT 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


【解决方案1】:

我会使用您所描述的SolvedQuestions 表,并使用Not In() 逻辑来查找未解决的问题。这样我就不必每次添加用户时都创建一堆新记录。或者一个问题。

第一个问题中的“超载”是什么意思?

【讨论】:

  • 我明白了。我希望,通过适当的索引,这种方法的表现会相当可接受。
  • 对于那些想要在实体框架中实现Not In()的人,请参阅this
猜你喜欢
  • 2019-11-12
  • 1970-01-01
  • 2020-04-07
  • 2019-11-26
  • 2016-11-13
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多