• ベストアンサー

データベースのマスタ設計についての質問

現在データベースの設計を勉強しています。 マスタの設計について疑問があって質問しました。 【1】すべてのマスタデータを統合したテーブルを作成 カラム1:カテゴリID(PK) カラム2:カテゴリCD(PK) カラム3:値 【2】それぞれのカテゴリに応じたテーブルを作成 カラム1:カテゴリCD(PK) カラム2:値 ※私はパターン1の方が、カテゴリの追加等柔軟かなと考えています。 それぞれのパターンの長所・短所を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.3

【1】の方式は下記の様なデメリットが考えられますので、非常に柔軟性が必要だったり、よほどテーブル数が多くならない限り、【2】の方式を使いますね。 a. どんな値であっても文字列型で表現するしかなくなり、CHECK句を事細かに設定・更新しない限り不正な形式の値が投入されても分からない。 b. システムの規模大きくなったり運用期間が長くなった際に、マスタに何が格納されているか把握できなくなる危険性がある。 特に b の点については、カテゴリIDが何を表しているのか分からない、どのカテゴリIDが使われていのかいないのか分からない、といったことが実際に何度かありましたね。 そうした際にも、テーブルを分けている場合は、  ・テーブル名などがヒントになる  ・それを参照しているプログラムの箇所もおおむね少なく特定しやすい ので比較的対応しやすいのですが、全てのマスタが統合されていると、  ・ヒントになるようなものも少ない  ・そのマスタはプログラムのあらゆる場所で参照されていて、それらを全て確認する必要が生じる ので苦労することが多いです。 実のところ、長所・短所については下記のページがうまくまとめて有ると思います。 http://gihyo.jp/dev/serial/01/sql_academy2/000301

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

私だったらパターン2でしょうか。 パターン1では値が文字列・数値・日時の区別ができません。 カテゴリIDやカテゴリCDの付番体系にも制限がかかります。 パターン2のデメリットはマスタテーブルが多数になることですね。 ただ、それは実際に使う際にカテゴリIDを指定しないと結合できないので実際の開発やパフォーマンスは同じようなものだと思います。

すると、全ての回答が全文表示されます。
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

実務を仮定して、説明します。 入金先と、支払先に対するマスタを設計するとします。 入金先専用のデータと、支払先専用のデータは、テーブルを別々にします。 入金先専用データの一例としては、締日&入金日 など 支払先専用データの一例としては、締日&支払先 など 入金先・支払先の共通データは、ひとつのテーブルにまとめます。 例えば、システムで使用するメッセージ一覧など。 以上は、目的に応じたテーブル設計です。 他方、更新の頻度を考慮すると、 あまり、ひとつのテーブルにまとめてしまうと、排他制御で、更新できない状況が考えられますので、 安易にひとつのテーブルにまとめるのも問題があります。

すると、全ての回答が全文表示されます。

関連するQ&A