2009-12-06 190 views
1

那麼我需要在自定義編碼的社交網站上實現評論功能。這些評論需要在各種頁面上實現,比如視頻,圖片,相冊等,與Facebook類似。評論的實施,是否有任何最佳做法?

執行此操作的最佳實踐是什麼?

製作一個這樣的字段的全球評論表,並根據需求頁面上的評論類型抓取評論。

commentid int(10) 
userid int(10) 
comment_type ENUM('video','picture') 
comment varchat(200) 
parent int(10) 

或爲每個評論製作單獨的表格?

回答

5

我不會這樣做。我會在另一邊使用子類型。

  • 創建一個名爲(例如)Content的父表;
  • 視頻,圖片,相冊等是內容的子實體;
  • 評論有一個Content ID的外鍵。

有用於實現子類型三個基本方案:

  1. 創建每個亞型一個單獨的表;
  2. 使用Conent ID的外鍵創建名爲Content的子表,其中包含從屬表Video,Album等。內容表格還有一個內容類型字段來表明哪個表與該記錄相關;或
  3. 將所有內容放入名爲Content的表格中,該表格包含一組可選(空)列以覆蓋子類型。當存儲子類型特定信息所需的列幾乎沒有差異時,這是最合適的。

如果您將註釋關聯到視頻或相冊的表格,您可以使用所謂的專有的圓弧。這不是數據建模的推薦做法。

編輯:例如:

  • 用戶(ID,用戶名,名,姓,電子郵件地址)
  • 內容(ID,CONTENT_TYPE,submitter_id,submitted_date);
  • 圖片(id,url,height,width);
  • 視頻(id,url,格式,高度,寬度,長度);
  • 相簿(id,name);
  • 專輯照片(id,album_id,photo_id);
  • 評論(id,author_id,comment_date,comment,content_id);

一些注意事項:

  • submitter_id和AUTHOR_ID是外鍵User.id;
  • Image.id,Video.id和Album.id都是內容的外鍵。ID;
  • Content.content_type是「Image」,「Video」或「Album」之一;
  • 一個相冊包含一個或多個存儲在Image中的照片;
  • 連接表專輯照片將相冊鏈接到圖像(多對多關係);

希望清除它。

+1

這是第一範式的做法。好帖子! – 2009-12-06 04:50:07

+0

如果我們省略「相冊照片」並添加像image.albumid這樣的默認爲用戶默認相冊ID的字段,會發生什麼情況? – 2009-12-06 04:51:13

+0

在圖像中放入相冊ID會將該圖像限制爲僅在一個相冊中。那是你要的嗎? – cletus 2009-12-06 04:52:07