webxtor
Новичок
Помогите проавильно организовать структуру БД ресурсоемкого проекта!
Всем привет!
Немного вступления.
Я делаю очень большой проект. База данных будет занимать место около гига. Поэтому все тонкости оптимизации структуры БД и запросов к ней, тут крайне важна! Использую БД MySQL. Мне кажется, этот проект использует абсолютно все технологии и сталкивается со всеми проблемами хранения данных в БД в вебе, поэтому вам будет очень важно прочитать этот топик и попробовать мне помочь
Сайт представляет из себя каталог компаний, их продуктов и торговых предложений (например ищу поставщика такого-то сырья).
Категорий 1,500 штук. Уже организовал их по приниципу вложенных множеств. Все работает классно!
Изучил теорию индексации - скорость работы возросла в несколько раз!
А теперь самое сложное.. то, когда выбор приходится делать из очень похожих друг на друга вариантов.
Итак, суть проблемы.
Нужно хранить 4 типа данных:
1. контактная иформация, логин и пароль компаний
2. профиль компании (для каждого пользователя может быть только один профиль компании)
3. продукты компании
4. торговые предложения компании
Все вопросы я выделю жирным шрифтом. Просьба в ответе написать свое видение организации БД, учитывая, что компаний будут сотни тысяч и соотвественная посещаяемость.
Как хранить контактную информацию (имя, фамилия, телефон, сайт.. всего 10 полей о компаниях:
-в одной таблице, а профиль компании (название, год создания, штат.. всего 20 полей) - в другой? Или все же сделать одну таблицу на 30+ полей?
Хочется разбить эту таблицу на 2, так как на всех страничках касательно этой компании (на всех ее продуктах и торговых предложениях и конечно на ее профиле) внизу будет отображаться контактная информация этой компании.
А может сделать вообще 3 таблицы? В одной храним логин и пароль и время последнего логина, время регестрации и тд, в другой 10 полей контактов а в третей 20 полей профиля компании?
И еще, если скажем появится на сайте возможность создания золотых аккаунтов, для которых количество полей профиля будет увеличино. И обычные пользователи смогут вносить только 10 полей профиля своей компании, а золотые все 20, то в этом случае, как следует быть с таблицами? Сделать 2 таблицы - базовые профили и золотые профили? Или сделать одну таблицу, где у простых пользователей будет всегда 10 пустых полей?
Или сделать одну таблицу на 10 полей, а другую на 20, и при улучшения статуса до золотого, копировать данные данного пользователя в новую таблицу, а из старой удалять?
И еще очень важный момент. Каждое создание профиля/обновление должно проходить через модератора. То есть даже если уже все внесето и посетители сайта просматривают инфу, а владелец компании изменил профиль, то новый профиль должен появится у модератора, а старый все так же висеть на сайте.
Как тут быть? Сделать временную таблицу, из которой постоянно удалять записи при одобрении модератором и перезаписывать информацию в оригинальную? Или в оригинальной таблице сделать еще столько же полей, приписав к названию скажем _temp, но тогда таблица будет иметь 40 полей.. нехорошо вроде как!
Это же касается и продуктов и с тороговыми предложениями. Как там быть с модераторством? Делать временные таблицы или очень большие или сделать пару дополнительных полей, по которым будет ясно, где оригинал, а где ждущая модерирования запись?
И вообще, что лучше, постоянно удалять и записывать или только обновлять (оставлять поля пустыми, кроме ID и company_id)?
Всем, всем всем приооогромной спасибо!!
Всем привет!
Немного вступления.
Я делаю очень большой проект. База данных будет занимать место около гига. Поэтому все тонкости оптимизации структуры БД и запросов к ней, тут крайне важна! Использую БД MySQL. Мне кажется, этот проект использует абсолютно все технологии и сталкивается со всеми проблемами хранения данных в БД в вебе, поэтому вам будет очень важно прочитать этот топик и попробовать мне помочь
Сайт представляет из себя каталог компаний, их продуктов и торговых предложений (например ищу поставщика такого-то сырья).
Категорий 1,500 штук. Уже организовал их по приниципу вложенных множеств. Все работает классно!
Изучил теорию индексации - скорость работы возросла в несколько раз!
А теперь самое сложное.. то, когда выбор приходится делать из очень похожих друг на друга вариантов.
Итак, суть проблемы.
Нужно хранить 4 типа данных:
1. контактная иформация, логин и пароль компаний
2. профиль компании (для каждого пользователя может быть только один профиль компании)
3. продукты компании
4. торговые предложения компании
Все вопросы я выделю жирным шрифтом. Просьба в ответе написать свое видение организации БД, учитывая, что компаний будут сотни тысяч и соотвественная посещаяемость.
Как хранить контактную информацию (имя, фамилия, телефон, сайт.. всего 10 полей о компаниях:
-в одной таблице, а профиль компании (название, год создания, штат.. всего 20 полей) - в другой? Или все же сделать одну таблицу на 30+ полей?
Хочется разбить эту таблицу на 2, так как на всех страничках касательно этой компании (на всех ее продуктах и торговых предложениях и конечно на ее профиле) внизу будет отображаться контактная информация этой компании.
А может сделать вообще 3 таблицы? В одной храним логин и пароль и время последнего логина, время регестрации и тд, в другой 10 полей контактов а в третей 20 полей профиля компании?
И еще, если скажем появится на сайте возможность создания золотых аккаунтов, для которых количество полей профиля будет увеличино. И обычные пользователи смогут вносить только 10 полей профиля своей компании, а золотые все 20, то в этом случае, как следует быть с таблицами? Сделать 2 таблицы - базовые профили и золотые профили? Или сделать одну таблицу, где у простых пользователей будет всегда 10 пустых полей?
Или сделать одну таблицу на 10 полей, а другую на 20, и при улучшения статуса до золотого, копировать данные данного пользователя в новую таблицу, а из старой удалять?
И еще очень важный момент. Каждое создание профиля/обновление должно проходить через модератора. То есть даже если уже все внесето и посетители сайта просматривают инфу, а владелец компании изменил профиль, то новый профиль должен появится у модератора, а старый все так же висеть на сайте.
Как тут быть? Сделать временную таблицу, из которой постоянно удалять записи при одобрении модератором и перезаписывать информацию в оригинальную? Или в оригинальной таблице сделать еще столько же полей, приписав к названию скажем _temp, но тогда таблица будет иметь 40 полей.. нехорошо вроде как!
Это же касается и продуктов и с тороговыми предложениями. Как там быть с модераторством? Делать временные таблицы или очень большие или сделать пару дополнительных полей, по которым будет ясно, где оригинал, а где ждущая модерирования запись?
И вообще, что лучше, постоянно удалять и записывать или только обновлять (оставлять поля пустыми, кроме ID и company_id)?
Всем, всем всем приооогромной спасибо!!