在數據庫網站上提到這個問題,但它似乎很慢。所以我一般都是SQL和數據庫的新手,我使用過的SQL數據庫唯一使用的是一對多關係。我想知道在我的數據庫中爲用戶實現「最愛」機制的最簡單方法 - 類似於Youtube等網站的負載情況。用戶當然是獨一無二的,因此一個用戶可以擁有很多收藏夾,但是一個用戶也可以被很多用戶收藏。這被認爲是多對多的關係嗎?這樣做的典型設計模式是什麼?多對多的關係看起來像一個頭痛的問題(我使用SQLAlchemy,所以我的表與相似的對象交互),但這似乎是一個相當常見的網站功能,所以我想知道什麼是最直接簡單的方法去做。謝謝用戶收藏夾的SQL數據庫設計模式?
1
A
回答
0
我從來沒有見過任何明確的數據庫設計模式(除了幾年前它成爲時尚的時候,'設計模式'這個短語的一些瑣碎的濫用)。 M:M關係正常:使用鏈接表(又名關聯表等)等等。你的用戶和喜歡的例子確實聽起來像M:M。
create table LinkTable
(
Id int IDENTITY(1, 1), -- PK of this table
IdOfTable1 int, -- PK of table 1
IdOfTable2 int -- PK of table 2
)
...並在(IdOfTable1,IdOfTable2)上創建一個UNIQUE索引。或者取消Id列並使PF開啓(IdOfTable1,IdOfTable2)。
4
是的,這是一種經典的多對多關係。通常情況下,對付它的方法是創建一個鏈接表,所以說,T-SQL你必須......
create table user
(
user_id int identity primary key,
-- other user columns
)
create table item
(
item_id int identity primary key,
-- other item columns
)
create table userfavoriteitem
(
user_id int foreign key references user(user_id),
item_id int foreign key references item(item_id),
-- other information about favoriting you want to capture
)
要看看誰收藏的東西,所有你需要做的就是運行查詢userfavoriteitem
表格,該表格現在將成爲關於哪些項目受歡迎以及誰喜歡他們的各種有用統計數據的數據庫。
select ufi.item_id,
from userfavoriteitem ufi
where ufi.user_id = [id]
或者你甚至可以使用下面的查詢,但如果你有大量的用戶,這將得到緩慢得到您的網站上最受歡迎的項目,其結果應保存在一個特殊的表被更新每隔一段時間安排在後臺工作...
select top 10 ufi.item_id, count(ufi.item_id),
from userfavoriteitem ufi
where ufi.item_id = [id]
GROUP BY ufi.item_id
相關問題
- 1. SQL數據庫模式設計
- 2. 設計數據庫模式
- 3. 計劃的數據庫模式設計
- 4. 數據/數據庫設計模式?
- 5. SAX數據收集設計模式
- 6. 用戶數據的數據庫設計
- 7. 用戶帳戶的數據庫設計
- 8. 簡單的SQL Server 2008數據庫的數據庫模式設計
- 9. 用戶收藏夾 - ActiveRecord :: AssociationTypeMismatch
- 10. 保存用戶收藏夾
- 11. 收藏項目的數據庫模型。
- 12. 建模收藏夾
- 13. 回收數據數據庫設計
- 14. 用戶歷史記錄和用戶保存的數據庫模式設計
- 15. 工資表數據庫模式設計
- 16. MongoDB數據庫模式設計
- 17. 設計數據庫模式(MySQL)
- 18. MVC模式和數據庫設計
- 19. 在mysql中設計數據庫模式
- 20. 數據庫訪問設計模式
- 21. 設計文檔數據庫模式
- 22. 數據庫模式設計選項
- 23. 如何設計數據庫模式?
- 24. 設計SQL Server數據庫
- 25. 數據庫設計SQL Server
- 26. 數據庫設計SQL
- 27. 設計SQL數據庫
- 28. SQL數據庫設計
- 29. 帳戶數據庫設計
- 30. 設計SQL模式創建和升級數據庫