Проэктирование базы - Пользователь - Страна - Город

Сенсей

Новичок
Проэктирование базы - Пользователь - Страна - Город

Хочется совета. Праивльно ли у меня реализована эта чатсь базы

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

Как сделано сейчас:

1. $country_array = array('1' => 'Россия'); - пример массива со странами (около 16ти стран)
2. Города - в базе. Привязаны по country_id к $country_array[$country_id]
3. В таблице юзеров есть поля - born_country_id и born_city_id

Плюсы такого подхода (имхо):

1. Не надо делать лишний запрос (и/или соединение таблиц) для получения СТРАНЫ
Мысли: так как стран не много - выгоднее держать массив чем лезть в базу
2. При выводе информации о пользователе (например на страничке пользователя) берем born_country_id и born_city_id и сразу же с $country_array[$country_id] берем СТРАНУ и по born_city_id соединяемся с таблице городов и берем назвнаие города
Мысли: никаких лишний запросов
3. В итоге нет лишней нагрузки от такой маленькой функции на сайте как город и страна
---

Есть сомнения насчет использования массива со списком стран. + Есть второе "Я" которое говорит мне что нужно было делать отдельную таблицу связи юзер -> город_id

Исходить нужно из того что проэкт расчитывается на 50K зареганых юзеров и минимум 200K просмотров страниц в день.
Просто пытаюсь исправить ошибки которые допустил в уже работащем популярном проэкте.
 

Alexandre

PHPПенсионер
чем запросов к БД меньше, тем лучше
чем запросы быстрее, тем лучше
лишнее поле в 4 байта много место, даже при нескольких миллионов записей - не отнимет
делай выводы.
 

Balloon

Новичок
а вот у меня возникли сомнения по поводу поля born_country_id...
сомнения такого плана:
- при запросе идет таблица с пользователями соединяется с таблицей городов
- в таблице городов есть поле country_id, которое определяет ид страны.
вопрос: зачем дублировать поле country_id в двух таблицах...
зы. ситуация называется избыточность :)
 
Сверху