Проектирование базы данных на нескольких региональных рынках с MySQL

Я ищу руководство по структуре базы данных для многорегионального веб-сайта.

Я настраиваю веб-сайт, похожий на craigslist.com, который позволит пользователям публиковать объявления в своем городе. Я использую базу данных MySQL.

Я хочу, чтобы регионы в качестве подпапок были связаны с поддоменами, например, ca.mysite.com переходит на mysite.com/ca.

Мой вопрос заключается в том, как мне управлять базами данных, когда я хочу добавить другой город на свой веб-сайт.

Если я использую разные базы данных для каждого города, то пользователи не смогут войти в другие города, поскольку их данные для входа хранятся в том городе, в котором они зарегистрированы, в таблице пользователей его базы данных.

Это не может быть проблемой, так как контент зависит от города, например, craigslist.
Но если они захотят связаться с пользователями в других городах, они не смогут.

Кроме того, в общем случае будут повторяться имена пользователей и адреса электронной почты, поскольку пользователи могут регистрироваться во всех городах, используя одинаковые адреса электронной почты и имя пользователя.

Если я создаю центральную базу данных, например, с таблицей пользователей и таблицей сообщений, а затем создаю отдельную базу данных для каждого города со всеми «постами» этих городов, то при отображении основной информации мне нужно будет обратиться к базе данных по конкретному городу плюс центральная БД, которая хранит информацию о пользователе.

В качестве альтернативы я мог бы хранить все в одной базе данных и сохранять местоположение вошедшего в систему пользователя в файле cookie, передавать его в переменную сеанса и использовать это местоположение как часть запроса базы данных при отображении результатов поиска и т. Д.

Однако не добавит ли это ненужные накладные расходы к каждому запросу?

например каждый поиск должен иметь ‘AND location = $ user_location’, добавленный в.

Я действительно понятия не имею, что будет лучшим методом здесь.

Заранее спасибо за любую помощь в этом.

0

Решение

Кажется, вы все еще не знаете, какую именно систему вы хотите построить. Перед началом проектирования базы данных для этой системы, пожалуйста, убедитесь, что у вас есть полное описание системных требований. Вот некоторые примеры вопросов, которые помогут вам уточнить:

  • Какие функции предлагает ваш сайт?
  • Какие действия могут выполнять пользователи вашей системы? Есть ли ограничения для каждого действия?

Некоторые другие вопросы, касающиеся производительности системы:
— Сколько пользователей вы ожидаете использовать вашу систему?
— Как быстро и правильно каждое действие должно быть подано? Какие действия используются часто?

Нет смысла проектировать систему без тщательного понимания системных требований.

0

Другие решения

Итак, вот пример дизайна базы данных и как она может соответствовать вашим требованиям.

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

Надеюсь это поможет.

0

По вопросам рекламы [email protected]