Ситуация
Скажем, у меня есть следующие:MySQL базы данных дизайн вопрос
- столика
items
- стол
lists
, к которым эти элементы могут быть связаны - таблица
users
Условие: список может принадлежать все или один конкретный пользователь
Что я хотел бы сделать, так это создать «глобальные» списки, которые существуют навсегда. Но должна быть возможность «перезаписать» этот глобальный список пользовательской. Пример для случайного пользователя:
- глобальный список называется книги
- конкретного пользователя список CDs
Теперь при получении списков для этого пользователя я должен получить как глобальные списков книг и списка конкретных пользователей. Но что, если у этого пользователя есть определенный список книг?
- глобальный список называется книги
- конкретного пользователя список книги
- конкретного пользователя список CDs
Так что теперь он должен извлечь USER- конкретный список, называемый книгами, а не глобальный список и, конечно же, список учетных записей для конкретного пользователя.
Возможные решения
Легче всего было бы что-то вроде этого:
table: lists - id - name - userId
Если идента IS NULL
это означало бы, что это глобальный список, но когда это NOT NULL
принадлежит конкретному пользователю. Таким образом, первый пример будет для USERID = 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
, связав всех пользователей со всеми глобальными списками и удалив эту ссылку всякий раз, когда создается конкретный список пользователей с тем же именем, что и один из этих глобальных списков. Это, однако, не очень эффективно, и многое другое нужно поддерживать при добавлении новых пользователей.
Вопрос:
Какой самый лучший и самый эффективный способ установить это в базе данных, так что я могу легко получить правильные списки для конкретного пользователя?