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

时间:2012-08-07 11:01:52

标签: sql

任务:

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

  1. 用户发布的消息以及任何人和所有人都可以阅读的消息
  2. 用户发布且非公开的消息。
  3. 这些消息只能由发布用户标记为好友的用户读取。 在此步骤中,您应添加第三种类型的消息。第三种类型的消息只能由指定的收件人读取。

    这意味着数据库需要提供以下内容:

    • 区分三种消息的方法。这涉及对Message表的更改。
    • 指定特定邮件的收件人的方式。这可能需要额外的表格。

    您的工作是为此目的实施必要的更改和附加表以及任何密钥和外键 需要的关系。

    这里有两个与任务相关的现有表格(来自我的数据库的副本)。

    用户表

    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
    

1 个答案:

答案 0 :(得分:1)

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

所以也许制作一个message_type列,它是'PUBLIC','PRIVATE','SPECIFIED'之类的东西。

之后听起来你需要至少两张桌子。用户必须能够指定朋友,用户必须能够指定用户接收特定消息。