我必须执行以下任务: 任务: 目前,数据库知道两种类型的消息:
在此步骤中,您应添加第三种类型的消息。第三种类型的消息只能由指定的收件人读取。 这意味着数据库需要提供以下内容:
所有这些必须以最少的存储量再次实现,即您必须从MySQL手册中选择适当的数据类型。您可以假设随着时间的推移添加的邮件总数可能达到1,000,000,000。 您的工作是为此目的实施必要的更改和附加表以及所需的任何密钥和外键关系。
首先是我的两个表:用户
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
我的解决方案:我正在考虑创建一个名为'Message_level'的新表,并且列'message_level_id'(将1,2,3称为1 = public,2 = private,3 = specific)& 'message_level'(它将声明公共,私有和特定的级别)。然后我可以将'Message_level'用作'Message'表中的外键,并将'is_public'列替换为'message_level_id'。
我对这个问题的处理方法是否正确?还有另一种方法可以让它更有效率吗?
我将如何处理指定特定邮件的收件人是谁的第二项任务?
答案 0 :(得分: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)