0

私が行っているプロジェクトでは、ユーザーが作成したディスカッションに複数の「壁」を使用しています。

私の質問は、これをMySQLデータベースでどのようにモデル化する必要があるかに関するものです。

誰が作成したかなどの情報を含む「walls」という1つのテーブルと、メッセージがどこに属するかを区別するための「wall_id」列を持つ各メッセージを含む「messages」という別のテーブルが機能しますか?

また、「messages」テーブルは、インデックス作成の主キーとしてwall_idを使用する必要がありますか?または、重複した番号がプライマリキーイングに役立たないのですか?

私はデータベースを「正しい方法」でモデリングすることに比較的慣れていません。データの効率と操作のしやすさを向上させるために、提案や確かな助けをいただければ幸いです。

4

5 に答える 5

1

主キーについてあなたが言ったことを除いて、あなたのアプローチは確かに正しい道です。主キーは一意である必要があります。主キーとして複数のフィールドを持つことができますが、キー自体は一意である必要があります。

したがって、次のテーブルがあります。

CREATE TABLE `wall` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` INT(10) UNSIGNED NOT NULL,
  `name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `user` (`user_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

CREATE TABLE `user` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

CREATE TABLE `message` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `wall_id` INT(10) UNSIGNED NOT NULL,
  `user_id` INT(10) UNSIGNED NOT NULL,
  `message` TEXT NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `wall` (`wall_id`),
  INDEX `user` (`user_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

user次に、テーブルをuser_idwallに関連付けますwall_id

于 2012-08-29T13:13:56.993 に答える
0

「Wall」という名前のテーブルを作成し、wall_idを主キーとして内破するだけです。

create table wall(wall_id int ,primary key(wall_id));

次に、wall_idのforiegnキーを使用して「メッセージ」テーブルを作成します。

create table message(mes_belong_id int,primary key(mes_belong_id),wall_id int,foreign   key(wall_id) references wall(wall_id));

次に、必要な同じウォールIDで各メッセージを保存すると、メッセージに自動的に保存されます。メッセージを取得する場合は、wall_idを使用します。これで完了です。

于 2012-08-29T13:13:07.737 に答える
0

基本的にテーブルを正規化します

Users
User_id  Name  otherFields

Category
Category_id  Cat_name

Walls
Wall_id  User_id Cat_name

Messages
Message_id User_id Wall_id Message

基本的なことは

シナリオ1したがって、user_idに基づいてすべての特定のユーザーのすべての壁を表示し、メッセージに参加します

シナリオ2category_idに基づいて特定のカテゴリのすべての壁を表示するには

あなたが必要とする他のものに基づいてこれを拡張することができます。

于 2012-08-29T13:13:55.233 に答える
0

説明したように、壁用とメッセージ用の2​​つのテーブルを使用します。壁の主キーは、自動インクリメントされた整数です。メッセージの場合も、主キーとして自動インクリメントされた整数を使用しますが、外部キーとして壁IDも持つ必要があります。

私は最近、そのように機能するWordPress掲示板プラグインを作成しました。各掲示板は、ページに埋め込まれています。ページはすでにWordPressによって設定されているため、掲示板テーブルを追加するだけで、それぞれに独自の主キーがありますが、WordPressページIDは外部キーとも呼ばれます。

データベース設計に関するまともな本を手に入れるか、いくつかの記事を読むことを検討することをお勧めします-それはあなたに終わりがないのを助けます。私は「データベースのマンガガイド」を使用しましたが、それは少々厄介でしたが、リレーショナルデータベースの構築方法について頭を悩ませるのに本当に役立ちました。他の多くの人もこのテーマに関する良い本や記事を推薦できると確信しています。

于 2012-08-29T13:15:37.590 に答える
0

シナリオを1つずつ分解してみましょう:

  1. 最初に、主キーとしてuser_idを持つuserテーブルが必要です。
  2. 次に、壁のテーブルが必要です。すべての壁は1人のユーザーにのみ属しているため、主キーはwall_idになり、外部キーはuserテーブルのuser_idになります。user_idは、このテーブルの一意のキーにもなります。
  3. その場合、メッセージテーブルが必要になります。message_idの主キーフィールドとともにメッセージを保存します。
  4. 最後に、どのメッセージがどのテーブルに属しているかという情報を格納するためのmessage_wallテーブルが必要になります。ここで、message_id、wall_idは外部キー複合主キーになります。

お役に立てば幸いです。

于 2012-08-29T13:17:21.470 に答える