
[家族IDテーブル]
(家族ID, 家族名)
kaz001, 佐々木家
kaz002, 黒川家
kaz003, 岡本家
[個人IDテーブル]
(個人ID, 個人名)
koj001, kaz001, 拓也
koj002, kaz001, 啓太
koj003, kaz002, 直樹
[アクセスログ] (個人単位でアクセス数を引いたり家族単位で引いたりもする)
日付け、アクセス回数、家族、個人
?それとも
日付け、アクセス回数、個人
リレーショナルテーブルについて勉強しています。
[家族IDテーブル]と[個人IDテーブル]が有り、[アクセスログ]というテーブルを作る場合に、そのフィールドは
日付け、アクセス回数、個人
よりも
日付け、アクセス回数、家族、個人
の方が(家族単位で引く場合)高速に結果を得られると思います。
しかし、個人が分かれば家族も分かるので、前者でも使えはしますが、遅いと思うのです。
リレーショナルテーブルは、リレーショナルでないものと比べて品質が高いものだと思いますが、後者のようにしてリレーショナルでないものにして高速化するのはよい方法ですか?
No.1ベストアンサー
- 回答日時:
RDBでデータを一元化しなさいと言われる理由は、データを一箇所にまとめて置くと、更新する時に一つのテーブルだけ書き換えれば済むので、システムの障害が発生しにくくなるからです。
例えば、定期的に変更がある会社の部署情報の場合、部署マスタを独立させておけば、部署名が変わっても部署マスタだけ書き換えればよいことになります。
次に質問にあるように、アクセスログに個人ID以外に家族IDも記録する方法ですが、データウェアハウスのDBを構築する際によく使う手法です。
データウェアハウスの場合、普通のDBと違って書き換えが少ないので、わざとテーブルを非正規化して、検索が高速になるように設計します。
データの変更が頻繁に発生する基幹システムではお勧めできませんが、検索が主な用途の場合は、決して悪い方法ではありません。
> 部署マスタだけ書き換え
テーブルが以下のようなら、[部署テーブル]の「開発部」を「開発担当部」に変更するだけでシステム全体に適用されるということですね。
[部署テーブル]
(部署id, 部署名)
b001, システム部
b002, 営業部
> 非正規化して、検索が高速
> 悪い方法ではありません
RDBではない方がよい場合もあるということですね。
ありがとうございます。
No.2
- 回答日時:
> の方が(家族単位で引く場合)高速に結果を得られると思います。
データを閲覧する場合だけなら、おおむねその通りです。
ただし、データベースとして設計するのなら、データを変更、削除する場合には?って事も考慮する必要があります。
> おおむね
たとえば、「岡本家」を「岡元家」に変更するなら、後者の
日付け、アクセス回数、家族、個人
のだと2つのテーブルを変更するので遅くなりますね。
もしかしたら、[アクセスログ] の "家族" というフィールドの各レコートの値を[家族IDテーブル] の "家族名" と同期させるようなテーブル作成の方法があるかもしれません。
> 変更、削除する場合には?
例の場合では、との程度のUPDATEがあるかや、レコード数によって、前者がよいか後者がよいか決まるものですよね?
仕様をしっかり理解しても、前者、後者のどちらがよいかを決めるには、速度のテストをするか経験による知識が必要ですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
Accessの構成をコピーしたい
-
既存データをINSERT文にして出...
-
ADO+ODBCでテーブルに接続する...
-
DB2のSQLコマンドについて
-
ExcelのVLOOKUP関数の動作をMyS...
-
ExcelのMatch関数のようなもの...
-
あってますか?SQL
-
SQLです!!教えてください。あ...
-
H2 DataBaseご存知の方教えて...
-
SQLサーバに対するSQL文で抽出...
-
結合したテーブルをSUMしたい
-
複数のテーブルからデータを取...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
フラグをたてるってどういうこ...
-
PostgreSQLのtimestamp型で時間...
-
ACCESS テキストボックスに入...
-
Excel VBAのユーザーフォームで...
-
timestampのデータはどのように...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLサーバに対するSQL文で抽出...
-
既存データをINSERT文にして出...
-
SQLで、Join句で結合したテ...
-
Accessの構成をコピーしたい
-
結合したテーブルをSUMしたい
-
副問合せを使わずにUNIONと同様...
-
テーブル名が可変の場合のクエ...
-
2つのテーブルをLIKE演算子のよ...
-
ExcelのMatch関数のようなもの...
-
改行を含んだデータのインポート
-
PRIMARY KEYのコピー
-
ADO+ODBCでテーブルに接続する...
-
ACCESSのVBAにてExcelに行...
-
同一テーブル内での比較(最新...
-
(SQL)日数の計算
-
ExcelのVLOOKUP関数の動作をMyS...
-
データ無し時は空白行にしたい...
-
必要なテーブルの個数について。
-
複数選択か?単数選択か? テ...
おすすめ情報