web開發之收藏功能資料庫設計
很多web專案中都會涉及到收藏功能的設計,用於使用者儲存自己喜歡的文字,圖片,連結,多媒體等資訊,這篇文章主要講解的是如何設計多模組話網站的收藏功能的資料庫。
假設做一個類似於新浪微博的社交網路系統,我們要實現一個收藏微博的功能,我們或許需要設計如下收藏表 pre_collect_feed
collect_id,collect_user,collect_feed,collect_time;
主鍵id,收藏使用者,收藏的專案,收藏的時間;
現在因為使用者需求,我們還要實現一個收藏照片的功能,我們或許需要設計如下收藏表pre_collect_photo
collect_id,collect_user,collect_photo,collect_time;
主鍵id,收藏使用者,收藏的專案,收藏的時間;
現在因為使用者需求,我們還要實現一個收藏活動的功能,我們或許需要設計如下收藏表pre_collect_event
collect_id,collect_user,collect_event,collect_time;
主鍵id,收藏使用者,收藏的專案,收藏的時間;
現在因為使用者需求,我們還要實現一個收藏話題的功能,我們或許需要設計如下收藏表pre_collect_topic
collect_id,collect_user,collect_topic,collect_time;
主鍵id,收藏使用者,收藏的專案,收藏的時間;
。
。
。
隨著專案的增大,我們需要設計收藏的條目越來越多,這時候就要找一種設計方法整合上面的各類收藏表。
解決方案:
首先,我們清楚的是,使用者收藏的東西都對應了資料庫表中的一條記錄,而且這條記錄在對應的表中是唯一的,所以,在收藏表中,只儲存收藏條目在對應表中的主鍵是不行的,因為不同的表中的主鍵的值存放到一張收藏表中,這個值是可能一樣的,比如使用者發表的一條微博在微博表裡面的主鍵是1,使用者釋出的一張圖片在圖片表裡面的主鍵也是1,假設使用者同時收藏了這條微博和這張照片,那麼裡面收藏的條目的id都是1的話,就沒辦法區分開來。如下所示:collect_id,collect_user,collect_item,collect_time
1,1,1,141414142
2,1,1,141414146
所以,可以在上面的表結構上在增加個欄位,用來記錄收藏專案所在的表名稱,甚至加上專案的模組名,如下所示
collect_id,collect_user,collect_module,collect_table,collect_row,collect_time
1,1,feed,pre_feed,1,141414142
2,1,photo,pre_photo,1,141414146
完!