Я ищу руководство по структуре базы данных для многорегионального веб-сайта.
Я настраиваю веб-сайт, похожий на craigslist.com, который позволит пользователям публиковать объявления в своем городе. Я использую базу данных MySQL.
Я хочу, чтобы регионы в качестве подпапок были связаны с поддоменами, например, ca.mysite.com переходит на mysite.com/ca.
Мой вопрос заключается в том, как мне управлять базами данных, когда я хочу добавить другой город на свой веб-сайт.
Если я использую разные базы данных для каждого города, то пользователи не смогут войти в другие города, поскольку их данные для входа хранятся в том городе, в котором они зарегистрированы, в таблице пользователей его базы данных.
Это не может быть проблемой, так как контент зависит от города, например, craigslist.
Но если они захотят связаться с пользователями в других городах, они не смогут.
Кроме того, в общем случае будут повторяться имена пользователей и адреса электронной почты, поскольку пользователи могут регистрироваться во всех городах, используя одинаковые адреса электронной почты и имя пользователя.
Если я создаю центральную базу данных, например, с таблицей пользователей и таблицей сообщений, а затем создаю отдельную базу данных для каждого города со всеми «постами» этих городов, то при отображении основной информации мне нужно будет обратиться к базе данных по конкретному городу плюс центральная БД, которая хранит информацию о пользователе.
В качестве альтернативы я мог бы хранить все в одной базе данных и сохранять местоположение вошедшего в систему пользователя в файле cookie, передавать его в переменную сеанса и использовать это местоположение как часть запроса базы данных при отображении результатов поиска и т. Д.
Однако не добавит ли это ненужные накладные расходы к каждому запросу?
например каждый поиск должен иметь ‘AND location = $ user_location’, добавленный в.
Я действительно понятия не имею, что будет лучшим методом здесь.
Заранее спасибо за любую помощь в этом.
Кажется, вы все еще не знаете, какую именно систему вы хотите построить. Перед началом проектирования базы данных для этой системы, пожалуйста, убедитесь, что у вас есть полное описание системных требований. Вот некоторые примеры вопросов, которые помогут вам уточнить:
Некоторые другие вопросы, касающиеся производительности системы:
— Сколько пользователей вы ожидаете использовать вашу систему?
— Как быстро и правильно каждое действие должно быть подано? Какие действия используются часто?
Нет смысла проектировать систему без тщательного понимания системных требований.
Итак, вот пример дизайна базы данных и как она может соответствовать вашим требованиям.
Cities(cityid, cname)
Users(userid, fname, lname, cityid, currcityid)
Messages(mid, senderid, receiverid, content)
Adverts(aid, title, content, userid, cityid)
Когда пользователь меняет город, обновите currcityid
поле в своем ряду в Users
Таблица.
Когда пользователь размещает рекламу в городе, вставьте новую строку в Adverts
Таблица. userid
а также cityid
новой строки — идентификаторы соответствующего пользователя и города.
Когда пользователь отправляет сообщение другому пользователю в системе, добавьте строку в Messages
Таблица. senderid
и receiverid
новой строки — идентификаторы соответствующих пользователей.
Запросить все объявления в городе: SELECT * FROM Adverts WHERE cityid = $cityid
Запросить все объявления пользователя: SELECT * FROM Adverts WHERE userid = $userid
Запросить все объявления пользователя в определенном городе: SELECT * FROM Adverts WHERE cityid = $cityid AND userid = $userid
Надеюсь это поможет.