Я не думаю, что проблема нормализации здесь, вы, вероятно, с таблицей категорий пользователей и таблицы и таблицей (-ами) для размещения ваших объявлений (да, я знаю, что, вероятно, для этого приложения будут еще несколько таблиц, но не будем усложнять).
Рекламный стол - интересная деталь: у вас есть выбор из двух с половиной.
- 1) один стол, чтобы держать их всех: одну таблицу, которая имеет все поля, необходимые для всех категорий
- Pro: легко настроить
- Pro: просты в обслуживании (только одна таблица для резервного копирования, для изменения и т. д.)
- pro: очень простой SQL, который упрощает разработку интерфейса
- жулик: не очень хорошо масштабируется
- жулик: отходов некоторого пространства, которое будет замедлять базу данных в долгосрочной перспективе (в зависимости от структуры базы данных и таблиц, хотя)
- 2) одна таблица в категории
- про: весы лучше, чем (1)
- жулик: очень сложный SQL
- жулик: кошмар для поддержания: вместо одной таблицы вы должны изменить, возможно, 100s
так что вы видите, вариант (2) является на самом деле не вариант, даже если он масштабируется лучше. Если вы планируете большую систему, примерно такой же эффект может быть достигнут при кластеризации таблицы по категориям.
Я должен вам половину варианта: если вы не связаны с mysql, postgresql может предложить интересную альтернативу: наследование таблицы. в pg вы можете определить таблицу ads
, которая содержит вашу базовую структуру и производную таблицу cars
, которая содержит все поля ads
, а также дополнительные (определенные для автомобиля) дополнительные поля. И стол для электроники, и один для фотографического оборудования и т. Д., Вы называете это. Вы даже можете пойти дальше и создать таблицы vans
и convertibles
, которые не наследуют от ads
, а от cars
, создавая дерево категорий, которое представляет иерархию объектов вашего интерфейса. Так в чем разница до (2) вы могли бы спросить?Упрощение обслуживания упрощается, изменение структуры таблицы ads
распространяется на все производные таблицы (в то время как изменение в таблице cars
будет только изменять cars, convertibles and vans
, как и следовало ожидать). То же самое касается sql: если вы select * from ads where title='foo'
, запрос будет возвращать записи из ads
и всех производных таблиц, всего дерева, если вы выберете из cars
только поиск поддерева .. вы получаете идею. Есть еще кое-что, ваша поисковая система могла бы вытащить структуру/метаданные ваших таблиц категории и создать для нее интерфейсы поиска, поэтому ваш интерфейс поиска всегда синхронизирован с структурой данных и т. Д.
Не подумал это до конца, и я все еще не уверен, что я буду строить систему таким образом, но у нее есть что-то. Система должна быть очень хорошо продуманной и иметь много явных границ, но это может быть хорошо (tm).
Последнее слово о mysql и postgres. pg - это база данных, в которой IMHO в большинстве аспектов сегодня превосходит mysql, просто не так знаменит. И нет, я не просто поклонник postgres, я старший пользователь mysql, я начал использовать mysql с версией 2.something, я представил ее более 10 лет назад в компании, в которой я все еще работаю (и сделал это база данных по умолчанию), и сегодня я не допускаю никакой новой разработки, я могу решить, основываться на mysql. Причина проста: по умолчанию «механизм хранения» в mysql - это myisam, который является быстрым и тощим и предлагает множество функций .. и вы потеряете данные в долгосрочной перспективе, если вы его используете. IMHO вы можете использовать его только для волатильных данных, и есть лучшие альтернативы для запуска кеша. если вам приходится полагаться на ваши данные, myisam - это NOGO. Я тестировал Innodb, по умолчанию для транзакционного механизма хранения, несколько раз за эти годы, и я никогда не нашел удовлетворительной производительности, поэтому я пошел на альтернативы.
postgres также не является совершенным, но в последние годы он значительно улучшился с точки зрения удобства использования, администрирования и скорости (особенность была большей частью в любом случае, и все еще есть).
нормально, достаточно адвокации на сегодняшний день, я пойду в постель :-)
Можете ли вы загрузить свою схему? Изменив свой пост блоком кода? Большая оптимизация начинается с действительно хорошей схемы. Если у вас плохая схема, где она может начинаться. Также убедитесь, что вы указали условия поиска. И да, как заявил г-н Джецгин, нормализация и оптимизация часто заканчиваются. То есть не то же самое;) – 2009-11-12 01:56:47