前提・実現したいこと
SQL(データベース)を使ったプログラムを作成したのですが、
完成後にリレーションスキーマを正規化させようとすると、
完成したものと違ったものになり、しかし、その違った形だと
管理上むずかしくなるので、どういった条件で自分がリレーションスキーマを作ったのかが
知りたい。
初期スキーマ
A(従業員番号、氏名、部門番号、部門名、パスワード、労働時間番号、出勤時間、退勤時間)
※太字が主キー
作成したプログラムのスキーマ
A(従業員番号、氏名、部門番号、パスワード)
B(部門番号、部門名)
C(労働時間番号、従業員番号、出勤時間、退勤時間)
条件
従業員番号 同じ番号が複数存在しない。
氏名 氏名と部門番号の両方が同じ従業員存在しない。
部門番号 部門番号が同じである従業員は部門名も同じとなる。
パスワード 同じパスワードが複数存在することもある。
労働時間番号 同じ番号が複数存在しない。
出勤時間 同じ時間の従業員が複数存在することもある。
退勤時間 同じ時間の従業員が複数存在することもある。
条件通りにした場合
A(従業員番号、氏名、部門番号、部門名、労働時間番号)
B(部門番号、部門名)
C(労働時間番号、出勤時間)
D(労働時間番号、退勤時間)
プログラムについて
労働時間を管理するタイムレコーダーを作成したかった。
識別や、削除や更新コマンドをするために、労働時間番号が必要。
作成したプログラムのスキーマにおいて、AとCは従業員番号で結合させているので、従業員番号はどちらにも必要だが、どうにも分解したら出勤時間・退勤時間と従業員番号が一緒になりません。
環境
Ubuntu, PostgreSQL
回答2件
あなたの回答
tips
プレビュー