指定用户可以读取的 SQL 消息

  • 本文关键字:SQL 消息 读取 用户 sql
  • 更新时间 :
  • 英文 :


任务:

目前,数据库知道两种类型的消息:

  1. 用户发布且公开供任何人阅读的消息
  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

好的,所以is_public让你能够区分两种类型(例如is_public = '0' 表示私有,is_public = '1' 表示公共)。 但是现在您有指定收据的新概念,因此是/否模型将不再起作用,b/c 您有 3 种类型。 通常在这种情况下,您可以切换到标志或类型列。

因此,也许可以创建一个message_type列,它是"公共","私人","指定"或类似的东西之一。

在那之后,听起来你至少还需要两张桌子。 用户必须能够指定好友,并且用户必须能够指定接收特定消息的用户。

最新更新