• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テーブルを別ける判断要素をお聞かせ下さい)

テーブルを別ける判断要素とは?

このQ&Aのポイント
  • データベースのテーブルを別ける判断要素とは何でしょうか?会員情報とブログ情報を別々のテーブルに分けるかどうかは、情報の安全性やデータの関連性などを考慮して判断する必要があります。
  • 1つのレコードで収まる場合でも、貴重な情報を含むテーブルは接続機会を減らす方が良いとされています。しかし、複数のテーブルに分けた場合、1つのテーブルが漏洩した場合は他のテーブルも漏洩する可能性があるため、適切なセキュリティ対策が必要です。
  • また、会員情報とブログ情報を分けることで、データの冗長性を減らし、データの一貫性を保つことができます。さらに、データの運用や管理を効率化することもできます。

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

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 一つだけ、絶対にテーブルを分けておかなければいけないパターンがあります。  一人の会員が、二つ以上のブログを持てる場合です。  この場合、memberテーブルと、blog詳細テーブルが一対多の関係となるため、二つのテーブルが必要です。  ブログは、金輪際、一人につき一つだと主張するのであれば、blog詳細テーブルのnoフィールドは不用です。  memberテーブル blog詳細テーブル共に、同じnoを使用することとして、主キーはどちらのテーブルでもnoとなり、結合するフィールドも当然noとなります。  後者の場合において、テーブルを一つにするか二つにするかですが、・・・  もし、セキュリティーを考えてというのが動機であれば、テーブルは一つで良いです。  その代わり、テーブルに対してでは無く、フィールドに対してアクセス権限を設定します。  当然、このようにセキュリティーを強化する場合、ブログを表示するためのプログラムと、会員情報をも扱うプログラムは、別々のIDでデータベースにアクセスすることになります。会員情報を扱うIDにはテーブル全体に対する権限を許可して、ブログを表示するIDには、ブログ情報のフィールドのみにアクセス許可を与えておくわけです。  ブログを扱うプログラムは、どうあがいても、会員情報にアクセスすることは出来ません。  同じIDでデータベースにアクセスするのであれば、テーブルをいくつに分けようが、セキュリティーは強化されません。  さて、不正侵入を考えます。ルートが破られれば、何をどうやっても漏洩の阻止は不可能です。  アクセスするためのIDを分けてあれば、最悪、ブログ情報用のIDに関しては破られても、会員情報へのアクセスは出来ません。漏洩するのは、ブログ情報だけです。会員情報が破られたら、テーブルを分けていようが同じテーブルだろうが一緒のことで、全データが漏洩します。  また、データの保全という意味では、どうせ、データベースが壊れたら、テーブルをいくつに分けていようがデータベース丸ごと壊れますから、一緒のこと。   となると、検討するのは、どちらの方が保守管理が楽になるかです。  もう一つの検討課題は、テーブルを分けると、会員情報全体を集約する時に、テーブルの結合が余計に発生します。  また、テーブルを分けた時には、memberテーブルにある会員にのみ、blog詳細テーブルの情報を作るように、整合性を保証する必要があります。普通は、テーブル定義の時に、参照性制約を定義して保証するのですが、MySQLでは、ファイル形式の選択によって、之が出来るかどうかが変わるところには注意が必要です。  後は、動機と環境によりますね。  シンプルさを考えるなら(当然、保守性はシンプルなのが一番です。)、わたしなら、1テーブルにします。

a4_chapp
質問者

お礼

mitonekoさん はじめまして。貴重なご意見をありがとうございます。 考えるべきポイント等、とても勉強になりました。 お恥ずかしいことかもしれませんが、これまでアクセス権限など出来ることすら知りませんでした。 今回を機に、色々と調べてみたいと思います。 長文に渡り、詳しい内容の書き込みをありがとうございました。感謝しています。

関連するQ&A