繁体   English   中英

数据库设计选择

[英]Database Design Choices

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

我的问题是,我应该在雇员表中添加另一列(星期)以指定该日程表是在哪个星期进行的,还是应该为该商店的过去日程表的每个日程表创建一个新的html文件? 我喜欢第二个选择,因为它减少了我的SQL数据库损坏的机会。 由于过去的时间表无法更改,因此我没有任何问题。

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

遵循数据库规范化的概念,您应该添加另一个表,例如schedule,其中包含对雇员和商店的引用。 除此之外,您还应该将周数放在此计划表中,以唯一标识表行。

我的问题是我应该在员工表中添加另一列(星期)吗?

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

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

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

您应该具有商店,员工和连接商店和员工的表,因为商店和员工之间没有一对一的关系。 我认识的每个从事零售工作的人都曾被要求在其他商店工作。

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

正如DA和其他解决方案的评论所表明的那样,拥有第三张表是必经之路。 至少尝试以下操作:

商店:id | 名称| 地址| 等等

员工:id | first_name | last_name | 等等

时间表:id | store_id | employee_id | 周| 日期| start_time | 时间结束

自从存储日期以来,星期是多余的,它使您可以查询得更快。 您不需要存档/过去位,因为您只需查询schedule.week是否为当前星期。

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

就个人而言,鉴于您目前的结构,我将选择添加额外的列。 不需要太多的工作,并且可以让您在事后重现HTML文件。 我知道您不想修改过去的时间表,但这就是我所说的业务逻辑-因此,请防止在代码中的某些地方使用它。

否则,我建议您为“周”添加另一个表。 给它一个ID,开始日期和结束日期,然后在其他地方使用该“ we​​ek_id”来保存重复项。 您还可以将时间表条目与员工记录分开,因此每个员工都将具有唯一的ID,并且您的“时间表”表将是:ID,employee_id,week_id,日期,start_time,end_time。

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

对于您的PS-只要您将输出用双引号引起来,PHP就会插值。 因此,您将获得“我的名字是monir”,而不是“我的名字是$ name”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM