2011-05-16 98 views
1

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

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

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

+0

我不是DBA,但我认为你需要更多的表。你有用户和商店,需要一个SCHEDULES。对于时间表,我会有USERID,STOREID,WEEKID,YEAR,DAY(星期),START,END。这将允许您创建拆分班次,因为您可能有一天的多个条目。 – 2011-05-16 16:54:23

+0

哦,你想要一个ARCHIVE字段来标记旧/不可编辑的时间表(或者,也可以将它们迁移到ARCHIVEDSCHEDULES表) – 2011-05-16 16:55:25

+0

谢谢大家的建议。一旦完成,我将在我的网站(sitebloviate.com)上发布源代码。 – Monir 2011-05-18 00:07:28

回答

1

正如DA和其他解决方案所提出的意见所指出的,拥有第三张表格是最佳选择。至少,请尝试以下方法:

store: id |名称|地址|等等

雇员: ID | first_name | last_name |等等。

schedule: id | store_id | employee_id |周|日期| start_time | end_time

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

4

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

+0

其中一个原因是,您可能有员工(即使不是现在,也许将来)可能在多家商店工作。 – 2011-05-16 18:40:45

1

我的问题是我应该另一 柱(周)增加雇员表

我建议建立一个schedules表。然后员工将属于该时间表,并且时间表将属于商店。这提供了更多的灵活性,并允许您更好地存储过去的时间表。

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

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

0

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

就个人而言,鉴于您目前的结构,我会选择添加额外的列。这并不是太多的工作,并会让你在事后再现HTML文件的能力。我知道你不想修改过去的日程安排,但这更多的是我称之为业务逻辑 - 所以只是防止它在代码中的某处成为可能。

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

它会给你更多的控制你的查询,并在以后相当大地减少数据库中的重复。另外,除非你的数据库确实是确实不稳定,腐败应该不成问题。

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

1

您应该有商店,员工和加入商店和员工的表格,因为商店和员工之间没有一对一的关系。我所知道的每个人都曾在零售店工作过,有时候他们被要求在其他商店工作。

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