• ベストアンサー

社員DBを作る

お願いします。 Accessで社員DBを作ろうと検討しておりますが、基本的な考え方についてアドバイスください。 1)社員の氏名、所属、住所などの基本情報を入れるマスタテーブルを作る(社員番号を主キー)。 2)付加的な情報を入れるテーブルを作る。たとえば、 (1)家族情報(2)資格情報(3)人事考課情報(4)勤怠情報など・・。 3)上記、基本情報を入れるテーブルと付加的情報テーブルを社員番号をキーとしたリレーションで結ぶ。 4)各社員について、付加的情報テーブルに情報を入力していき、必要に応じてクエリで取り出す。 情報の入力の仕方として考えているのが、 1)基本情報入力フォーム上に、付加的情報の入力用のフォームを開くボタンを配置する。 2)基本情報入力フォームを開いた後、必要に応じ、該当するボタンを押して入力フォームを開き、付加的情報を入力していく。 具体的に言えば・・ 1)Aという社員の基本情報を開いて、付加的情報たとえば家族情報を「家族テーブル」に入力する。 2)その後、Bという社員の同じ家族情報を入力するためにBの基本情報を開いて、Bの家族情報を入力する。 3)家族テーブルには、Aの家族とBの家族のレコードが混在して蓄積されるが、区別するために、各レコードに「社員番号+行番号(連番)」を自動的につけていく。 4)基本情報フォームで社員を選択し、家族情報フォームを開くと、社員番号をキーに抽出されたレコードが表示される。 長々と書きましたが、この社員台帳データベース作成上の基本的な設計方法に問題はないでしょうか? もしおかしければ、どこをどうすれば使えるDBになるのでしょうか? アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>勤怠情報について日付を組合せる場合ですが、同じ日付けで複数の入力(例:遅刻と早退)がある場合を考えて、社員番号+日付+行番号・・となりますでしょうか? 「社員番号+日付+行番号」が主キーでOKです。 {データの例} 社員番号, 日付, 行番号 0001, 2004/08/02, 1 0001, 2004/08/02, 2 0001, 2004/08/03, 1 0001, 2004/08/04, 1 0002, 2004/08/02, 1 0002, 2004/08/03, 1 0002, 2004/08/03, 2 0002, 2004/08/04, 1 0002, 2004/08/04, 2 ・ ・ ・ 「社員番号+日付+行番号」と「社員番号+行番号」のどちらを主キーにした方が良いかは、 他の項目を全て検討しなければ厳密にはわかりません。

jetstream
質問者

お礼

ありがとうございました。 いろいろテストしながら作りこんでみます。 また質問がありましたら宜しくおねがいします。

その他の回答 (2)

回答No.2

(1)家族情報(2)資格情報(3)人事考課情報(4)勤怠情報の主キーは「社員番号+行番号(連番)」で基本的には問題ないと思います。 資格情報は、資格の種類が固定的であれば、資格マスタテーブル(主キー:資格コード)を作成して、資格情報テーブルの主キーを「社員番号+資格コード」にする方法もあります。 勤怠情報は、内容によっては、主キーを「社員番号+年月日」でも良いかもしれません。

jetstream
質問者

お礼

ありがとうございます。 社員番号と資格番号の組合せですね・・なるほど。 勤怠情報について日付を組合せる場合ですが、同じ日付けで複数の入力(例:遅刻と早退)がある場合を考えて、社員番号+日付+行番号・・となりますでしょうか?

  • laputart
  • ベストアンサー率34% (288/843)
回答No.1

基本的なDBで問題はないと思います。 (1)家族テーブルには、Aの家族とBの家族のレコードが混在...と言うことはその通りですが、この管理は親テーブルのリンクを社員番号で行う場合は 行番号(連番)は必要ないと思います。 ただこの情報を入力日(日付 自動)をもっていれば 家族情報がいつ更新されたかわかります。 (2)あとは問題ないと思います。途中までテスト的にテーブル、クエリーを作成しながら修正される方が わかりやすいです。

jetstream
質問者

お礼

早速の返信ありがとうございます。 なるほど日付フィールドで更新日がわかりますね。

関連するQ&A

  • Access2003でフォームにあるコマンドボタンで更にフォームを開く

    Access2003でフォームにあるコマンドボタンで更にフォームを開くときのVBA記述で困っています。 Access2003で社員情報管理のデータベースを作成中です。 社員の情報を入力するにあたり、【基本情報】と【詳細情報】とでフォームを分けてあり、【詳細情報】を入力したい場合は、"基本情報フォーム"にあるコマンドボタンをクリックして"詳細情報フォーム"を開くようになっています。 この際、"基本情報フォーム"で開いている社員の【社員番号】を"詳細情報フォーム"の【社員番号】欄にも自動的に表示させるため、以下のようなVBAを記述しました。 Private Sub コマンドボタン_Click() DoCmd.OpenForm "詳細情報フォーム" Forms![詳細情報フォーム![社員番号].DefaultValue = Me![社員番号] End Sub 【社員番号】は7ケタの半角英数で、社員によって、数字だけの場合と、英数混じっている場合とがあります(データ型はテキスト型にしてあります)。 困っているのは、 1.上記を実行した際に、数字だけの社員番号は問題ないのですが、英数混じりの場合だと"社員番号"テキストボックスが「#Name?」という表示になってしまう 2."基本情報フォーム"のコマンドボタンをクリックして新規の"詳細情報フォーム"を開き(社員番号のみが反映され、他の項目は空欄の状態)、詳細情報を入力→保存したあと、別の社員番号で"基本情報フォーム"を開き、コマンドボタンで"詳細情報フォーム"を開くと、前に入力した社員の情報が出てきてしまう。 (つまり、"詳細情報フォーム"のもととなるテーブルに、1行でもレコードがあると、それが出てきてしまう。) 【詳細情報】は、 1.データを入力する社員としない社員とがいる 2.新規でレコードを作成する場合と、既存のレコードを上書きする場合とがある ので、もととなる"詳細情報テーブル"にその【社員番号の】レコードがなければ新規入力画面を、レコードがあればそのレコードを呼び出す形にしたいのですが、英数混じりの表示の件も含め、どうすれば、正しく表示されるか教えていただきたいです。 ぜひぜひよろしくお願いします。

  • Access2002 レコード入力時に更新/追加を判別できないでしょう

    Access2002 レコード入力時に更新/追加を判別できないでしょうか? わかりにくくてすみません。 現在、簡単な従業員データベースを作っています。 テーブルは2つだけです。 T_基本データ ・従業員番号=主キー ・氏名 ・カナ T_付属データ ・従業員番号=主キー ・職位 だけです。 本来ならば、1つのテーブルでいいのですが、T_基本データのみ、他部署からMDBで送られてくるため、そのMDBの内容、構成は変更できない(頻繁に送られてくるため、いちいち弊部署にマッチした構造に変換する暇が無い)ため、リンクテーブルにしており、弊部署で必要な付属データを別テーブルにし、従業員番号でリンクしている状態です。 フォームは2つ作っており、1つはT_基本データと、T_付属データを一まとめにして表示できるようになっています。付属データが存在しない場合は、該当項目のテキストボックスは空白です。また、従業員番号や氏名で検索(フィルタ)できるようにしています。単票形式です。 そのフォームに「付属情報入力フォーム」を呼び出すコマンドボタンを用意し、そのフォームを呼び出すようにしています。こちらも単票形式です。ちなみに、プロパティで「入力用=はい」にしています。こうしないと、T_付属データの1レコード目が変更されるだけで、追加してくれないためです。 1つ目のフォームで付属情報入力用フォームの呼び出しボタンをクリックすると、フォームが現れ、従業員番号と氏名のテキストボックス(表示済み)と付属情報を選択するコンボボックスが表示されます。 ここで、コンボボックスから適当な項目を選択し、保存を押すと、そのフォームが消え、1つ目のフォームがリクエリーされて、選択した付属情報がテキストボックスに表示されます。 ここまではすんなり作成できたのですが、問題は、一度入力した付属データを更新できないのです。(消すことはできますので、ユーザがめんどくさがっても、一度消去→再入力、は可能です。が。。。美しくない気がします) 一度付属データを入力した社員を1つ目のフォームで表示させ、付属データ入力用のフォームを表示させると、すでに入力してある付属データが表示されますが、これを変更して終了ボタンを押すと、主キーが重複・・・というメッセージが出て保存できません。 当たり前といえば当たり前なのですが。。。 私の頭の中では、2つ目のフォームで、 1.コンボボックスで職位を選択 2.終了をクリック 3.T_付属情報で従業員番号を検索し、あればそのレコードを更新、なければ新規レコードを追加 というシナリオがあるのですが、どう実現していいのかがわからない状態です。 お詳しい方、ご教授くださいませ。 また、「この程度なら1つのフォーム(とサブフォーム)でできるじゃん」という気もするのですが・・・そういう解決策もあればお教え願えれば幸いです。 長文になりましたが、何卒よろしくお願いします。

  • Access パスワード付きDBへの接続について

    お世話になります。 アクセスについて行き詰まりましたので質問をさせて下さい。 現在、Access2000にて開発を行っております。 フォームやクエリのみのファイル(A.mdb)と、DBのパスワード設定がされているファイル(B.mdb)があり、B.mdbはA.mdbのリンクテーブルとなっています。 A.mdbにはフォームが複数あり、フォームA上のボタンを押下するとDoCmd.Openform命令にてフォームBが立ち上がります。 フォームBではレコードソース(SELECT文)が設定されており、データが画面の各項目に表示された状態でフォームBが立ち上がる動きとなっています。 ここで問題なのですが、DBにパスワードが設定されているため、フォームBのレコードソースのSQL文が実行された時に「パスワードが正しくありません」というエラーが発生しフォームBを立ち上げることが出来ません。 フォームBのOpenイベントにDBへ接続するプログラム(OpenDatabase命令で4つ目の引数にパスワードを設定)を入れましたがエラーは変わりませんでした。 解決策をどなたかご存知でしたら、ご教授いただきたいと思います。 以上、よろしくお願い致します。

  • Updateできない・・・

    初心者です。お願いします。 Access2002で人事考課DBを作成中です。 ADOのUpdate処理がうまくいかず困っています。 作業の流れとしては以下のとおりです。 1)職員テーブルを元にしたメニューフォーム(F_人事管理DB)を開く。2)対象となる職員を呼び出す。3)メニューから考課結果入力フォーム(F_情意考課)を開く。 4)考課結果を入力する。5)情意考課テーブル(T_情意考課)に結果が蓄積される。 情意考課テーブル(T_情意考課)と中心の職員テーブル(T_人事考課DB)は職員番号をキーにして繋がり、考課結果入力フォーム(F_情意考課)は情意考課テーブルを元にしています。 考課結果を入力した後「更新後処理」で次のようなプロシージャによって、結果を情意考課テーブルに追加させようと考えました。 Private Sub Form_AfterUpdate() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim bango As String Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T_情意考課", cn, adOpenKeyset, adLockOptimistic bango = Forms!F_情意考課!テキスト63 rs.Update "職員番号", bango rs.Update "更新日付", Date rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub テキスト63のコントロールボックスには「=Forms!F_人事管理DB!職員番号」という式で職員番号が代入されます。 変数bangoにはデータは代入されているようですが、情意考課テーブルの更新ができずエラーになってしまいます。 どこがおかしいでしょうか? 職員番号は「K000*」という連番で型はテキストです。 この作業中は、F_人事管理DB、F_情意考課のふたつのフォームが開いています。 宜しくお願いします。

  • サブフォームを複数持つフォームを、一つのキーワード取得用フォームから印

    サブフォームを複数持つフォームを、一つのキーワード取得用フォームから印刷できますか。 印刷用フォームを作成しました。 その中には、基本情報とサブ情報1、サブ情報2…というような複数のサブフォームがあります。 基本テーブルは、 商品番号、商品名 内容 というようなフィールドがあります。   サブ1テーブルは、 商品番号、日付A サブ2テーブルは、 商品番号、日付B キーワード取得用フォームに、商品番号と日付を入れてコマンドボタンを押すと、サブフォームを複数持つフォームに、 (1)基本テーブルの内容と、 (2)それぞれのサブフォームには取得した日付の日付情報(複数レコードもあり) を入れて印刷したいのです。 こんなことは可能でしょうか。 コマンドボタンにクリック時のイベントを書けばいいような気もするのですが、方法がわかりません。 教えてください。よろしくお願いいたします。

  • Access フォームの入力について

    アクセス初心者です。 フォームA(メインとなる画面)でコマンドボタンをクリックすると フォームBが開くように設定しました。 フォームAでレコード1を入力時にコマンドボタンをクリックすると フォームBのレコード1に フォームAのレコード5を入力時にコマンドボタンをクリックすると フォームBのレコード5に移動してデータを入力できるようにすることは可能でしょうか?可能であればどのようにしたらよいでしょうか? 具体的には テーブル 社員NO、氏名・・・、希望地域(yes/no型)があります。 フォームA ・社員NO ・氏名など フォームB ・希望地域(チェックボックスでチェックする。複数選択可) フォームAを入力時にフォームBを開いて希望地域にチェックできる というようにしたいのですが、 フォームAからフォームBに移動するといつもレコード1が表示されてしまいます。 自分なりに試行錯誤しているのですがどうしてもできません。 よろしくお願いします。

  • 文字列の入っているString値、何も入力されていないString値、Null値の全てを表示されるには?

    access2003です。 フォーム1とクエリ1とテーブル1があります。 クエリ1の「テーブル1の番号フィールド」の抽出条件に 「Like "*" & [Forms]![フォーム1]![番号テキスト] & "*"」と入力しています。 フォーム1の番号テキストに「1」を入力しコマンドホ゛タンを押すと 「1」を含むレコードを表示され フォーム1の番号テキストに「*」を入力しコマンドホ゛タンを押すと 何かしらの文字列が入力されているレコート゛が表示されます。 しかし テーブル1番号フィールドには、 Null値と何も入力されていないString値(""←が入っている)も含まれています。 (見た目は空白どちらも空白です) (String値がある理由はADOを使って何も入力されてない値もまとめてレコードに追加している為) ここで質問なのですが フォーム1のコマンドホ゛タンを押したときに 文字列の入っているString値、何も入力されていないString値、Null値の全てを表示されるには どうすればいいのでしょうか? よろしくお願い致します。

  • Accessのフォームにて顧客番号を検索して無ければ新規作成したい

    Access2003のフォームで社員管理システムを作ろうとしていますが、VBAの記述でわからないことがあるので、教えてください。 まず、テキストボックス「txt_検索」に社員番号を入力し「cmd_検索」ボタンを押すと、社員管理テーブルの社員番号フィールドより検索をします。 社員管理テーブルに該当するレコードがある場合は、レコードの編集となり、社員番号がない場合はテキストボックス「txt_社員番号」に「txt_検索」の値を入れた新規レコードの作成としたいのです。 入力した値でレコードの検索をして、無いなら新規作成といったコードは どのような記述になるのか教えてください。 よろしくお願いいたします。

  • DBのレコードサイズの調査方法について

    現在DBのレコードのサイズを調査しています。 例えばあるDBに100テーブルあるとしてその中で レコードのサイズが一番大きいテーブル名とそのテーブルの レコードサイズがいくつなのかを調査しております。 SQL等でレコードサイズを抽出することは出来るのでしょうか。 それとも全テーブルの定義情報から割り出すしかないのでしょうか。 調査対象のDBはPostgresSQL(ver 7.4)になります。 すみませんが宜しくおねがいします。

  • Access2002 フォームからのレコード入力の成功/不成功

    いつもお世話になっております。 早速ですが、従業員マスタテーブルがあり、それを元に従業員の情報を入力するフォームを作成しました。 従業員マスタテーブルは、「社員番号」だけをキーにしています。 例えば、新入社員のデータを、完全に新規に入力する場合、うまく行きます。 また、すでにいる社員の、「社員番号以外」のフィールドを更新することもできます。 しかし、社員番号が既存のものとかぶるような新規登録、あるいは情報変更に関しては、入力用フォーム上では正常終了したように見えますが、実際の従業員マスタテーブルをチェックしてみると、変更はされていません。 ですので、フォームしか触れないユーザは、自分の変更、新規追加がうまく行ったのかどうか、テーブルが見られないのでわからない、という状況になっています。 仕様要求としては、新規であれ、情報変更であれ、既存の社員番号に重なる場合はメッセージボックスで「更新失敗」を表示したいのです。 If Exist・・・のような分岐を情報を入力するフォームの「閉じる」ボタンの裏に設けたいのですが、やり方がイマイチわかっておりません。 ご存知の方がいらっしゃれば、ご教授、よろしくお願いします。 --------------------------------------------------------------- <従業員マスタ> ・社員番号・・・テキスト ・氏名・・・テキスト <仕様要求> 社員番号「0001」と「0002」の社員が存在する場合・・・ ・情報入力画面で、「0001」の社員の社員番号を「0002」に変更しようとすると、エラーメッセージ表示 ・新規情報入力(新入社員など)の際、社員番号が「0001」や「0002」の社員として登録しようとすると、エラーメッセージ表示 以上、お時間のあるときによろしくお願いします。