[家族IDテーブル]
(家族ID, 家族名)
kaz001, 佐々木家
kaz002, 黒川家
kaz003, 岡本家
[個人IDテーブル]
(個人ID, 個人名)
koj001, kaz001, 拓也
koj002, kaz001, 啓太
koj003, kaz002, 直樹
[アクセスログ] (個人単位でアクセス数を引いたり家族単位で引いたりもする)
日付け、アクセス回数、家族、個人
?それとも
日付け、アクセス回数、個人
リレーショナルテーブルについて勉強しています。
[家族IDテーブル]と[個人IDテーブル]が有り、[アクセスログ]というテーブルを作る場合に、そのフィールドは
日付け、アクセス回数、個人
よりも
日付け、アクセス回数、家族、個人
の方が(家族単位で引く場合)高速に結果を得られると思います。
しかし、個人が分かれば家族も分かるので、前者でも使えはしますが、遅いと思うのです。
リレーショナルテーブルは、リレーショナルでないものと比べて品質が高いものだと思いますが、後者のようにしてリレーショナルでないものにして高速化するのはよい方法ですか?
No.2
- 回答日時:
> の方が(家族単位で引く場合)高速に結果を得られると思います。
データを閲覧する場合だけなら、おおむねその通りです。
ただし、データベースとして設計するのなら、データを変更、削除する場合には?って事も考慮する必要があります。
> おおむね
たとえば、「岡本家」を「岡元家」に変更するなら、後者の
日付け、アクセス回数、家族、個人
のだと2つのテーブルを変更するので遅くなりますね。
もしかしたら、[アクセスログ] の "家族" というフィールドの各レコートの値を[家族IDテーブル] の "家族名" と同期させるようなテーブル作成の方法があるかもしれません。
> 変更、削除する場合には?
例の場合では、との程度のUPDATEがあるかや、レコード数によって、前者がよいか後者がよいか決まるものですよね?
仕様をしっかり理解しても、前者、後者のどちらがよいかを決めるには、速度のテストをするか経験による知識が必要ですね。
No.1ベストアンサー
- 回答日時:
RDBでデータを一元化しなさいと言われる理由は、データを一箇所にまとめて置くと、更新する時に一つのテーブルだけ書き換えれば済むので、システムの障害が発生しにくくなるからです。
例えば、定期的に変更がある会社の部署情報の場合、部署マスタを独立させておけば、部署名が変わっても部署マスタだけ書き換えればよいことになります。
次に質問にあるように、アクセスログに個人ID以外に家族IDも記録する方法ですが、データウェアハウスのDBを構築する際によく使う手法です。
データウェアハウスの場合、普通のDBと違って書き換えが少ないので、わざとテーブルを非正規化して、検索が高速になるように設計します。
データの変更が頻繁に発生する基幹システムではお勧めできませんが、検索が主な用途の場合は、決して悪い方法ではありません。
> 部署マスタだけ書き換え
テーブルが以下のようなら、[部署テーブル]の「開発部」を「開発担当部」に変更するだけでシステム全体に適用されるということですね。
[部署テーブル]
(部署id, 部署名)
b001, システム部
b002, 営業部
> 非正規化して、検索が高速
> 悪い方法ではありません
RDBではない方がよい場合もあるということですね。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- その他(IT・Webサービス) dアカウント、ログイン等で通知等は来る? 4 2022/10/13 20:06
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- 政治 左翼が分裂。ウクライナ批判を始めた 2 2022/11/27 17:46
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- 社会学 個人主義と、山上容疑者が起こした銃撃事件 5 2022/07/12 00:16
- 健康保険 高額療養費制度の所得区分は個人単位ですか?家族単位ですか? 私(夫)は自営業で所得が低く非課税です。 5 2023/08/24 11:18
- 父親・母親 連休に実家に帰省する時は、地元の友達とは会えないですか? 友達と会ったら親から「せっかく実家に帰った 5 2023/01/02 11:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
下記の問合せを行うクエリを、 ...
-
【SQL】他テーブルに含まれる値...
-
既存データをINSERT文にして出...
-
結合したテーブルをSUMしたい
-
SQLで、Join句で結合したテ...
-
テーブル名が可変の場合のクエ...
-
改行を含んだデータのインポート
-
2つのテーブルをLIKE演算子のよ...
-
Accessの構成をコピーしたい
-
ExcelのMatch関数のようなもの...
-
パススルークエリ&ACCESSテーブ...
-
(SQL)日数の計算
-
「都道府県の面積の大きい順に...
-
データ無し時は空白行にしたい...
-
テーブルデータの上書きをした...
-
追加クエリとパラメータのクリ...
-
グループごとの一番小さい値を...
-
ADO+ODBCでテーブルに接続する...
-
一つの項目に2つのデータが含...
-
複数のテーブルからデータを取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
テーブル名が可変の場合のクエ...
-
結合したテーブルをSUMしたい
-
既存データをINSERT文にして出...
-
SQLで、Join句で結合したテ...
-
データ無し時は空白行にしたい...
-
Accessの構成をコピーしたい
-
ACCESSのVBAにてExcelに行...
-
2つのテーブルをLIKE演算子のよ...
-
SQLサーバに対するSQL文で抽出...
-
ExcelのVLOOKUP関数の動作をMyS...
-
PRIMARY KEYのコピー
-
同一テーブル内での比較(最新...
-
ExcelのMatch関数のようなもの...
-
ADO+ODBCでテーブルに接続する...
-
Access 別のDBに対してDlookup...
-
改行を含んだデータのインポート
-
複数のテーブルからデータを取...
-
ACCESS クエリーでソートの不具合
-
副問合せを使わずにUNIONと同様...
おすすめ情報