形勢
說我有以下幾點:MySQL數據庫的設計問題
- 表
items
- 表
lists
到這些項目可以鏈接 - 表
users
條件:列表可以屬於全部或一個具體用戶
我想要做的是創建「全局」列表,永遠用戶存在。但應該有一種可能性,即用特定用戶「覆蓋」這個全局列表。例如,對於一個隨機的用戶:
- 全局列表稱爲書
- 用戶特定列表CDS
現在檢索列出了該用戶時,我應該得到雙方的全球書籍列表和用戶特定的CD列表。但是,如果這個用戶有特定的書目列表呢?
- 一個名爲書
- 用戶特定列表書
- 用戶特定列表CDS
所以現在全局列表,應該檢索用戶特定列表調用書籍,而不是全球列表,當然還有用戶特定的CD列表。
可能的解決方案
最簡單的事情將是這樣的:
table: lists - id - name - userId
如果用戶id IS NULL
那就意味着它是一個全球性的列表,但是當它的NOT NULL
它屬於一個特定的用戶。因此,第一個例子是對用戶id = 1:
id name userId 1 books NULL 2 cds 1
要檢索列出了該用戶:
SELECT * FROM lists WHERE userId = 1 OR userId IS NULL
但後來我被堵在接下來的部分:
id name userId 1 books NULL 2 cds 1 3 books 1
這裏的第一個「書籍」列表是全球性的,但這個用戶也有一個用戶特定的列表「書籍」。在這種情況下,可以忽略全局列表,只返回用戶特定的列表?
另一種可能性是創建一個lists_users
表,將所有用戶鏈接到所有全局列表,並且每當使用與這些全局列表相同的名稱創建用戶特定列表時,刪除此鏈接。雖然這看起來效率不高,並且在添加新用戶時需要進行更多的工作。
問題:
什麼是數據庫中設置此最好和最有效的方式,讓我可以輕鬆地獲取正確的列出了一個特定的用戶?