2

タスク:

現在、データベースは2種類のメッセージを認識しています。

  1. ユーザーが投稿し、誰でも誰でも読むことができるメッセージ
  2. ユーザーが投稿し、非公開のメッセージ。

これらのメッセージは、投稿ユーザーが友達としてマークしたユーザーのみが読むことができます。このステップでは、3番目のタイプのメッセージを追加する必要があります。この3番目のタイプのメッセージは、指定された受信者のみが読み取ることができる必要があります。

これは、データベースが以下を提供する必要があることを意味します。

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

あなたの仕事は、この目的のために必要な変更と追加のテーブル、および必要なキーと外部キーの関係を実装することです。

これがタスクに関連する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

メッセージテーブル

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
4

1 に答える 1

1

わかりました。is_publicを使用すると、2つのタイプを区別できます(たとえば、is_public = '0'はプライベートを意味し、is_public = '1'はパブリックを意味します)。しかし、今では指定されたレシートの新しい概念があるので、yes/noモデルは3つのタイプがあるb/cでは機能しなくなります。通常、この状況では、フラグまたはタイプ列に切り替えることができます。

したがって、「PUBLIC」、「PRIVATE」、「SPECIFIED」などのいずれかであるmessage_type列を作成する可能性があります。

その後、少なくとも2つのテーブルが必要になるようです。ユーザーは友達を指定できる必要があり、ユーザーは特定のメッセージを受信するユーザーを指定できる必要があります。

于 2012-08-07T14:30:22.907 に答える