<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Комментарии на: Гибкая система управления сайтом</title>
	<atom:link href="http://boolive.ru/createcms/super-cms/feed" rel="self" type="application/rss+xml" />
	<link>http://boolive.ru/createcms/super-cms</link>
	<description>Система для создания и управления сайтом</description>
	<pubDate>Fri, 30 Jul 2010 01:07:22 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>От: Андрей</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-331</link>
		<dc:creator>Андрей</dc:creator>
		<pubDate>Wed, 03 Mar 2010 11:55:13 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-331</guid>
		<description>На счет производительности. Я конечно понимаю что в БД очень хорошо развиты алгоритмы индексации, аналитические алгоритмы выборки и много еще чего, что убыстряет в сотни раз связи между таблицами. Но если без этого всего взять грубо пример то получим, что чтобы найти выборку из двух связанных таблиц, допустим, в каждой из которых по 3 записи, то СУБД должна перебрать 3*3=9 записей. Не существенно если таблицы в теории даже не перевалят за пару сотен записей. А если вдруг в каждой из таблиц окажется не по 3, а по 3000 записей, то БД должна будет перебрать 9 000 000 записей, вместо 3000. Вот тут разницу погасить не смогут даже самые прогрессивные аналитические алгоритмы  БД.
Для уменьшения количества связей в запросах крупные проекты используют метод, называемый "Избыточность данных". Когда, допустим, надо выбирать коммент и имя пользователя кто этот коммент написал. То при этом не связывают по ID пользователя таблицу пользователей и комментариев, а вместо этого в записи комментария к полю userid, являющуюся внешним ключом, добавляют username, которое хранит имя этого пользователя.</description>
		<content:encoded><![CDATA[<p>На счет производительности. Я конечно понимаю что в БД очень хорошо развиты алгоритмы индексации, аналитические алгоритмы выборки и много еще чего, что убыстряет в сотни раз связи между таблицами. Но если без этого всего взять грубо пример то получим, что чтобы найти выборку из двух связанных таблиц, допустим, в каждой из которых по 3 записи, то СУБД должна перебрать 3*3=9 записей. Не существенно если таблицы в теории даже не перевалят за пару сотен записей. А если вдруг в каждой из таблиц окажется не по 3, а по 3000 записей, то БД должна будет перебрать 9 000 000 записей, вместо 3000. Вот тут разницу погасить не смогут даже самые прогрессивные аналитические алгоритмы  БД.<br />
Для уменьшения количества связей в запросах крупные проекты используют метод, называемый &#8220;Избыточность данных&#8221;. Когда, допустим, надо выбирать коммент и имя пользователя кто этот коммент написал. То при этом не связывают по ID пользователя таблицу пользователей и комментариев, а вместо этого в записи комментария к полю userid, являющуюся внешним ключом, добавляют username, которое хранит имя этого пользователя.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: abraxys</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-330</link>
		<dc:creator>abraxys</dc:creator>
		<pubDate>Sat, 27 Feb 2010 08:38:43 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-330</guid>
		<description>1) Производительность, в данном варианте, штука довольно спорная. Ну придется вам связать, допустим, 3 таблицы в одном SQL по PK, ну и что? Производительность сильно упадет?

2-3) Не судите об архитектуре только по примеру. Зачем делать то же самое поле в новой таблице, если оно уже есть в базовой таблице?

В общем спорить нет ни времени, ни желания, вам наверно виднее, т.к. толком не работал ни с PHP ни с MySQL.</description>
		<content:encoded><![CDATA[<p>1) Производительность, в данном варианте, штука довольно спорная. Ну придется вам связать, допустим, 3 таблицы в одном SQL по PK, ну и что? Производительность сильно упадет?</p>
<p>2-3) Не судите об архитектуре только по примеру. Зачем делать то же самое поле в новой таблице, если оно уже есть в базовой таблице?</p>
<p>В общем спорить нет ни времени, ни желания, вам наверно виднее, т.к. толком не работал ни с PHP ни с MySQL.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Андрей</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-327</link>
		<dc:creator>Андрей</dc:creator>
		<pubDate>Sat, 27 Feb 2010 06:42:27 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-327</guid>
		<description>Ну со своей колокольни посмею выразить замечания по поводу практичности такого подхода именно на php+mysql

1. &#62;&#62;Не проще ли создать таблицу, в которой будут присутствовать только новые, специфичные именно для новости поля (news_text, news_type)? Проще!

Не проще, т.к. это скажется на производительности, потому, что чтобы получить дату или имя новости каждый раз при запросе в базу придется связывать базовую таблицу и таблицу новостей. Также неудобно это при дебаге, когда нужно будет заглянуть в БД через phpmyadmin, посмотрев на новости и найти допустим нужную по заголовку.

2. &#62;&#62;News связываем с Thing отношением один-к-одному. Все!

Верность данного подхода на счет связывания 1 к 1 - очень спорная штука. Одни используют такую связь, другие нет. Но хочу заметить, что согласно упрощению моделей БД, выдвинутыми Коддом отношения 1 к 1 нужно упрощать, соединяя две таблицы в одну.

3. Для всех классов потомков вы все-равно создаете таблицы, так зачем вообще нужен гемморой связей с предками, если ни прироста производительности ни скорости разработки данный подход не дает?</description>
		<content:encoded><![CDATA[<p>Ну со своей колокольни посмею выразить замечания по поводу практичности такого подхода именно на php+mysql</p>
<p>1. &gt;&gt;Не проще ли создать таблицу, в которой будут присутствовать только новые, специфичные именно для новости поля (news_text, news_type)? Проще!</p>
<p>Не проще, т.к. это скажется на производительности, потому, что чтобы получить дату или имя новости каждый раз при запросе в базу придется связывать базовую таблицу и таблицу новостей. Также неудобно это при дебаге, когда нужно будет заглянуть в БД через phpmyadmin, посмотрев на новости и найти допустим нужную по заголовку.</p>
<p>2. &gt;&gt;News связываем с Thing отношением один-к-одному. Все!</p>
<p>Верность данного подхода на счет связывания 1 к 1 - очень спорная штука. Одни используют такую связь, другие нет. Но хочу заметить, что согласно упрощению моделей БД, выдвинутыми Коддом отношения 1 к 1 нужно упрощать, соединяя две таблицы в одну.</p>
<p>3. Для всех классов потомков вы все-равно создаете таблицы, так зачем вообще нужен гемморой связей с предками, если ни прироста производительности ни скорости разработки данный подход не дает?</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: abraxys</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-326</link>
		<dc:creator>abraxys</dc:creator>
		<pubDate>Fri, 26 Feb 2010 16:28:34 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-326</guid>
		<description>Очень похоже на MDA. Я имею ввиду модель и концепция. Кстати, очень давно ищю CMS систему, построенную на основе MDA (Model Driven Architecture), но к сожалению не нашел (наверное плохо искал).

Можно немножко поумничаю, так сказать, сос своей колокольни? 

Сама идея довольно проста: мы оперируем 3 базовыми понятиями некая сущность (класс, таблица БД), атрибут данной сущности (поле класса, поле таблицы БД) и отношение 2х сущностей по какому либо атрибуту.

Далее буду оперировать понятиями класс, поле, отношение. Есть некий класс Thing, ему соответствует таблица в БД thing. У этого класса есть 3 поля: ThingId (thing_id), ThingName (thing_name), ThingCreationDate (thing_creation_date). Это базовый класс всей модели. 

Далее, допустим, мы хотим добавить понятие "новость". Для этого нужно ввести еще один класс News. Для новости так же важно знать когда ее создали, ее название, а так же, предположим еще 2 специфических свойства - текст данной новости, и тип новости. Так зачем же нам создавать еще одну таблицу, в которой будут присутствовать некоторые поля, которые уже есть в базовой thing (thing_name, thing_creation_date)? Не проще ли создать таблицу, в которой будут присутствовать только новые, специфичные именно для новости поля (news_text, news_type)? Проще! 

Поэтому мы просто наследуемся от thing и создаем новый класс(таблицу БД) news со следующими полями: news_id, news_text, news_type. News связываем с Thing отношением один-к-одному. Все!

Это конечно все клево, но вот только как создавать теперь экземпляр новости, как его удалять и как модифицировать? Для этого мы сгенерируем набор простых хранимых процедур-мапперов:

insert_news(news_id, news_name, news_creation_date, news_text, news_type)
update_news(news_id, news_name, news_creation_date, news_text, news_type)
delete_news(news_id, news_name, news_creation_date, news_text, news_type)

Если судить в контексте Oracle, то мы можем сгенерировать пакет процедур-мапперов. Так же мы генерируем набор классов-мапперов на любом языке программирования, только уже в контексте прикладном (но это нам сейчас не важно).

Далее... Мы смотрим на поле news_type и подсознательно чувствуем, что чем-то оно нам не нравится... Правильно! Тип-то может иметь несколько значений, причем эти значения более менее постоянные, хотя их набор  может быть расширен. В контексте нашей модели, мы создаем новый класс на одном уровне с Thing и обзываем его BaseDir (base_dir в БД соответственно) с полями BaseDirId (base_dir_id) и BaseDirName (base_dir_name). От него наследуем NewsType, с одним единственным полем NewsTypeId (news_type_id). Соответственно генерируем мапперы

insert_news_type(news_type_id, news_type_name)
update_news_type(news_type_id, news_type_name)
delete_news_type(news_type_id, news_type_name)

ну а в классе news переименовываем поле NewsType в NewsTypeId (news_type - news_type_id) и добавляем отношение с классом news_type типа много-к-одному по полю news_type_id.

Ну а далее полет фантазий безграничен! Во первых, нужно добавить поле thing_internal_type_id в thing. Это поле должно ссылаться на описание типа класса (т.е. атомарный экземпляр модели). Управление видимостью полей (также как и их наличием в процедурах-мапперах) можно реализовать на основе use case. Далее можно реализовать перекрытие полей для задания им в потомках определенных характеристик и т.д. Реализовать различные системы отображения, редактирования экземпляров наших классов на основании модели этих самих классов.

По сути, больше ничего не нужно, так как это дает такую гибкость... и кстати, производительность. А главное при условии успешной реализации самой концепции, для создания любой конфигурации не требуется знание программирования и БД, т.е. работать с такой системой смогут любые категории пользователей.</description>
		<content:encoded><![CDATA[<p>Очень похоже на MDA. Я имею ввиду модель и концепция. Кстати, очень давно ищю CMS систему, построенную на основе MDA (Model Driven Architecture), но к сожалению не нашел (наверное плохо искал).</p>
<p>Можно немножко поумничаю, так сказать, сос своей колокольни? </p>
<p>Сама идея довольно проста: мы оперируем 3 базовыми понятиями некая сущность (класс, таблица БД), атрибут данной сущности (поле класса, поле таблицы БД) и отношение 2х сущностей по какому либо атрибуту.</p>
<p>Далее буду оперировать понятиями класс, поле, отношение. Есть некий класс Thing, ему соответствует таблица в БД thing. У этого класса есть 3 поля: ThingId (thing_id), ThingName (thing_name), ThingCreationDate (thing_creation_date). Это базовый класс всей модели. </p>
<p>Далее, допустим, мы хотим добавить понятие &#8220;новость&#8221;. Для этого нужно ввести еще один класс News. Для новости так же важно знать когда ее создали, ее название, а так же, предположим еще 2 специфических свойства - текст данной новости, и тип новости. Так зачем же нам создавать еще одну таблицу, в которой будут присутствовать некоторые поля, которые уже есть в базовой thing (thing_name, thing_creation_date)? Не проще ли создать таблицу, в которой будут присутствовать только новые, специфичные именно для новости поля (news_text, news_type)? Проще! </p>
<p>Поэтому мы просто наследуемся от thing и создаем новый класс(таблицу БД) news со следующими полями: news_id, news_text, news_type. News связываем с Thing отношением один-к-одному. Все!</p>
<p>Это конечно все клево, но вот только как создавать теперь экземпляр новости, как его удалять и как модифицировать? Для этого мы сгенерируем набор простых хранимых процедур-мапперов:</p>
<p>insert_news(news_id, news_name, news_creation_date, news_text, news_type)<br />
update_news(news_id, news_name, news_creation_date, news_text, news_type)<br />
delete_news(news_id, news_name, news_creation_date, news_text, news_type)</p>
<p>Если судить в контексте Oracle, то мы можем сгенерировать пакет процедур-мапперов. Так же мы генерируем набор классов-мапперов на любом языке программирования, только уже в контексте прикладном (но это нам сейчас не важно).</p>
<p>Далее&#8230; Мы смотрим на поле news_type и подсознательно чувствуем, что чем-то оно нам не нравится&#8230; Правильно! Тип-то может иметь несколько значений, причем эти значения более менее постоянные, хотя их набор  может быть расширен. В контексте нашей модели, мы создаем новый класс на одном уровне с Thing и обзываем его BaseDir (base_dir в БД соответственно) с полями BaseDirId (base_dir_id) и BaseDirName (base_dir_name). От него наследуем NewsType, с одним единственным полем NewsTypeId (news_type_id). Соответственно генерируем мапперы</p>
<p>insert_news_type(news_type_id, news_type_name)<br />
update_news_type(news_type_id, news_type_name)<br />
delete_news_type(news_type_id, news_type_name)</p>
<p>ну а в классе news переименовываем поле NewsType в NewsTypeId (news_type - news_type_id) и добавляем отношение с классом news_type типа много-к-одному по полю news_type_id.</p>
<p>Ну а далее полет фантазий безграничен! Во первых, нужно добавить поле thing_internal_type_id в thing. Это поле должно ссылаться на описание типа класса (т.е. атомарный экземпляр модели). Управление видимостью полей (также как и их наличием в процедурах-мапперах) можно реализовать на основе use case. Далее можно реализовать перекрытие полей для задания им в потомках определенных характеристик и т.д. Реализовать различные системы отображения, редактирования экземпляров наших классов на основании модели этих самих классов.</p>
<p>По сути, больше ничего не нужно, так как это дает такую гибкость&#8230; и кстати, производительность. А главное при условии успешной реализации самой концепции, для создания любой конфигурации не требуется знание программирования и БД, т.е. работать с такой системой смогут любые категории пользователей.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Владимир</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-323</link>
		<dc:creator>Владимир</dc:creator>
		<pubDate>Wed, 24 Feb 2010 15:25:30 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-323</guid>
		<description>С декабря в сторону просты стали двигаться, от неё уже к гибкости. Затишье в блоге - работаем :)</description>
		<content:encoded><![CDATA[<p>С декабря в сторону просты стали двигаться, от неё уже к гибкости. Затишье в блоге - работаем <img src='http://boolive.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Андрей</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-322</link>
		<dc:creator>Андрей</dc:creator>
		<pubDate>Tue, 23 Feb 2010 17:20:15 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-322</guid>
		<description>Админка пока в нерабочем состоянии, поэтому увидеть как все это работает - трудно)))). Но в теории как я понял вы хотите на бедного админа, который не всегда знаком с HTML возложить еще и знание ООП. 

ИМХО: вам лучше пойти не в сторону гибкости, а в сторону простоты. Или делать 2 интерфейса - прогера и админа. В общем удачи вам в ваших начинаниях.</description>
		<content:encoded><![CDATA[<p>Админка пока в нерабочем состоянии, поэтому увидеть как все это работает - трудно)))). Но в теории как я понял вы хотите на бедного админа, который не всегда знаком с HTML возложить еще и знание ООП. </p>
<p>ИМХО: вам лучше пойти не в сторону гибкости, а в сторону простоты. Или делать 2 интерфейса - прогера и админа. В общем удачи вам в ваших начинаниях.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Владимир</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-314</link>
		<dc:creator>Владимир</dc:creator>
		<pubDate>Sat, 09 Jan 2010 14:48:37 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-314</guid>
		<description>Стучитесь в аську :) Исходники временно прикрыты из-за засекреченной причины</description>
		<content:encoded><![CDATA[<p>Стучитесь в аську <img src='http://boolive.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Исходники временно прикрыты из-за засекреченной причины</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: patrik</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-313</link>
		<dc:creator>patrik</dc:creator>
		<pubDate>Sat, 09 Jan 2010 07:46:12 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-313</guid>
		<description>Хотел посмотреть, но скачать исходники незя... 
Владимир, можно как-то заглянуть в душу вашего творения?</description>
		<content:encoded><![CDATA[<p>Хотел посмотреть, но скачать исходники незя&#8230;<br />
Владимир, можно как-то заглянуть в душу вашего творения?</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Xploit</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-289</link>
		<dc:creator>Xploit</dc:creator>
		<pubDate>Tue, 27 Oct 2009 06:10:19 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-289</guid>
		<description>Радует факт - начался набор команды. Если будет интересно пишите ICQ: 300841. Опыт 5 лет работы.</description>
		<content:encoded><![CDATA[<p>Радует факт - начался набор команды. Если будет интересно пишите ICQ: 300841. Опыт 5 лет работы.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Владимир</title>
		<link>http://boolive.ru/createcms/super-cms/comment-page-1#comment-288</link>
		<dc:creator>Владимир</dc:creator>
		<pubDate>Sat, 24 Oct 2009 15:06:35 +0000</pubDate>
		<guid isPermaLink="false">http://boolive.ru/?p=294#comment-288</guid>
		<description>Живее живых)) Промежуточные результаты не спешим разглашать, пока :)</description>
		<content:encoded><![CDATA[<p>Живее живых)) Промежуточные результаты не спешим разглашать, пока <img src='http://boolive.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.598 seconds -->
