2009-08-26 244 views
2

我正在構建一個員工頁面。將數據拆分爲多個表

一些信息進入一個「僱員」表,但它的一些進入所引用的「員工」表「可用性」表:

可用性: ID /僱員(從唯一的ID員工表)/星期一可用/等等和/

所以我沒有僱員表中唯一的ID,直到我創建它們。

它是細做一個查詢,我設置的員工信息,然後查詢來獲取僱員表的最後一個創建的行,然後使用唯一的ID從設置可用性...

或者是很混亂,我應該有一個創建員工頁面,然後設置可用性頁面?

所以基本上我想知道它是更清潔和更好的編碼來分離這兩個功能?

+0

我知道我可以做到這一點......我想我想知道的是,如果它......「更好」分開來做。 – ian 2009-08-26 15:53:24

回答

3

添加到@ Quassnoi的答案:

您將增加僱員記錄,然後使用MySQL LAST_INSERT_ID()功能找到你添加的employee記錄的自動遞增的唯一ID。然後,您可以將該值反饋回availabilityINSERT聲明。

更多細節MySQL手冊頁面上的http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html

您不要使用SELECT語句(如SELECT MAX(employee.id)),因爲可能有其他用途添加記錄以及這一點很重要。 LAST_INSERT_ID()是特定於您的連接

+0

LAST_INSERT_ID()上的提示 – ian 2009-08-26 16:02:25

1

當然創建employee首先,然後availability

如果您的表是InnoDB,您可以在事務中執行此操作,以便在出現問題時可以回滾整個更新。

1

它是細做一個查詢時,我真想 員工信息,然後查詢到 獲得最後創建的行中的 職員表,然後用獨特 ID從設置 可用性...

是的,這聽起來不錯。如果您爲employeeid使用自動增量列,則可以使用mysql_insert_id()或等效值安全地檢索最後插入的id。不要做SELECT MAX(employeeid) FROM ....,因爲當大量的人同時使用它時,你可能會遇到問題。

1

你可以很容易地通過

mysql_insert_id() 

之後得到最後insered記錄,你可以插入所需員工的可用性記錄。 注意:我會選擇一個處理這些問題的框架,比如Symfony或Cake。

1

使用「最後創建的行」並不總是按照您期望的方式工作,並且如果有增長或其他程序員承擔該項目,將來可能會使事情複雜化。如果我明白你在找什麼,你應該有3張桌子。應該使用一張僱員表,一張可用表和一張第三張表來存儲關聯的唯一記錄。在關聯表中,每一行都有以下列:專用ID,員工ID,可用性ID。

+0

是的,這是我的..'員工'表。一個用於'轉移',然後是可用性是它們之間的關聯。 – ian 2009-08-26 15:55:33

+0

@GoodTimeTribe:你可以舉一些如何使用最後創建的行可能會使事情複雜化的例子嗎?我一直認爲它非常可靠,易於同事理解,但可能有其他情況我不知道。 – anschauung 2009-08-27 13:56:32