Вопрос про MySQL
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Вопрос про MySQL
Задался тут вопросом и решил выслушать чьи-нибудь комментарии до того как решить для себя.
Есть сущности: Новость, Статическая страница, Пост блога.
Все эти сущности имеют одинаковые атрибуты: id, content, author и др.
Вот и вопрос, как логичнее держать данные в базе, создать три таблицы или держать в одной таблице с дополнительным полем type
Пока сам я вижу только по одному сомнительному плюсу к каждому виду и не одного минуса
Поделитесь мнениями.
Спасибо.
Есть сущности: Новость, Статическая страница, Пост блога.
Все эти сущности имеют одинаковые атрибуты: id, content, author и др.
Вот и вопрос, как логичнее держать данные в базе, создать три таблицы или держать в одной таблице с дополнительным полем type
Пока сам я вижу только по одному сомнительному плюсу к каждому виду и не одного минуса
Поделитесь мнениями.
Спасибо.
Жду Yii 3!
Re: Вопрос про MySQL
Разные таблицы
А вообще надо читать доки по проектированию так во-первых удобнее, во-вторых расширяемее (в случае нужды добавления только для постов к примеру нового поля), да и идеологически правильнее.
А вообще надо читать доки по проектированию так во-первых удобнее, во-вторых расширяемее (в случае нужды добавления только для постов к примеру нового поля), да и идеологически правильнее.
Мой маленький блог - http://dbhelp.ru
Re: Вопрос про MySQL
у меня к сожалению, все в печатном виде.
могу подсказать автора и название, а там уже поищешь может и в инете найдешь. идет?
могу подсказать автора и название, а там уже поищешь может и в инете найдешь. идет?
Мой маленький блог - http://dbhelp.ru
Re: Вопрос про MySQL
Посмотрел на полку, что по проектированию есть:
Эрик Дж. Нейбург, Роберт Максимчук "Проектирование баз данных с помощью UML"
М.Фаулер "UML. Основы"
Г.Буч, Р.Максимчук и др. "Объектно-ориентированный анализ и проектирование с примерами приложений"
Э.Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес "Примеры объектно-ориентированного проектирования. Паттерны проектирования"
Эрик Дж. Нейбург, Роберт Максимчук "Проектирование баз данных с помощью UML"
М.Фаулер "UML. Основы"
Г.Буч, Р.Максимчук и др. "Объектно-ориентированный анализ и проектирование с примерами приложений"
Э.Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес "Примеры объектно-ориентированного проектирования. Паттерны проектирования"
[Редкие] Записки пещерного человека
Re: Вопрос про MySQL
А по-моему, так гибче хранить одной таблицей, когда есть еще таблица "типы" и таблицы для полей... Да, громоздко, но на сложных сайтах иначе получается очень неудобно - редактировать все 20 типов материалов, у каждого свои вьювы, модели, контроллеры...
Хотя для простых сайтов, конечно, лучше отдельными.
Хотя для простых сайтов, конечно, лучше отдельными.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Вопрос про MySQL
Ну вот появилось второе мнение.
Принимаю, набросились на меня "иди читай мат часть" Спасибо за совет, честно скажу, я читаю книги, как только есть свободное время.
Но вопрос был именно о подводных камнях встречающиеся на практике, о тестах в реально созданных проектах, а не как это нужно делать по теории великих и могучих профи, которые пишут книги.
Вот сижу и не знаю что и думать, авторы WordPress'а олухи не грамотные или то что они засунули посты, страницы и атачменты в одну таблицу это хорошо продуманный шаг
У них как раз две таблицы одна posts хранит объекты и их основные поля, и рядом вторая postmeta, которая хранит дополнительные поля в виде key=value, можешь расширять данные объектов как хочется хоть каждый день.
Принимаю, набросились на меня "иди читай мат часть" Спасибо за совет, честно скажу, я читаю книги, как только есть свободное время.
Но вопрос был именно о подводных камнях встречающиеся на практике, о тестах в реально созданных проектах, а не как это нужно делать по теории великих и могучих профи, которые пишут книги.
Вот сижу и не знаю что и думать, авторы WordPress'а олухи не грамотные или то что они засунули посты, страницы и атачменты в одну таблицу это хорошо продуманный шаг
У них как раз две таблицы одна posts хранит объекты и их основные поля, и рядом вторая postmeta, которая хранит дополнительные поля в виде key=value, можешь расширять данные объектов как хочется хоть каждый день.
Жду Yii 3!
Re: Вопрос про MySQL
В Drupal так же. Полагаю, во всех CMS так же, иначе сложно было бы добавить возможность создавать новые типы на лету.mc-bear писал(а): Вот сижу и не знаю что и думать, авторы WordPress'а олухи не грамотные или то что они засунули посты, страницы и атачменты в одну таблицу это хорошо продуманный шаг
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Вопрос про MySQL
С одной стороны хранение в одной таблице хорошо: довольно много кода получается не писать. С другой получаются немного более медленные выборки и затруднённое расширение системы.
Нравится Yii? Давайте сделаем его лучше!.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Вопрос про MySQL
1. where type.
2. Большее количество записей.
Хотя для не очень больших систем замедление совершенно незначительное.
2. Большее количество записей.
Хотя для не очень больших систем замедление совершенно незначительное.
Нравится Yii? Давайте сделаем его лучше!.
Re: Вопрос про MySQL
Тут действительно наверное стоит исходить из соображений для чего это делается:
1. Нужна ли расширяемость.
2. Количество записей каждого из типов.
2. Количество записей каждого из типов по отношению к другим.
3. Использование кеша.
4. Время которое есть на реализацию проекта.
Думаю что на цвет и вкус тут товарищей нет. Друпал и ВПрес ставили задачу легкой расширяемости, а кеш позволяет снизить нагрузку до того что не важно насколько сложные запросы.
1. Нужна ли расширяемость.
2. Количество записей каждого из типов.
2. Количество записей каждого из типов по отношению к другим.
3. Использование кеша.
4. Время которое есть на реализацию проекта.
Думаю что на цвет и вкус тут товарищей нет. Друпал и ВПрес ставили задачу легкой расширяемости, а кеш позволяет снизить нагрузку до того что не важно насколько сложные запросы.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Вопрос про MySQL
А кому она не нужна? Конечно же умеренно тратя производительностьaser писал(а):Тут действительно наверное стоит исходить из соображений для чего это делается:
1. Нужна ли расширяемость.
Тут пока не очень соображаю как это может играть роли.aser писал(а):2. Количество записей каждого из типов.
2. Количество записей каждого из типов по отношению к другим.
Опять же, если есть возможность использовать кеш, разве кто-то откажется?aser писал(а):3. Использование кеша.
Тем более вопрос про довольно статические записи (новости, записки блока и тд) кеш тут идеально подходит.
Опять же не вижу разницы во времени. Плюс время есть, т.к. разработка для будущих проектов. Так что не к спеху.aser писал(а):4. Время которое есть на реализацию проекта.
Это и хорошо, т.к. для таких объектов как новости, записки блога, расширяемость и кеш самое то.aser писал(а):Думаю что на цвет и вкус тут товарищей нет. Друпал и ВПрес ставили задачу легкой расширяемости, а кеш позволяет снизить нагрузку до того что не важно насколько сложные запросы.
Жду Yii 3!
Re: Вопрос про MySQL
1.
2.
и на всем сайте 10 статических страниц то тут тоже нужно подумать возможно стоит все же разделить эти сущности и для каждой сделать свою расширяемость.
P.S. Это нагрузки небольшого но активного сайта, так сказать цветочки.
Если делается сайт с нуля с прописанными четко требованиями зачем мудрить?А кому она не нужна? Конечно же умеренно тратя производительность
2.
Ну смотрите если в базе статей у вас изначально будет висеть > 100 000 статей c пополнением > 200 статей в сутки, в блоге > 2000 с пополнением > 10 в суткиТут пока не очень соображаю как это может играть роли.
и на всем сайте 10 статических страниц то тут тоже нужно подумать возможно стоит все же разделить эти сущности и для каждой сделать свою расширяемость.
P.S. Это нагрузки небольшого но активного сайта, так сказать цветочки.
Ну если вы делаете презентацию расчитаную на 100 человек в день, то зачем тратить свое время и лишние ресурсы, MySQL и не сложная структура сама все за вас сделаетОпять же, если есть возможность использовать кеш, разве кто-то откажется?
Ну тут думаю что вы ответили сами на свой вопросЭто и хорошо, т.к. для таких объектов как новости, записки блога, расширяемость и кеш самое то.
Re: Вопрос про MySQL
Пихают все по одной таблице без надобности - люди не прочитавшие главу про JOIN-ы. ИМХО
А иначе - смысла особого нету, лишь затруднение расширения самого проекта.
А иначе - смысла особого нету, лишь затруднение расширения самого проекта.
Мой маленький блог - http://dbhelp.ru
- Одиночка Айс
- Сообщения: 267
- Зарегистрирован: 2010.02.05, 10:26
- Откуда: Алма-Ата, Казахстан
- Контактная информация:
Re: Вопрос про MySQL
Отчасти согласен, у меня все компании хранятся в одной таблице, разделенные только по типу (по которому и "выцарапываются" из базы). НО я считаю, что это актуально лишь в том случае, когда все записи абсолютно идентичны по полям.Razunter писал(а):А по-моему, так гибче хранить одной таблицей, когда есть еще таблица "типы" и таблицы для полей... Да, громоздко, но на сложных сайтах иначе получается очень неудобно - редактировать все 20 типов материалов, у каждого свои вьювы, модели, контроллеры...
Хотя для простых сайтов, конечно, лучше отдельными.
Ни любви, ни тоски, ни жалости...
Re: Вопрос про MySQL
Есть у меня немалый опыт работы с cms по такому принципу работающей - около 5-6
сайтов.
Сейчас, сравнивая однотабличную структуру и многотабличную - прихожу к мысли, что многотабличная куда более гибка, быстрее работает, больше возможностей работы с foreign key, и прочие многие плюсы.
Кстати, в той cms дополнительные свойства можно хранить в двух реживах - в общей таблице, по принципу property type - property value - и в отдельной таблице по одному столбцу на свойство, которая джойнится к основной.
Второй режим ввели из-за проблем с производительностью, при больших обьемах данных - каталоги в миллионы записей, + классификаторы к ним тоже не маленькие.
Есть один минус, который используется редко, но порой очень нужен - вставка данных из одной таблицы по выборке из другой.
Есть минус, я его считаю самым большим - поддержка структуры данных затруднена. Например, если в одном типе данных требуется обязательно свойство foo, а в других типах уже не нужно - его не сделаешь NOT NULL, придется перекладывать проверку на php, а не на базу данных.
Минусов много, не все даже вспомню. Мое решение - если на проекте много однотипных сущностей, имеет смысл использовать однотабличный вариант, такие задачи часто встречаются в интернет-магазинах. Если же сущности довольно сильно отличаются, куда разумнее использовать отдельные таблицы - например saas`ы.
сайтов.
Сейчас, сравнивая однотабличную структуру и многотабличную - прихожу к мысли, что многотабличная куда более гибка, быстрее работает, больше возможностей работы с foreign key, и прочие многие плюсы.
Кстати, в той cms дополнительные свойства можно хранить в двух реживах - в общей таблице, по принципу property type - property value - и в отдельной таблице по одному столбцу на свойство, которая джойнится к основной.
Второй режим ввели из-за проблем с производительностью, при больших обьемах данных - каталоги в миллионы записей, + классификаторы к ним тоже не маленькие.
Есть один минус, который используется редко, но порой очень нужен - вставка данных из одной таблицы по выборке из другой.
Есть минус, я его считаю самым большим - поддержка структуры данных затруднена. Например, если в одном типе данных требуется обязательно свойство foo, а в других типах уже не нужно - его не сделаешь NOT NULL, придется перекладывать проверку на php, а не на базу данных.
Минусов много, не все даже вспомню. Мое решение - если на проекте много однотипных сущностей, имеет смысл использовать однотабличный вариант, такие задачи часто встречаются в интернет-магазинах. Если же сущности довольно сильно отличаются, куда разумнее использовать отдельные таблицы - например saas`ы.
-
- Сообщения: 39
- Зарегистрирован: 2009.07.15, 10:19
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Вопрос про MySQL
Вообще в своей CMS делал все в одной таблице. Таблица содержала по сути структуру разделов сайта. Там же хранилась информация, каким модулем должна инфа обрабатываться, и какой у этой инфы тип.
Ну и соответственно, уже дополнительные поля каталога, пользователи, списки рассылок, капчи, списки модулей, права доступа и пр. хранились в других таблицах.
Собственно, вполне удобно, ничего не тормозило. На больших проектах не пробовал, но кэш всемогущий мне бы помог.
В плюс могу записать удобный поиск по базе, если не используется отдельно таблица индекса для модуля поиска.
Кстати, всякие join, order, group и пр. как раз и могут прилично базу прогнуть. Но порой бывает с ними быстрее (если индексы правильно расставить)))
Ну и соответственно, уже дополнительные поля каталога, пользователи, списки рассылок, капчи, списки модулей, права доступа и пр. хранились в других таблицах.
Собственно, вполне удобно, ничего не тормозило. На больших проектах не пробовал, но кэш всемогущий мне бы помог.
В плюс могу записать удобный поиск по базе, если не используется отдельно таблица индекса для модуля поиска.
Кстати, всякие join, order, group и пр. как раз и могут прилично базу прогнуть. Но порой бывает с ними быстрее (если индексы правильно расставить)))
Re: Вопрос про MySQL
В начале треда (несколько лет назад ) был поднят вопрос про литературу по проектированию БД. Можно всё таки привести примеры подобных книг?