2014-11-05 5 views
0

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

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

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

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

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

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

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

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

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

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

например. в каждом поиске должно быть добавлено значение «AND location = $ user_location».

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

Заранее благодарим за помощь.

ответ

0

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

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

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

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

+0

Спасибо, Hieu. Я не хотел перечислять все, потому что вопрос уже довольно длинный. Я просто хотел какое-то направление, используя пример реального мира, такой как craigslist, или меньший пример, который пользователь stackoverflow может иметь опыт построения. Основные функции сайта: размещение объявлений (включая текст и до 8 изображений) , В любой момент я ожидаю около 10 000 активных рекламных объявлений в каждом городе. Каждый пользователь может обмениваться сообщениями с помощью простой внутренней системы обмена сообщениями (все обрабатываются в таблице «сообщения»). Они также могут размещать рекламу. Это главный удар. Ключевым моментом является мультигород. – Aidan

+0

Если вы используете MySQL, которая является реляционной базой данных, я предлагаю использовать одну таблицу для пользователей (назовем ее «Пользователи»), одну таблицу для городов (Города), одну таблицу для объявлений (Объявления) и одну таблицу для сообщений (Сообщения). Решение выше, основываясь на моем понимании того, что пользователь принадлежит только одному городу, но он может свободно переключаться между городами и сообщениями в любом городе, который он хочет. Кроме того, пользователи могут отправлять сообщения без установления дружбы. –

+0

Да, это основная настройка, конечно, но то, что я прошу, есть, что такое NORM для создания сайтов с несколькими регионами (городами), такими как craigslist? Будет ли поиск через 100 000 объявлений (когда у меня есть 10 городов на один бит), а не 10 000 объявлений (когда есть 10 городов и 10 отдельных dbs), лучше, и если да, то как я могу поддерживать связь между сайтами в отношении к таблице пользователей? – Aidan

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

Итак, как Craigslist, например, организует различные города в каждом месте? Я бы подумал, что это сложнее. – Aidan

+0

Конечно, дизайн Craiglist сложнее, потому что он предлагает множество функций. Это всего лишь образец дизайна, и этого достаточно для вашего требования. Чем больше у вас требований, тем более тонкий дизайн у вас может быть. –