数据库设计选择

时间:2011-05-16 16:48:39

标签: php mysql sql database

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

我的问题是,我应该在employee表中添加另一列(周)来指定该计划的周,或者为该商店的过去计划的每个计划创建一个新的html文件?我喜欢第二种选择,因为它减少了我的SQL数据库被破坏的可能性。由于过去的时间表是不可修改的,我对它没有任何问题。

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

5 个答案:

答案 0 :(得分:4)

遵循Database normalization的概念,您应该添加另一个名为“{3}}的表格”。包含对员工和商店的引用的计划。除此之外,您应该将您的周数放在此计划表中,以唯一标识您的表行。

答案 1 :(得分:1)

  

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

我建议创建一个schedules表。然后,员工将属于该计划,并且该计划将属于商店。这提供了更大的灵活性,使您可以更好地存储过去的日程安排。

  

我喜欢第二种选择,因为它   减少我的SQL的机会   数据库被破坏。

您不希望避免动态解决方案(表)支持静态解决方案(html页面),以防止用户更新信息。您只需在应用程序中创建访问规则。

答案 2 :(得分:1)

您应该拥有连接商店和员工的商店,员工和桌子,因为商店和员工之间没有一对一的关系。我所知道的在零售业工作过的每个人都有过被要求在其他商店工作的时候。

时间表应与员工ID,周和预定时间分开。应在此表上放置一个触发器,以防止更新过去日期的计划。或者,您可以拥有一个仅公开当前计划和未来计划的视图,并使所有更新都使用视图,但选择可以使用整个表。如果需要,这将允许数据库管理员更改过去的计划,但不是应用程序,因为它仅使用视图。

答案 3 :(得分:1)

正如DA和其他解决方案所做的评论所表明的那样,拥有第三张表是可行的方法。至少,请尝试以下方法:

店:  id |名字|地址|等

雇员:  id | first_name | last_name |等

时间表:  id | store_id | employee_id |一周|日期| start_time | END_TIME

虽然存储日期是一周多余的,但它允许您更快地查询。您不需要存档/过去位,因为您只能查询schedule.week是否是当前周。

答案 4 :(得分:0)

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

就个人而言,鉴于您目前的结构,我会选择添加额外的列。这不是太多的工作,并且会让你能够在事后重现HTML文件。我知道您不希望能够修改过去的日程安排,但这更像是我所谓的业务逻辑 - 所以只是阻止它在您的代码中的某个位置。

我还建议您为“周”添加另一张额外的表格。给它一个ID,开始日期和结束日期,然后在其他地方使用“week_id”来保存重复。您还可以从员工记录中分离出计划条目,因此每个员工都有一个唯一的ID,您的“计划”表将是:ID,employee_id,week_id,date,start_time,end_time。

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

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