2012-08-13 60 views
0

我必須執行以下任務: 任務: 目前,該數據庫識別兩種類型的消息:MySQL的執行表到數據庫

-Messages,用戶的帖子,並且是公開的,任何人,每個人都到閱讀 - 用戶發佈並且非公開的消息。這些消息只能由發佈用戶標記爲朋友的用戶閱讀。

在這一步中,您應該添加第三種類型的消息。該第三種類型的消息只能由指定的收件人閱讀。 這意味着數據庫需要提供以下內容: - 一種區分三種消息類型的方法。這涉及對消息表的更改。 - 一種指定特定消息的收件人是誰的方法。這可能需要額外的表格。

所有這些都必須以最少的存儲空間來實現,也就是說,您必須從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 =公共,2 =私人,3 =特定)&'message_level'(其中它將聲明公共,私人和具體級別旁邊的)。然後,我可以使用'Message_level'作爲'Message'表中的外鍵,並將'is_public'列替換爲'message_level_id'。

我對這個問題的處理方法正確嗎?有另一種方法可以做到這一點,使其更有效率嗎?

以及我將如何處理指定誰是特定郵件的收件人的第二項任務?

回答

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) 
+0

讓sense..Thanks您的幫助! – 2012-08-14 00:46:13