2012-03-11 32 views
0

我需要做一個MySQL數據庫結構滯留在數據庫結構

我提出,我會是具有用戶和卡通人物爲兩個主要實體

用戶可以像許多網站一個小的幫助卡通人物和卡通人物可以被n個用戶喜歡。

我的疑問是,在用戶表中會出現一個名爲卡通領域,這將舉行一個卡通人物ID,但如果用戶喜歡的字符,然後我怎麼保存呢?

這是我的第一個數據庫結構,所以請大家幫我

回答

1

最常見的方法是使用單獨的關係表,即

create table users_cartoons (user_id int, cartoon_id int) 

和存儲所有用戶和漫畫有關係。

+0

但是這樣會讓該表確實很重,像如果用戶A喜歡米奇,用戶B喜歡唐納德和用戶C喜歡米奇那麼這樣米奇或任何其他字符將被重複,並且將一個長長的清單。 這是一個好方法嗎? – Nick 2012-03-11 12:15:32

+0

@Nick:恰恰相反,就已用空間而言,這是最輕的結構。是的,字符會重複 - 但在您的結構中,它們將不可避免地被重複使用,並且單獨的表格是存儲這種關係的最輕的方式 - 只需確保您存儲了ID(唯一的整數值),而不是用戶和角色的名稱。 – 2012-03-11 12:19:23

+0

好吧,告訴我這將是這當中最好的解決辦法: - 與卡通人物的1000+表的數據庫 或 了10桌,但與行的重複一長串一個表的數據庫。 – Nick 2012-03-11 12:23:04

1

您需要三個表:一個用戶表,卡通表,和UsersCartoons表。

用戶擁有所有用戶(ID,用戶名等)。漫畫有所有的漫畫(每個漫畫的ID,以及任何其他屬性,你想存儲)。

然後UsersCartoons表具有USER_ID字段和cartoon_id字段。您可以根據需要添加任意數量的行,因此每個卡通可以被n個用戶所喜歡,反之亦然。

+0

@Nick,我沒有名聲上的螺紋下面謝爾蓋發表評論,但,要回答你的問題,一個關係表(如UserCartoons)會比一個單獨的快出於幾個原因,每張卡通的桌子。 首先,如果你想獲得用戶喜歡的每一個卡通呢?如果每張卡通都有自己的桌子,則必須將許多表格的結果組合在一起,這非常緩慢。其次,MySQL可以在不包含重複項的場景之後製作索引,因此每次都不會搜索每一行。 – Ethan 2012-03-11 12:29:14

1

這是我可能使用的結構的簡化版本。

我發現維護描述數據的表格的數據庫更好,而不是像user_cartoon這樣的表達式,這通常是非常模糊的表示。

`user` 
+-------+---------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+-------+---------+------+-----+---------+----------------+ 
| id | int(11) | NO | PRI | NULL | auto_increment | 
+-------+---------+------+-----+---------+----------------+ 

`cartoon_character` 
user_id denotes the creator or owner 
+---------+---------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+---------+---------+------+-----+---------+----------------+ 
| id  | int(11) | NO | PRI | NULL | auto_increment | 
| user_id | int(11) | NO |  | NULL |    | 
+---------+---------+------+-----+---------+----------------+ 

`cartoon_character_like` 
+----------------------+---------+------+-----+---------+-------+ 
| Field    | Type | Null | Key | Default | Extra | 
+----------------------+---------+------+-----+---------+-------+ 
| cartoon_character_id | int(11) | NO | PRI | NULL |  | 
| user_id    | int(11) | NO | PRI | NULL |  | 
+----------------------+---------+------+-----+---------+-------+