ここから本文です

リレーショナルDBのテーブル設計について 今までファイルでデータを管理するソ...

mi_********さん

2019/2/419:56:51

リレーショナルDBのテーブル設計について

今までファイルでデータを管理するソフトを作ったことはあるのですが、初めて本格的にリレーショナルデータベースを使用してみようと思っています。

SQLについては概ね理解できたと思いますし、テーブルの結合なども基本的なことは理解しました。ただ、やはりテーブルの設計のコツなり「定石」なりを、もう少し学んだ方が良いかなという感じです。

つまり
・検索性の良いテーブルの作り方
・データ変更への柔軟性の高いテーブルの作り方
・上手なテーブルの分け方
などと言ったテーブル設計のコツについて、もう少し理解できればと思います。
何か、そういうテーブル設計について学べる本などでお勧めを教えてください。

補足ありがとうございます。
色々疑問はあるのですが、例えば、複数ユーザーの書籍の感想DBを作る(かつ他ユーザーの感想は絶対に参照しない)なら、ファイルであれば絶対ユーザー毎にファイルを分け、
・ISBN
・感想
的なテーブルをユーザー毎に作ると思うんです。

けどDBなら、「ユーザー毎にテーブルを分け、ユーザー追加時には動的にテーブル追加」なんてやらないですよね。
普通は
・ユーザーID
・ISBN
・感想
的なテーブルにして、ユーザーIDで検索して表示するはず。
けど、それって毎回無駄に検索を走らせるような気がして…
他ユーザーIDの行は絶対に参照しないのに、そんな行を含むテーブルを作るのが正しいのか…

という感じで、やはりファイル管理の時とは設計の基本思想が違う気がするのです。

閲覧数:
31
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nora1962jpさん

編集あり2019/2/423:46:50

書籍なら

リレーショナルデータベース入門―データモデル・SQL・管理システム・NoSQL (Information & Computing) https://www.amazon.co.jp/dp/4781913903/ref=cm_sw_r_cp_taa_TfcwCbXRV...

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ https://www.amazon.co.jp/dp/4798124702/ref=cm_sw_r_cp_taa_UgcwCbKKA...

あたりがおすすめ。

> 上手なテーブルの分け方

まず何を対象にしているか明確にしてください。
その上でどう使いたいのか
「氏名」「住所」などの分け方、分けるならその必要性とか

> データ変更への柔軟性の高いテーブルの作り方

リレーショナルデータベースなら正規化、正規形について。
正規化の目的としては更新異常が起きないということも大きいので
加えると自然キーとサロゲートキーの使い分け
主キーが更新された時の影響範囲は小さくありません。

> 検索性の良いテーブルの作り方

場合によっては正規化した結果テーブルの結合コストが高くつく場合もあります。
そこはあまり定石はないかもしれません。
第一正規形は満たして欲しいですが、導出項目に対する検索が多い場合などは勘案する必要があるでしょう。
更新がされないDWHなどなら意図的に正規化崩す場合もあります。

テーブル設計いい加減にすると後で苦しむことになるので気をつけたほうがいいですよ。

  • nora1962jpさん

    2019/2/500:26:38

    > 普通は
    > ・ユーザーID
    > ・ISBN
    > ・感想
    > 的なテーブルにして、ユーザーIDで検索して表示するはず。
    > けど、それって毎回無駄に検索を走らせるような気がして…
    > 他ユーザーIDの行は絶対に参照しないのに、そんな行を含むテーブルを作るのが正しいのか…

    確かに
    書籍( 書籍ID(PK), ISBN, 書籍名 )
    ユーザー( ユーザーID(PK), ユーザー名 )
    感想( 書籍ID, ユーザーID, 感想 )

    とかでまず設計しますね。

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/2/11 06:10:28

お二人ともアドバイスありがとうございました。
とりあえず、「達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ」を買ってみました。
懸念している点については、インデックスの設定でどこまでできるか頑張ってみます。挑戦の手前で案じてばかりいても仕方ないので(笑)

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

原沢信道さん

2019/2/420:25:42

それほど難しく考える必要はありません。基本的にはファイルの設計と同じで、1ファイルが1テーブルです。一応リレーショナルデータベースの正規形は沢山の種類が有りますが、元々データの構造は2次元の表で表せるような単純な構造をしてはいないので、正規化と言っても正しい構造にする訳では無いので、沢山の正規形が有る訳です。なので、実際にシステムを作りながら、問題が出た時点で問題の出ない構造に修正をしながらシステムを完成させるしか無いです。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる