【问题标题】:Database Design Choices数据库设计选择
【发布时间】:2011-05-16 16:48:38
【问题描述】:

我正在尝试创建一个包含多个商店且每个商店都有多个员工的工作计划创建者。每个商店还可以访问过去创建的计划,但只有当前计划是可修改的。我有我的 SQL 数据库设置的方式是我有两个表,商店和员工。每个员工都有他们工作的商店,并且一周中的所有时间都有时间,所以我将所有商店的员工保存在一个表中,并根据需要通过查询获取他们。

我的问题是,我应该在员工表中添加另一列(周)以指定该时间表是针对哪一周,还是为该商店过去的时间表的每个时间表创建一个新的 html 文件?我喜欢第二个选择,因为它减少了我的 SQL 数据库被损坏的机会。由于过去的时间表是不可修改的,我对此没有任何问题。

附:只是为了确保:如果我使用 php 写入文件,请说$name = "monir"; write("My name is $name")。文件是"My name is $name" 还是"My name is monir"

【问题讨论】:

  • 我不是 DBA,但我认为您需要更多的表。您有用户和商店,需要一个用于时间表。对于时间表,我有 USERID、STOREID、WEEKID、YEAR、DAY (of week)、START、END。这将允许您创建拆分班次,因为您可以在一天中有多个条目。
  • 哦,您还需要一个 ARCHIVE 字段来标记旧的/不可编辑的时间表(或者,将它们迁移到 ARCHIVEDSCHEDULES 表)
  • 谢谢大家的建议。完成后,我将在我的网站 (sitebloviate.com) 上发布源代码。

标签: php mysql sql database


【解决方案1】:

遵循Database normalization 的概念,您应该添加另一个名为例如的表。时间表,其中包含对员工和商店的引用。除此之外,您应该将您的周数放在此时间表表中,以唯一标识您的表行。

【讨论】:

  • 造成这种情况的一个原因是您可能有员工(即使不是现在,也可能是将来)可能在不止一家商店工作。
【解决方案2】:

正如 DA 制作的 cmets 和其他解决方案所表明的那样,拥有第三张桌子是可行的方法。至少尝试以下方式:

商店: 编号 |姓名 |地址 |等等

员工: 编号 |名字 |姓氏 |等等

时间表: 编号 | store_id |员工编号 |周 |日期 |开始时间 |结束时间

虽然由于存储了日期,星期是多余的,但它可以让您更快地查询。您不需要存档/过去位,因为您可以只查询 schedule.week 是否是当前周。

【讨论】:

    【解决方案3】:

    我的问题是我应该添加另一个 列(周)到员工表

    我建议创建一个schedules 表。然后员工将属于该时间表,而该时间表将属于一家商店。这提供了更大的灵活性,并允许您更好地存储过去的日程安排。

    我喜欢第二个选择,因为它 减少我的 SQL 的机会 数据库已损坏。

    您不想仅仅为了防止用户更新信息而避免使用动态解决方案(表格)而使用静态解决方案(html 页面)。您只需在应用程序中创建访问规则。

    【讨论】:

      【解决方案4】:

      您应该有 store、employee 和一个连接 stores 和 employees 的表,因为 stores 和 employees 没有一对一的关系。在我认识的零售业工作的每个人都曾有过被要求在其他商店工作的时候。

      时间表应该在一个单独的表格中,其中包含员工 ID、星期和预定时间。应在此表上放置一个触发器,以防止更新过去日期的计划。或者,您可以拥有一个仅显示当前计划和未来计划的视图,并使所有更新都使用该视图,但选择可以使用整个表。这将允许数据库管理员在需要时更改过去的计划,但不能更改应用程序,因为它只使用视图。

      【讨论】:

        【解决方案5】:

        我实际上刚刚做了一些非常相似的事情,但是我们的系统比这要复杂得多。

        就个人而言,鉴于您目前的结构,我会选择添加额外的列。这不是更多的工作,而且会让您能够在事后重现 HTML 文件。我知道您不希望能够修改过去的时间表,但这更像是我所说的业务逻辑 - 所以只要防止它出现在您的代码中。

        否则我会建议您为“周”添加另一个额外的表。给它一个 ID、开始日期和结束日期,然后在其他地方使用那个“week_id”来保存重复。您还可以将日程条目与员工记录分开,这样每个员工都会有一个唯一的 ID,而您的“日程”表将是:ID、employee_id、week_id、date、start_time、end_time。

        它可以让您对查询有更多的控制,并在以后大大减少数据库中的重复。此外,除非您的数据库真的真的不稳定,否则损坏应该不是问题。

        为了您的 P.S. - 只要您将输出用双引号括起来,PHP 就会插入您的值。所以你会得到“我的名字是 monir”,而不是“我的名字是 $name”。

        【讨论】:

          猜你喜欢
          • 2019-05-23
          • 2012-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多