0

以下のタスクを実装する必要があります: タスク: 現在、データベースは 2 種類のメッセージを認識しています。

  • ユーザーが投稿し、誰でも読める公開メッセージ
  • ユーザーが投稿した非公開のメッセージ。これらのメッセージは、投稿ユーザーが友達としてマークしたユーザーのみが読むことができます。

このステップでは、3 番目のタイプのメッセージを追加する必要があります。この 3 番目のタイプのメッセージは、指定された受信者だけが読むことができます。これは、データベースが以下を提供する必要があることを意味します。

  • 3 種類のメッセージを区別する方法。これには、メッセージ テーブルへの変更が含まれます。
  • 特定のメッセージの受信者を指定する方法。これにはおそらく追加のテーブルが必要になります。

これもすべて、最小限のストレージで実現する必要があります。つまり、MySQL マニュアルから適切なデータ型を選択する必要があります。時間の経過とともに追加されるメッセージの総数は、1,000,000,000 に達する可能性があると想定できます。あなたの仕事は、この目的のために必要な変更と追加のテーブル、および必要なキーと外部キーの関係を実装することです。

これが最初の2つのテーブルです: ユーザー

CREATE TABLE IF NOT EXISTS `User` (
`user_id` int(10) unsigned NOT NULL auto_increment,
`given_name` varchar(60) default NULL,
`surname` varchar(60) default NULL,
`address` varchar(255) default NULL,
`city_id` int(10) unsigned NOT NULL,
`date_of_birth` datetime default NULL,
`email` varchar(80) default NULL,
PRIMARY KEY (`user_id`),
KEY `ix_user_surname` (`surname`),
KEY `ix_user_given_name` (`given_name`),
KEY `ix_user_name` (`given_name`,`surname`),
KEY `ix_user_date_of_birth` (`date_of_birth`),
KEY `ix_user_email` (`email`),
KEY `ix_user_city_id` (`city_id`)
) ENGINE=InnoDB

2番目の表:メッセージ

CREATE TABLE IF NOT EXISTS `Message` (
`message_id` int(10) unsigned NOT NULL auto_increment,
`owner_id` int(10) unsigned default NULL,
`subject` varchar(255) default NULL,
`body` text,
`posted` datetime default NULL,
`is_public` tinyint(4) default '0',
PRIMARY KEY (`message_id`),
KEY `ix_message_owner_id` (`owner_id`)
) ENGINE=InnoDB

私の解決策:「Message_level」という新しいテーブルを作成し、列「message_level_id」(1、2、3を1 =パブリック、2 =プライベート、3 =特定として参照)と「message_level」(レベルの横に public、private、および specific と表示されます)。次に、「Message_level」を「Message」テーブルへの外部キーとして使用し、「is_public」列を「message_level_id」に置き換えることができます。

この質問に対する私のアプローチは正しいですか?より効率的にするためにこれを行うことができる別の方法はありますか?

また、特定のメッセージの受信者を指定するという 2 番目のタスクにどのようにアプローチすればよいでしょうか?

4

1 に答える 1

1

私はこのように行きます:

User: user_id, given_name, ...

Message: message_id, owner_id (fk User), subject, body, posted, message_type_id (fk Message_type)...

Message_recipients: user_id (fk User), message_id (fk Message)

Message_type: message_type_id, description (1:public, 2:friends, 3:specific_recipients)
于 2012-08-13T23:58:45.847 に答える