从多个表中筛选数据并插入到临时表中


Filter data from Several Tables and insert into a temp table

假设我们在几个表中有电子邮件广播所需的数据,并且我们需要将一些常见字段信息(如(Name,email))从不同的表中使用到一个临时表中进行电子邮件广播等。。表格示例EmployeeStudentClassParents表等

假设我们需要向发送不同场景的电子邮件

  1. 所有学生
  2. 仅限五年级学生
  3. 仅限员工
  4. 仅限家长
  5. 员工、家长
  6. 仅限三、五、六年级学生

我们可以有几种组合。我一直在思考这个问题,并搜索类似的例子,但找不到任何相关的例子。

样品表结构

Employee/Teacher (ID, Name, Email, Phone..)
Student (ID,Name,Email,Phone..)
Class(ID,ClassName)
Subject (ID, SubjectName, GradeID)
Parent(ID,Name,Email,Phone...)

我很感激我们不能采用的指针或方法,最大的问题是如何为此生成动态查询,以便从不同的表中选择相关数据来发送电子邮件通知或提示等。

这实际上可以归结为应用程序架构,而不是数据结构,尽管从这些表的外观来看,您也可以改进数据结构。

最终,您将为最终用户提供访问数据的选项。在将请求发送到数据库表之前,您需要在前端尽可能缩小他们的选择范围。他们的最终请求范围越窄,数据库查询就越简单。

构建多个动态SQL查询可能是一种选择。这在最初更难处理,但每次调用时很可能会获得最高效、最窄的执行计划。

调用以表为中心的存储进程将是另一种方法,例如,用户在前端请求所有教师和所有家长的电子邮件地址,这反过来调用具有适当参数的以教师表为中心进程和单独的以家长表为中心程序,并将数据返回到前端。

在一天结束时,如果可能的话,简化您的数据结构(将用户合并到一个用户表中,而不是多个表中用户类型数据的多个冗余存储。更多关于数据库中的正常形式的信息,请点击此处),尽可能缩小前端查询的灵活性,当您发现最终用户访问模式与您最初的查询设计不一致时,请准备好进行调整和调优。

不幸的是,有很多变量,但没有灵丹妙药。话虽如此,确定你试图解决的特定问题,然后问自己为什么一开始就是一个问题,这将使你走上解决方案的道路。