• 1

    出勤と退勤は一対(出勤だけ、退勤だけというのは通常はない)のものなので、それを1レコードすると考えるか、
    時刻データで種類のことなるものなので別レコードにすると考えるか、
    データベース的にはどちらもありです。

    それぞれメリット、デメリットがあるので運用や処理においてどちらが使いやすいかで決めればいいと思います。

    人間が見たときに、見やすいのは前者ですが、後者でもクロス集計クエリで簡単に前者の形に変換できます。
    レポートで出力するときは、「重複データ非表示」プロパティで簡単に、下記の見た目にすることもできます。
    2024/04/25□AAA□出勤□9:00
    □□□□□□□□□□退勤□17:00
    □□□□□□□BBB□出勤□9:00
    □□□□□□□□□□退勤□17:00

    前者の設計が多いのは、
    勤怠管理で一番多い処理は、勤務時間の集計だと思いますが、
    前者だと、退勤時間-出勤時間 で簡単に計算できるからだと思います。
    日付をまたぐ場合の対応は、日付も持たせるか、退勤時間<出勤時間 なら24時間足すという対応でもいいでしょう(24時間以上の連続勤務はないと思いますので)

    後者でもクロス集計クエリで前者の形に変換できますので、それで同様のことは可能になります。ただし、クロス集計クエリを間にいれることでパフォーマンスに影響があるかも知れません。

    結局、データ入力をどうするか、次第ではないかなと。
    例えばタイムカードを使っているなら、それが出力する形式に合わせるとか(たいてい前者のレイアウトになっているかな?)

  • 2

    日付 氏名 出勤時間 退勤時間

    日付 氏名 区分 時間

    日付をまたぐ勤務にも簡単に対応できる気がするのですが、普通は前者のようにするものですか?

    実際にどのような流れや方法によってデータ入力が行われることになるか、またどのような勤務形態を前提としているか、どのようなルールに基づいて給与計算を行うか――といった諸々の問題が関わってきますので、正解はないでしょう。

    例えば「出退勤時にタイムカード(紙)に打刻する」方式と「ICカードリーダーによって入退室管理を行う(直接電子データとして記録される)」方式とでは勝手が違いますし、また深夜/早朝に渡る勤務が当たり前に発生することを前提としているか否かによっても考え方は変わってくるでしょう。

    外部のひと(たとえば労働基準監督署)からみたらぱっと見で把握がしづらいでしょうか?

    後者のレイアウトにデメリットがあるとすれば、ごくシンプルに「日付ごとの勤務時間の計算がしにくい」という点が挙げられます。
    前者のレイアウトであれば、基本的にはレコードごとに[退勤時刻]と[出勤時刻]の差を求めるクエリを作れば済みますが、後者のレイアウトは[出勤]と[退勤]のレコードが別々に記録されることになるため、多少手間がかかります。
    また出勤時と退勤時のいずれかにおいて打刻忘れが発生し得ることを想定した場合、[出勤]と[退勤]のレコードの組み合わせを得るための手順は複雑化するでしょう。

  • 3
    りんご 2024/04/26 (金) 11:04:54 935bc@0e907

    試験勉強しなきゃいけないのに、模様替えが気になっちゃうパターンかしら?レポートやレイアウトのポンチ絵の前にやるべき事に集中しないとね。