2011-05-16 207 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,周和計劃時間分開放在一張表中。應在此表上放置觸發器,以防止更新過去日期的日程安排。或者,您可以擁有隻顯示當前時間表和未來時間表的視圖,並使所有更新都使用視圖,但選擇可以使用整個表。這將允許數據庫管理員在需要時更改過去的時間表,但不允許該應用程序,因爲它只使用視圖。