http://www.techscore.com/tech/sql/16_02.html
のサイトを参考に正規化の仕方を勉強しています。
そこで質問なのですが、上のURLの一番最後の実習課題の問題の第一正規化からつまずいています。
図書館貸し出しカードにて、
固定部分が
(発行日、貸出日、返却予定日、会員番号、会員名)
繰り返し部分が
(書籍番号、書籍名、著書)
なので、
とりあえず1つヘッダ的な表は
(発行日、貸出日、返却予定日、会員番号、会員名)
として、分離する表の主キーは何にすべきなのか迷います。
(発行日、書籍番号、書籍名、著書)
として主キーは(発行日、書籍番号)とすべきか
(会員番号、書籍番号、書籍名、著書)
として主キーは(発行日、書籍番号)とすべきか
(発行日、会員番号、書籍番号、書籍名、著書)
として主キーを(発行日、会員番号、書籍番号)とするのかです。
どれも間違っているかもしれませんが、固定ヘッダ部分の表と繰り返し部分の表を結びつける属性が「発行日」だけじゃ同じ発行日で借りる人はたくさんいるだろうし、、でも「会員番号」だけじゃ他の日に発行した本の情報はどうなってしまうのだろうかとか、色々考えてしまって困惑しています^^;
どなたかお助けください。
No.1ベストアンサー
- 回答日時:
固定部分は質問者さんのおっしゃるとおり、
(発行日、貸出日、返却予定日、会員番号、会員名)で
主キーは(発行日、会員番号)で良いのではないでしょうか。
繰返し部分はおっしゃるとおり
(書籍番号、書籍名、著者)ですが、
固定部分の主キーを埋め込んであげないと、固定部分と繰返し部分の関係がわからなくなってしまいます。
(埋め込んであげないと「関係データベース」の意味が無くなる)
よって繰返し部分は
(発行日、会員番号、書籍番号、書籍名、著者)とし、
主キーは(発行日、会員番号、書籍番号)
となるのではないでしょうか。
ありがとうございます。
やはり、固定部分と繰り返し部分は1対1で対応していなくてはいけないのですね。
それともう1つ疑問に思ったことなのですが、この貸し出しカードでは一日にもう一度発行することが出来ると仮定すると、繰り返し部分にタプルを付け足せばいいということになるんですよね?^^;
No.2
- 回答日時:
貸出カードの意味をよく考えてみましょう。
このカードの項目をよく見ると、1枚のカードで2回以上の貸し出しができないことがわかります。
つまり、1回の貸し出しにつきカードを1枚作成しそこにその回の貸し出し記録を列挙する、という業務が見えてきます。
#しかし資源を無駄遣いしてるなこの図書館
そこで、何日に誰が借りたかがわかれば貸し出し作業の特定ができるため、
発行日、貸出日、返却予定日のいずれか
および
会員番号
を繰り返し部分のテーブルに追加し、上の2つ+書籍番号を主キーにすれば、「上の2つ」の部分で固定部分が特定できますし、DB全体で第一正規形になります。
この主キーがしっかりしていれば、ほかの項目を繰り返し部分に追加しても第一正規形は崩れません。…が、当然第二正規形以上にはなりません。
ありがとうございます。
ご指摘いただいた通り固定部分との連結という基本的な事項を確認していませんでした^^;
追加で質問いいでしょうか。まず
*************************************
第一正規形が、(以下、主キーがA,Bの場合は【A、B】と表します)
(発行日、貸出日、返却予定日、会員番号、会員名)
【発行日、会員番号】
(発行日、会員番号、書籍番号、書籍名、著者)
【発行日、会員番号、書籍番号】
****************************************
第二正規形
a(発行日、会員番号)【発行日、会員番号】
b(発行日、貸出日、返却予定日)【発行日】
c(会員番号、会員名)【会員番号】
d(発行日、会員番号、書籍番号)【発行日、会員番号、書籍番号】
e(書籍番号、書籍名、著者)【書籍番号】
*****************************************
第三正規形
bについて発行日→貸出日、貸出日→返却日 という推移関数従属がなりたつから
(発行日、貸出日) 【発行日】
(貸出日、返却日) 【貸出日】
に分解。
eも推移関数従属性があるから
(書籍番号、書籍名) 【書籍番号】
(書籍名、著者) 【書籍名】
と分解
*****************************************
ボイスコッド正規形
dについて、同じ本が2冊以上あったとしても書籍番号が異なるとするならば、書籍番号→会員番号 という関係が成り立たなくも無い気がするので
(発行日、会員番号) 【発行日、会員番号】
(会員番号、書籍番号) 【書籍】
と分解できる。
*****************************************
以上でいいでしょうか^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 相続・譲渡・売却 登記済みの家屋を増改築した家屋が変更登録されてない場合の相続登記申請等について 4 2023/08/26 10:07
- その他(税金) 適確請求書発行者登録番号を登録するか悩んでます。 今UberEATSの配達員をやっています。 10月 2 2023/06/06 19:09
- 飛行機・空港 7月に沖縄に行くのですが航空券の予約を私ではなく、 一緒に行く人が予約してくれました。 LINEでエ 3 2022/06/28 12:24
- 政治 日本のマイカードはあまりに遅すぎです 7 2023/04/02 18:36
- 電子書籍 PDFの電子書籍化 3 2022/12/31 16:27
- Visual Basic(VBA) エクセルVBA 2 2022/04/27 13:29
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- 教育・学術・研究 実験レポートの 大学名 と 学籍番号など についてこれは 一番最後に 書くべきものなのでしょうか 2 2022/05/29 18:05
- 個人事業主・自営業・フリーランス インボイス制度は、クライアントごとに請求書を分ける事はできますか? 6 2023/04/03 14:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのフォームで思った順番...
-
Accessの追加クエリの方法(重...
-
コンピュータ
-
エクセルでリピート率
-
2つのテーブルを結合して最大値...
-
ACCESSのテーブル設計と...
-
商品番号を入力すると、商品名...
-
正規化の問題
-
ACCESSでフォーム上のオブジェ...
-
LEFT JOIN あいまいな外部結合
-
accessクエリの結果の縦横表示...
-
各伝票に対して明細を1行目だけ...
-
文字列のあるキーワードから開...
-
差し込み後、元データを変更し...
-
SELECT 文 GROUP での1件目を...
-
エクセルで最後の文字だけ置き...
-
1、Rstudioで回帰直線を求める...
-
INSERT文でフィールドの1つだ...
-
処理件数を非表示にしたい
-
for whichの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
商品番号を入力すると、商品名...
-
2つのテーブルを結合して最大値...
-
コンピュータ
-
Accessのフォームで思った順番...
-
特定条件での連番の振り方を教...
-
各伝票に対して明細を1行目だけ...
-
LEFT JOIN あいまいな外部結合
-
orace SQL文のエラー(ORA-0092...
-
IDの欠番
-
updateでグループ化
-
ACCESSでフォーム上のオブジェ...
-
エクセルでリピート率
-
Word差し込み印刷 数式について
-
文字列のあるキーワードから開...
-
Accessレポート 複数条件での集計
-
アクセスのフォームで連動した...
-
ファイルメーカーpro6で
-
アクセス メインフォームの伝...
-
SQL文:ある状態の明細のみを抽...
-
Access 会員番号4桁にする方法
おすすめ情報