2009-08-26 3 views
2

私は従業員ページを作成しています。データを複数のテーブルに分割する

情報の一部は、「従業員のテーブルに行くが、それのいくつかは、「従業員」テーブルに参照される「可用性」テーブルに行く:

可用性: ID /社員(一意のIDから/

私はそれらを作成するまで従業員のテーブルから一意のIDを持っていません。

は、従業員表の最後の作成された行を取得し、可用性を設定することから、一意のIDを使用するために、私は従業員の情報を設定し、クエリし、クエリを行うには、それは結構です...

それとも、それは面倒ですか?私は従業員のページを作成し、次に利用可能なページを設定する必要がありますか?

これは基本的に私はそれが2つの機能を分離するために「より良い」コーディングであるかどうかを知りたいのですか?

+0

私はそれを行うことができると知っています...私はそれが別にそれを行うより良いと思っていますね。 – ian

答えて

3

Quassnoiの答えを@に追加:

あなたが追加employeeレコードの自動インクリメント一意のIDを見つけるために、MySQLのLAST_INSERT_ID()機能を使用し、その後、従業員レコードを追加します。その値をavailabilityINSERTステートメントに戻すことができます。

詳細はそれが同様にレコードを追加する他の用途があるかもしれないので、あなたは、SELECT文(例えばSELECT MAX(employee.id))を使用しないことが重要ですhttp://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html

でMySQLのマニュアルページにあります。 LAST_INSERT_ID()はあなたの接続に固有のものです

+0

LAST_INSERT_ID()について知っておくと便利です – ian

1

employee最初にavailabilityを作成します。

テーブルがInnoDBの場合は、トランザクションで実行すると、何か問題が生じた場合に更新全体をロールバックできます。

1

それは私が に従業員の情報を設定してクエリを実行し、その後 へのクエリは 従業員表の最後の作成された行を取得し、 可用性を設定することから、ユニークな IDを使用して結構です...

はい、問題ありません。 employeeidにautoincrementカラムを使用する場合は、mysql_insert_id()または同等のものを使用して、最後に挿入されたIDを安全に取得できます。多くの人が同時に使用しているときに問題が発生する可能性があるので、SELECT MAX(employeeid) FROM ....を実行しないでください。あなたは簡単にその後

mysql_insert_id() 

を経由して最後inseredレコードを取得することができます

1

は、希望の従業員の可用性レコードを挿入することができます。 注:SymfonyやCakeのように、これらの問題を処理するフレームワークを選択します。

1

「最後に作成された行」を使用すると、期待通りの結果が得られない場合があります。将来的に成長している場合や別のプログラマーがプロジェクトを引き受ける場合は、あなたが探しているものを理解すれば、代わりに3つのテーブルが必要です。従業員のための1つのテーブル、可用性のための1つのテーブル、および第3のテーブルを使用して、関連付けのための固有のレコードを格納する必要があります。関連テーブルでは、各行には、一意のID、従業員ID、可用性IDの列があります。

+0

それは私が持っているものです。「従業員」のテーブル。 1つは「シフト」のためのものであり、次に利用可能性はそれらの間の関連性である。 – ian

+0

@ GoodTimeTribe:最後に作成された行を使用すると複雑になる可能性がある例をいくつか教えてください。私は常に信頼性が高く、同僚が理解しやすいと判断しましたが、私が気づいていない他の状況があるかもしれません。 – anschauung

関連する問題