- ベストアンサー
リレーショナルな設計で高速化する方法は?
- リレーショナルテーブルについて勉強しています。[家族IDテーブル]と[個人IDテーブル]が有り、[アクセスログ]というテーブルを作る場合に、日付け、アクセス回数、家族、個人のフィールドを設けると高速に結果を得られます。ただし、リレーショナルテーブルは品質が高いため、リレーショナルでないものにして高速化する方法は良い方法ですか?
- リレーショナルテーブルについて勉強していますが、[家族IDテーブル]と[個人IDテーブル]がある場合、[アクセスログ]テーブルを作成する際に、日付け、アクセス回数、家族、個人のフィールドを設けると高速に結果を得られます。しかしながら、個人が分かれば家族も分かるため、前者でも使うことができますが、遅くなる可能性があります。リレーショナルテーブルは品質が高いとされますが、リレーショナルでないものにして高速化することは良い方法ですか?
- リレーショナルテーブルについて勉強していますが、[家族IDテーブル]と[個人IDテーブル]がある場合、[アクセスログ]テーブルを作成する際には、日付け、アクセス回数、家族、個人のフィールドを設けることで、より高速に結果を得ることができます。ただし、リレーショナルテーブルは品質が高いとされるため、リレーショナルでないものにして高速化する方法は適しているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
RDBでデータを一元化しなさいと言われる理由は、データを一箇所にまとめて置くと、更新する時に一つのテーブルだけ書き換えれば済むので、システムの障害が発生しにくくなるからです。 例えば、定期的に変更がある会社の部署情報の場合、部署マスタを独立させておけば、部署名が変わっても部署マスタだけ書き換えればよいことになります。 次に質問にあるように、アクセスログに個人ID以外に家族IDも記録する方法ですが、データウェアハウスのDBを構築する際によく使う手法です。 データウェアハウスの場合、普通のDBと違って書き換えが少ないので、わざとテーブルを非正規化して、検索が高速になるように設計します。 データの変更が頻繁に発生する基幹システムではお勧めできませんが、検索が主な用途の場合は、決して悪い方法ではありません。
その他の回答 (1)
- neKo_deux
- ベストアンサー率44% (5541/12319)
> の方が(家族単位で引く場合)高速に結果を得られると思います。 データを閲覧する場合だけなら、おおむねその通りです。 ただし、データベースとして設計するのなら、データを変更、削除する場合には?って事も考慮する必要があります。
お礼
> おおむね たとえば、「岡本家」を「岡元家」に変更するなら、後者の 日付け、アクセス回数、家族、個人 のだと2つのテーブルを変更するので遅くなりますね。 もしかしたら、[アクセスログ] の "家族" というフィールドの各レコートの値を[家族IDテーブル] の "家族名" と同期させるようなテーブル作成の方法があるかもしれません。 > 変更、削除する場合には? 例の場合では、との程度のUPDATEがあるかや、レコード数によって、前者がよいか後者がよいか決まるものですよね? 仕様をしっかり理解しても、前者、後者のどちらがよいかを決めるには、速度のテストをするか経験による知識が必要ですね。
お礼
> 部署マスタだけ書き換え テーブルが以下のようなら、[部署テーブル]の「開発部」を「開発担当部」に変更するだけでシステム全体に適用されるということですね。 [部署テーブル] (部署id, 部署名) b001, システム部 b002, 営業部 > 非正規化して、検索が高速 > 悪い方法ではありません RDBではない方がよい場合もあるということですね。 ありがとうございます。