2

グループがメンバーテーブルを共有する必要がありますが、メッセージ、設定、出席などの他のデータ用に独自のテーブルが必要になるphp mysqlデータベースを作成する設計段階にあります。

1 つのデータベースにすべてのテーブルを作成し、それぞれに group_id を与えて、そのグループでフィルタリングし、そのデータのみを表示できるようにできると考えていました。これにはセキュリティ上の問題があり、データベースが大きくなる可能性があります。

私が考えていたもう1つの方法は、group_idを持つメンバーテーブルを持つデータベースを1つ作成し、グループごとに個別のデータベースを作成することでした。これは視覚化が難しく、クエリを正しくするのが難しくなります。

私の質問は、これを行うためのより良い方法はありますか、それともこれら2つのいずれかですか?もしそうなら、魔女の1つをお勧めしますか?

4

2 に答える 2

1

セキュリティの問題はプログラマーの責任であり、データベースの責任ではありません。

データベースは大きくなるものです。通常、ボトルネックは貧弱な php コードか、貧弱なリソース処理による HTTP ペイロードのバグにあります [キャッシュなし、無駄なリクエスト、不適切なマークアップ]。

適切に設計されたテーブルを使用して、1 つのデータベースに固執するだけです。

于 2012-09-29T14:54:53.803 に答える
0

グループがメッセージを含む独自のテーブルを持つのはなぜですか? それは非常に非効率的です。

あなたが説明している構造は、1:n または 1 対多の関係と呼ばれます。

メッセージが属するグループを指すフィールドを使用して、メッセージ テーブルを作成するだけです。

CREATE TABLE `Groups` (
  `GroupId` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(64) NOT NULL,
  PRIMARY KEY (`GroupId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `Messages` (
  `MessageId` int(11) NOT NULL AUTO_INCREMENT,
  `GroupId` int(11) NOT NULL,
  `Message` text NOT NULL,
  PRIMARY KEY (`MessageId`),
  KEY `FK_Group` (`GroupId`),
  CONSTRAINT `FK_GroupMessage` FOREIGN KEY (`GroupId`) REFERENCES `Groups` (`GroupId`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
于 2012-09-29T14:57:17.217 に答える