我是一名軟件開發人員。我喜歡編碼,但我討厭數據庫...目前,我正在創建一個網站,允許用戶將實體標記為喜歡(如FB),標記和評論。我被困在數據庫表設計上來處理這個功能。解決方案是微不足道的,如果我們只能為一種類型的東西(例如照片)做到這一點。但我需要為5種不同的東西啟用它(現在,但我也假設隨著整個服務的增長,這個數字會增長)。我在這里發現了一些類似的問題,但沒有一個問題得到滿意的答案,所以我再次提出這個問題。問題是,如何正確,高效和彈性地設計數據庫,以便它可以存儲不同表的注釋,喜歡不同的表和標簽。一些設計模式作為答案將是最好的;)詳細描述:我有一個表 User與一些用戶數據,以及3個表:Photo用照片,Articles用文章,Places用的地方。我想啟用任何已登錄的用戶:評論這3個表中的任何一個將其中任何一個標記為喜歡使用某個標記標記其中任何一個我還想計算每個元素的喜歡次數以及使用特定標記的次數。 1 日的做法:a)對于標簽,我將創建一個表 Tag [TagId, tagName, tagCounter],然后我會創造很多一對多的關系表為:Photo_has_tags,Place_has_tag,Article_has_tag。b)同樣重要的評論。三)我將創建一個表 LikedPhotos [idUser, idPhoto],LikedArticles[idUser, idArticle],LikedPlace [idUser, idPlace]。喜歡的數量將通過查詢計算(我認為這是壞的)。和...我真的不喜歡這個設計的最后一部分,它對我來說很難聞;)2 次的方法:我將創建一個表ElementType [idType, TypeName == some table name],該表將由管理員(我)填充,其中包含可以被喜歡,評論或標記的表的名稱。然后我將創建表:a)LikedElement [idLike, idUser, idElementType, idLikedElement]和注釋和標簽相同,每個都有適當的列。現在,當我想拍照時,我會插入:typeId = SELECT id FROM ElementType WHERE TypeName == 'Photo'INSERT (user id, typeId, photoId)和地方:typeId = SELECT id FROM ElementType WHERE TypeName == 'Place'INSERT (user id, typeId, placeId)......等等......我認為第二種方法更好,但我覺得這個設計中也缺少一些東西......最后,我還想知道哪個最好的地方存放計數器元素被喜歡多少次。我只能想到兩種方式:在element(Photo/Article/Place)表中通過select count()。我希望我對這個問題的解釋現在更徹底。
在數據庫中實現評論和喜歡
繁星淼淼
2019-09-18 11:09:02