- 締切済み
データベース設計
dbの勉強中のものです。どうしても正規化が思いつかないので相談させてください。 PCの利用履歴DBを作成しています。以下のようにデータベースを作る予定です。 PC名|ログイン時間|氏名 PCA|2011-06-01-11:10|goo太郎 PCB|2011-06-01-11:10|goo太郎 PCC|2011-06-01-11:10|goo花子 PCD|2011-06-02-9:10|goo次郎 第一正規形まで進んでるとおもうのですが、ここから第二正規形までもってけるのでしょうか? PC名前と氏名からログイン時間は絞れますが、これ以上分解することは無理だと思います。 よろしくおねがいします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Siegrune
- ベストアンサー率35% (316/895)
入力も出力も、PC名|ログイン時間|氏名 だけならこれで正規化終わりでいいと思いますが、 ログインした情報をどうやって取得するつもりですか? 普通、氏名は取得できず、ログインIDでログインした情報しか取得できないと思うのですが。 また、出力にはどの部署の誰か把握する必要ないですか? あるいは、ローカルユーザーでログインしたのかドメインユーザーでログインしたのか、 ドメインユーザーならどのドメインかとか。 入出力で必要な項目を整理してトランザクションを決めて、それから正規化しないと 無駄骨になると思いますけど。 質問の例なら、普通は、氏名でなくてログインIDになると思いますが。 (手書きの入力原票があってそこに氏名が書いてあり、毎回氏名を入力する。ということなら別に氏名でもいいのでしょうけど。でも、この場合も、利用者コードかなにかを作ってそちらを入力するほうが普通です。・・・入力の設計の話で正規化の話とはずれてますが、正しく設計していることが前提なので。)
- mitoneko
- ベストアンサー率58% (469/798)
結果は、現実界での規則に依存しますね。 今提示されているデータから考えられる規則からすると・・・ あるPCは、ある人しか操作することが認められていない。という規則があるとすると、候補キーは{PC名・ログイン時間}となり、氏名は、PC名にのみ依存しますから、 {PC名・ログイン時間}(主キー:PC名) {PC名・氏名}(主キー:PC名) となります。 例示ですと、ログイン時間がダブっている(goo太郎さんはなんと、2台のパソコンに同時にログインを完了することが出来る)なんて事例がありますが、こんな早業士は存在しないと仮定すると、また違った結果が出てきます。 「goo太郎さんは、PCAとPCBのみ操作することが認められている」と言ったように、ある人には複数の決まったPCのみの操作が認められているという規則があると、これもまた違う結果になります。 このように、リレーショナルデータベースの正規化は、現実界のルールをどこまで、テーブルの形で表現するかという作業ですから、まず要件(制約)をきっちりと定義しないと、ちゃんと正規化も出来ないですよ。
- jjon-com
- ベストアンサー率61% (1599/2592)
> 主キーはマシン名と氏名です。 間違っています。 goo太郎は,昨日もPCAに対してログイン操作をおこなったし,今日もPCAに対してログイン操作をおこなうことは普通に考えられます。 PCA|2011-06-01-11:10|goo太郎 PCA|2011-06-02-10:50|goo太郎 この表の主キーは(PC名,ログイン時刻,氏名)です。
- root139
- ベストアンサー率60% (488/809)
正規形の議論をする際には、まず主キーは何になるのかを明確にしないと話が進みません。 質問者さんが考えている、この段階での主キーは何ですか?
- jjon-com
- ベストアンサー率61% (1599/2592)
ホスト名に固有の情報(OS名,プロダクトID,etc)や ユーザー名に固有の情報(最終ログオン日時,所属しているローカルグループ,etc)など, 質問文に提示された以外の属性の存在は考慮する必要はないのですよね。 であるなら,第2正規形にすべき情報がそもそも無いわけですから,これで終わりです。
補足
主キーはマシン名と氏名です。