Microsoft Access 掲示板

レコード件数が少ない単純なDBの正規化について

6 コメント
views
4 フォロー

出勤簿をつくりたいです
その時の正規化について教えて下さい

シフト制で一日に出勤する従業員は5人程度です
従業員テーブル(マスタ)を使うのは当たり前として
この場合でも、日付テーブルと出退勤の時間など詳細のテーブルは分けておくものでしょうか?
2021/06/01の出勤者などを検索するときに、日付テーブルのレコードを対象に検索できるので
速度的なメリットもありますか?

だた、EXCELやCSVファイルからインポートすることもあります
その場合、各出勤レコードにひとつずつ日付がはいっていますので
インポートのときに正規化処理(日付と詳細を分ける)をするのも間違いが起きるような気もします

じらいや
作成: 2021/06/01 (火) 17:49:40
通報 ...
1
りんご 2021/06/02 (水) 00:27:17 48103@0e907

こんなのだったら、もっと分ける意味がありそうかと思うんですが、
例えば、

従業員日付時間イベント
りんご6/18:00出勤
りんご6/15:00退勤

例えば、

従業員年月シフト区分日付出勤時間退勤時間
りんご2021/6早出6/18:205:20
りんご2021/6早出 6/28:305:30

日付テーブルや詳細テーブルは、それぞれ、どんなフィールドになっているのでしょうか?

2
じらいや 2021/06/03 (木) 15:08:48 58219@b36b8

日付テーブルは単純に日付と朝礼内容のメモ(これもマスタから任意の指示内容のIDを入力するだけです)程度です
詳細については
従業員名 出勤時間 退勤時間
です

これらをひとつのテーブルにすると、日付と朝礼内容が従業員の数だけ重複することになりますからデータベース的に間違っていることになるのかな、と思って質問しました

ACCESSが使えないときにタブレットなどでEXCELに入力するときもあります
そのときは
日付 朝礼内容 従業員名 出勤時間 退勤時間
と1行ごとに入力しています
これをインポートすることがあるので、正規化してテーブルを分けると、すんなりインポートできなくなりますよね?

3
りんご 2021/06/04 (金) 00:55:05 48103@0e907 >> 2

 出勤時間や退勤時間は、従業員と日付に従属するので
詳細テーブル:{従業員名.日付}.出勤時間.退勤時間
 朝礼内容は、日付に従属するっぽいので
日付テーブル:{日付}.朝礼内容
と考えてみましたが、正直、自信がないです。
 出勤簿に必要なフィールドが増えたり、朝礼内容が実は個人目標だったり、なんて事になるとどうなるかわからないです。
 Excelインポートは、経験不足でわかりません。うーん、仮テーブルにすんなりインポートしたのち、クエリを駆使して整える感じでしょうか。
 過不足あると思いますので、もっと詳しい方の意見も聞いてみて下さい。

4

Excelデータはインポートではなくリンクでいいと思います。
そのリンクテーブルをクエリかVBAで正規化されたテーブルに追加するという処理にすればいいでしょう。

テーブル設計に関しては、出されている情報からはりんごさんの提案されたものでいいと思います。

5
じらいや 2021/06/04 (金) 16:17:11 58219@b36b8

ひとつのEXCELシートからインポートするときに1対多の関係性をもたせて複数のテーブルにインポートできるのですか?

6

インポートまたはリンクはエクセルのシートのレアイアウトのままです。
それを、クエリやVBAで正規化した形に変換して、正規化テーブルに追加していくということになります。

エクセルのシートのデータ例を出してもらえれば、変換するクエリやVBAは提案できると思います。