
お世話になっております。データベースのテーブルの別け方について質問させて下さい。
例えば、会員制のブログサービスを公開するとして、各会員の個人情報を収めるmemberというテーブルを以下のような構成で用意したとします。
(idはURLの一部となるもの)
no id mail pass name blog_title
1 lala ***@***.com 1234 佐藤 私の日記帳
2 tecno **@***.com 5432 石田 明日は何処へ
3 nonno **@***.com 9812 毛利 音楽大好き
上記は、会員の個人情報と併せ、ブログのタイトルなども1レコードで済むことが出来るので、会員情報とブログの情報も登録したケースです。
対して、以下は会員情報とブログ情報を別けた場合です。
memberテーブル
no mail pass name
1 ***@***.com 1234 佐藤
2 **@***.com 5432 石田
3 **@***.com 9812 毛利
blog詳細テーブル(member_noとnoで紐付けている)
no member_no id blog_title
1 1 lala 私の日記帳
2 3 nonno 音楽大好き
3 2 tecno 明日は何処へ
例えばhttp://blog.sample.com/lala/
というURLにアクセスされた場合、1つのテーブルに情報が収められている場合、個人情報が登録されたテーブルに接続しなければなりませんが、ブログ情報だけを別にしたテーブルを設けていると、個人情報が登録されたテーブルには接続しなくても済むかと思います。
ここで質問させて下さい。
以前、1つのレコードで収まるなら、複数のテーブルを用意する必要はないといった意見を聞いたことがあるのですが、上記のような2つのケースの場合、やはり貴重な情報を含まれたテーブルは、極力、接続機会を減らす方が良いのでしょうか?
今日まで、1つのレコードで収まるなら複数のテーブルは用意することなく来ましたが、もしかして、
・2つのテーブルに別けようが、1つが漏洩したら全て漏洩したと同じだ。だから1つにまとめて問題ない。
・貴重なテーブルは接続機会を減らすべきだ。
というような意見があるのでは?と、意見を伺えればと思い、質問させて頂きました。
お忙しいとは思いますが、ご意見のほど宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
一つだけ、絶対にテーブルを分けておかなければいけないパターンがあります。
一人の会員が、二つ以上のブログを持てる場合です。
この場合、memberテーブルと、blog詳細テーブルが一対多の関係となるため、二つのテーブルが必要です。
ブログは、金輪際、一人につき一つだと主張するのであれば、blog詳細テーブルのnoフィールドは不用です。
memberテーブル blog詳細テーブル共に、同じnoを使用することとして、主キーはどちらのテーブルでもnoとなり、結合するフィールドも当然noとなります。
後者の場合において、テーブルを一つにするか二つにするかですが、・・・
もし、セキュリティーを考えてというのが動機であれば、テーブルは一つで良いです。
その代わり、テーブルに対してでは無く、フィールドに対してアクセス権限を設定します。
当然、このようにセキュリティーを強化する場合、ブログを表示するためのプログラムと、会員情報をも扱うプログラムは、別々のIDでデータベースにアクセスすることになります。会員情報を扱うIDにはテーブル全体に対する権限を許可して、ブログを表示するIDには、ブログ情報のフィールドのみにアクセス許可を与えておくわけです。
ブログを扱うプログラムは、どうあがいても、会員情報にアクセスすることは出来ません。
同じIDでデータベースにアクセスするのであれば、テーブルをいくつに分けようが、セキュリティーは強化されません。
さて、不正侵入を考えます。ルートが破られれば、何をどうやっても漏洩の阻止は不可能です。
アクセスするためのIDを分けてあれば、最悪、ブログ情報用のIDに関しては破られても、会員情報へのアクセスは出来ません。漏洩するのは、ブログ情報だけです。会員情報が破られたら、テーブルを分けていようが同じテーブルだろうが一緒のことで、全データが漏洩します。
また、データの保全という意味では、どうせ、データベースが壊れたら、テーブルをいくつに分けていようがデータベース丸ごと壊れますから、一緒のこと。
となると、検討するのは、どちらの方が保守管理が楽になるかです。
もう一つの検討課題は、テーブルを分けると、会員情報全体を集約する時に、テーブルの結合が余計に発生します。
また、テーブルを分けた時には、memberテーブルにある会員にのみ、blog詳細テーブルの情報を作るように、整合性を保証する必要があります。普通は、テーブル定義の時に、参照性制約を定義して保証するのですが、MySQLでは、ファイル形式の選択によって、之が出来るかどうかが変わるところには注意が必要です。
後は、動機と環境によりますね。
シンプルさを考えるなら(当然、保守性はシンプルなのが一番です。)、わたしなら、1テーブルにします。
mitonekoさん
はじめまして。貴重なご意見をありがとうございます。
考えるべきポイント等、とても勉強になりました。
お恥ずかしいことかもしれませんが、これまでアクセス権限など出来ることすら知りませんでした。
今回を機に、色々と調べてみたいと思います。
長文に渡り、詳しい内容の書き込みをありがとうございました。感謝しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【エクセル】データテーブルの...
-
「テーブルに座って……」という...
-
男性と2人で飲食店に行きテーブ...
-
リレーションシップが出来ません。
-
AccessのSQL 部分一致したデー...
-
エクセルで都道府県、市区町村...
-
Access2000 のテーブルの...
-
Excel:テーブルではなく、ただ...
-
mysql alter table 終わらない
-
ACCESS アクセス 最適...
-
Access データベースを分割した...
-
テーブルリンク リンク元を知...
-
外部キーだけのテーブル(主キ...
-
論理名とコメント構文(?)について
-
条件付き書式の数式
-
ExcelからACCESSへ接続するとエ...
-
SQL 外部結合
-
mysqlの掲示板
-
一致するデータのみ削除したい
-
会社の飲み会の幹事になり、座...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「テーブルに座って……」という...
-
AccessのSQL 部分一致したデー...
-
外部キーだけのテーブル(主キ...
-
テーブルリンク リンク元を知...
-
会社の飲み会の幹事になり、座...
-
mysqlのupdate構文についての質...
-
面接のときテーブルが正面に。...
-
L2SWはARPテーブルを持っている?
-
飲み会で、座敷orテーブルどち...
-
下記、問題に対しての解答が以...
-
お金持ちのテーブル
-
【エクセル】データテーブルの...
-
男性と2人で飲食店に行きテーブ...
-
ACCESS テーブルのRENAME
-
アクセスのリンクテーブル一覧...
-
時給の変更に対応する方法
-
論理名とコメント構文(?)について
-
SQLです教えてください。
-
SNMPでスイッチのMACアドレステ...
-
テーブル:生徒名簿 生徒名簿の...
おすすめ情報