Я создаю веб-страницу, где пользователи смогут создавать учетные записи, и у каждой учетной записи будет свой собственный поддомен.Таким образом, могут быть URL-адреса, подобные этим:
www.user1.domain.com
www.user2.domain.com
...
У них тоже будут свои страницы, например:
www.user1.domain.com/url-1/
www.user1.domain.com/url-2/
www.user2.domain.com/url-3/
...
Поэтому мне нужно хранить account_url и page_url в базе данных.
Я сделал это так, у меня есть таблицы пользователей, учетных записей и страниц.
Вот так выглядят мои таблицы:
ПОЛЬЗОВАТЕЛИ:
user_id PK
user_name
user_pass
...
СЧЕТА:
account_id PK
user_id FK
account_url
account_name
account_type
...
СТРАНИЦЫ:
page_id PK
user_id FK
page_url
page_name
page_content
...
Теперь проблема заключается в следующем, так как я получаю URL, как это:
www.user1.domain.com/page-url/
Единственная информация, которую яможет извлечь из URL-адреса account_url и page_url, поскольку в URL-адресе диспетчер / маршрутизатор получает эти две переменные.account_url - это поддомен, а page_url - это сегмент за доменом.
Поскольку будет несколько пользователей, мне всегда нужно получать этот user_id, чтобы я мог обновлять / удалять строки, принадлежащие им.Поэтому мне нужно обновить page_content, где user_id принадлежит этому пользователю, а page_url - это URL-адрес.
Но у меня нет user_id.И когда я хочу обновить page_url_content, сначала мне нужно найти user_id, например:
SELECT user_id FROM accounts WHERE account_url = something
А потом, когда у меня есть user_id, я могу обновить содержимое страницы или выполнить любое другое действие.
Так это хороший дизайн?Это нормализовано и чисто, но когда я использую это в каждом действии внутри контроллера, мне нужно сначала получить user_id, чтобы иметь возможность выполнить реальный запрос, который я хотел.
Теперь я мог бы использовать account_url для Primary Key, ивсе таблицы относятся к этому первичному ключу.Поэтому, когда я получаю URL-адрес, я уже знаю первичный ключ, поскольку он указан в URL-адресе.
Это хороший случай, чтобы использовать первичный ключ в URL-адресе, или я что-то делаю не так?