创建调度程序应用程序 - 过程和概念问题

时间:2013-09-21 15:58:47

标签: php mysql

如果还有其他时间被问过或已经回答过,我道歉 - 我认为我的搜索一直迷失在试图在服务器上安排PHP任务的人身上,所以我找不到我在找什么为。

因此,作为我的第一个自建应用程序(不是指导或指示的应用程序),我正在尝试构建一个营地调度程序。我已经构建了用于登录,添加小组/组或删除它们,添加活动/组或删除它们,以及生成日期范围的内容,并从该数据中选择要安排的那些内容然后发送它到一个调度程序,然后创建一个新的MySQL表和...

这是我一直停下来想知道如果我正在考虑这个问题的地方。

  • 每个新计划的运行是否应该创建一个新表 - 是这样的 可扩展(如果它可扩展,对我来说无关紧要,但它 显然对其他项目很重要吗?
  • 我应该在输入数据之前对数组进行排序 MySQL表,或者我可以连续输入然后输入下一个 项目是否正在排序?

最终,我不能只进行循环,因为我需要添加其他因素,如:

  • 此小组是否已在最后X个预定时段内完成此活动?如果是这样,请选择另一个。
  • 不要总是从活动列表的顶部开始,否则一些活动将始终是时间表,有些活动将始终是第一个空的 - 甚至可以优先考虑某些因素的重要性。
  • 最初我只想安排与团体约会的日期活动,但我还想添加一个功能,以便能够考虑另一个时间表(小木屋的独木舟之旅)将它们排除在预定列表之外他们将离开的日子。

我可以获得任何有关排序逻辑的帮助。感谢。

修改 因此,基于您的建议,我认为我有以下表格,只有两列ID和名称(可以由用户随时更新/编辑):

cabins
activities

然后我添加另一个表,其中包含最多56列的日期条目(8周)+名称和用户列,名为:

dates

然后我有另一张名为:

的表
schedule

有这样的列:

ID (primary Key)
User (logged in user that created this)
schedule_name (user defined name of schedule)
cabin (foreign key of a cabin)
period_001 (foreign key of first date in corresponding 'dates' table)
activity_001 (foreign key of an available activity which has been chosen to go here)
period_002 (...)
activity_003 (...)
etc...

然后,PHP逻辑将询问按名称和用户分组的行,以便对于给定用户的每个计划名称,对于营地中的每个选定的客舱将存在一行(例如,对于25个客舱的25行)。 “日期”表中的每一行都包含给定计划的整个日期范围。

这是你的想法吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,这是一个数据库建模问题。从您的具体问题开始:

  

每个新计划的运行是否应该创建一个新表?

没有。表表示事物的类型(与OO实现中的类一样)。如果您需要区分该表中的行组,那么这是这些行的属性,并且可能是一个独立的实体。因此,对于每个“计划的新运行”,您将拥有一个包含行的表,然后使用外键在您的另一个表中引用该表。

  

在我将数据输入MySQL表之前,是否应该对数组进行排序?

没有。订单行输入到数据库表中永远不应该用于赋予意义。如果它们具有某些特定顺序,则创建该订单的信息应位于表的列中。使用Order By子句从数据库检索时对数据进行排序。 (只要您Order By数据,始终包含Select子句。)

您的第二组要点似乎从如何模型数据跳转到如何查询它。首先,请阅读:

  • 数据库规范化:简而言之,每个实体都应该拥有自己的表,以及外键定义它们之间的关系
  • 实体 - 关系图:不要担心学习所有官方符号,但是在Visio图表或纸上绘制数据可以真正帮助理解事物的相关性

一旦你对你的实体有了一个正确的想法,以及它们的规范化结构,其余的应该是关于如何编写与它们相关的查询:

  • “该小组是否已在最后X个预定时段内完成此活动?”可能涉及JOIN表,groups数据透视表(即仅存在与多对多关系中的两个或多个表相关的表)和{groups_scheduled_activities之间的scheduled_periods {1}}表。
  • “不要总是从活动列表的顶部开始...甚至可以优先考虑重要性”是关于当你在UI中显示它时从activities表中选择的方式:可能是Order By条款涉及您的优先级因素和随机因素。 (某些数据库中的随机排序可能很棘手,但环顾四周,你会发现很多解决方案。)
  • 如果我理解正确的话,“将另一个时间表排除在他们将要离开的日子之后将其排除在预定列表之外”只会是一种持续很长时间的特殊“活动”,并且可能在UI。从数据建模的角度来看,这只需要一个活动属性(即activities表上的一列)来区分这些活动与“正常”活动。据推测,无论如何,活动都会有“持续时间”属性。