大西彰のウェブログ

データベース系技術ネタ、国際化技術ネタなど、徒然なるままに

目次

Blog 利用状況

ニュース


こんにちは。大西 彰です。
私のブログでは、データベース技術、ソフトウェアの国際化などを取り扱っています。ニッチだけど重要なネタがつまっています。
ブログの内容は無保証です。
また、本ブログでの発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。



マイクロソフトライセンスセンター
マイクロソフトライセンスセンター
マイクロソフトライセンスセンター
ウィルコムストア
ソースネクスト
デル株式会社
アフィリエイト リンクシェア ブログ 携帯対応 成果報酬 広告 テンプレート ブログパーツ

テクノラティプロフィール

記事のカテゴリ

過去の記事

カテゴリ

イメージギャラリ

My blog

Visual FoxPro

Visual Studio

Web Sites

Windows Vista

ブログ

免責事項

社員マスタという不思議なエンティティ(第1回)

データベースモデリングネタです。


皆さんは、業務アプリケーションを作成する上で、[社員]のデータをどのように取り扱っていますか。[社員]というテーブルを使って格納しているよ、という読者の皆様、本当にそれでいいのでしょうか。
DOAやOOAをやっている人にとってみれば、[社員]というエンティティ(テーブル・クラス)がいきなり定義できるというのは不気味なことだと思います。もちろん業務アプリケーションの要件にも大きく依存するので[社員]というテーブルを定義することが必ずしも誤っていると断言したいというものでもありません。

考えていただきたいのは、[社員]というのは、まず、「契約」によって成立するものだということです。[人]と[会社]の[雇用契約]によって定義されるべきものです。また、[雇用契約]が成立しても、[社員]として活動する限り、状態が変化するデータの一種であることです。企業規模にもよりますが、部署の移動・役職の変更・住所の変更、などなど、その社員が会社に勤務し続ける間、その社員の属性は時系列で変化します。この時系列の変化をどのように管理しますか。たとえば、[社員]が次のようなデータで構成されていたら、時系列の変化を管理するのは難しくなります。

    社員
+------------------+
| 社員コード(PK) |
+------------------+
| 氏名      |
| 部署名     |
| 上司のコード(FK)|
| 住所      |
| 生年月日    |
| ・以下省略・・ |
+------------------+

このモデルを見て「これ、おかしいですねぇ」と気が付けば、少なくとも正規化ができていないことを理解していると思います。では、もう少し変えてみましょう。

    社員        
+------------------+   
| 社員コード(PK) |   
+------------------+       部署
| 氏名      |    +----------------------+
| 部署コード(FK) |●-----| 部署コード(PK)   |
| 上司のコード(FK)|    +----------------------+
| 住所      |    | 部署名       |
| 生年月日    |    | 上位部署のコード(FK)|
| ・以下省略・・ |    | ・以下省略・・   |
+------------------+    +----------------------+

初期のデザインよりもよくなりました。部署というのが再利用できるからです。
ここでは、[部署]1に対して、所属する[社員]がn人であることを示しています。
でも、これでもまだまだ問題があります。同じ社員が別の部署に同時に所属するという業務命令が発せられたらどうするのでしょう。

    社員        
+------------------+   
| 社員コード(PK) |   
+------------------+       部署
| 氏名      |    +----------------------+
| 部署コード(FK) |●---●| 部署コード(PK)   |
| 上司のコード(FK)|    +----------------------+
| 住所      |    | 部署名       |
| 生年月日    |    | 上位部署のコード(FK)|
| ・以下省略・・ |    | ・以下省略・・   |
+------------------+    +----------------------+

ここでは、[部署]nに対して、所属する[社員]がn人であることを示しています。
多対多の関係になってしまいました。さて、困ったどうしよう。


ここで問題です。解答は第2回で述べたいと思いますが、皆さんも考えてみてください。
問題1:[人]と[会社]の[雇用契約]をベースに[社員]を定義するとどのようになるでしょうか。
問題2:このデータベースを人事部が利用するとして、その[社員]がどのように部署を移動したのか履歴をトラッキングするにはどうしたらいいのでしょうか。
問題3:このデータベースを人事部が利用するとして、その[社員]がどのように役職上、昇格(あるいは降格)したのか履歴をトラッキングするにはどうしたらいいのでしょうか。
問題4:[社員]が結婚し、苗字が変更になりました。でも社内では旧姓のままその人を管理したいと考えています。どうすればいいでしょうか。
問題5:[社員]に子供が生まれ、扶養家族が増えました。どのように管理したらいいでしょうか。
問題6:[社員]のレポート先(報告先上司)が二人以上存在するとします。どのように管理したらいいでしょうか。

 

投稿日時 : 2004年9月21日 9:48

コメントを追加

# 連載はじめます:社員マスタという不思議なエンティティ 2004/09/21 10:57 大西彰のウェブログ

連載はじめます:社員マスタという不思議なエンティティ

# re: 社員マスタという不思議なエンティティ(第1回) 2004/09/23 23:04 大西 彰

自己レス。
私のブログで、この記事が一番読まれているみたい。
続きは近々・・・。

# 社員マスタという不思議なエンティティ(第2回) 2004/10/05 14:22 大西彰のウェブログ

社員マスタという不思議なエンティティ(第2回)

# 社員マスタという不思議なエンティティ(第2回) 2004/10/05 14:30 大西彰のウェブログ

社員マスタという不思議なエンティティ(第2回)

タイトル  
名前  
URL
コメント