[v1.3] Entity-Attribute-Value
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
[v1.3] Entity-Attribute-Value
Я один из скучающих
Итак мой взгляд на решение Eav (паттерн Entity Attribute Value).
Google Code
Продолжаем обсуждать
Итак мой взгляд на решение Eav (паттерн Entity Attribute Value).
Google Code
Продолжаем обсуждать
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
1. Вместо дополнительного класса PostMeta можно сразу указывать tableName параметром поведения.
2.
можно покороче:
3.
Было бы удобней вместо:
использовать привычные для моделей Yii:
4. Именование методов внутри behaviour-а местами не очень логично.
Но вообще для первой версии очень хорошо. Особенно, учитывая «@todo | Go sleep ».
2.
Код: Выделить всё
'class' => 'application.extensions.YEAVBehavior',
Код: Выделить всё
'class' => 'ext.YEAVBehavior',
Было бы удобней вместо:
Код: Выделить всё
// выбираем пост с ID = 7
$post = Post::model()->findbyPk(7);
// показываем атрибут textColor
echo $post->meta->textColor;
echo '<br />';
// изменяем атрибут textColor
$post->options->textColor = 'red';
// снова показываем атрибут textColor
echo $post->options->textColor;
Код: Выделить всё
// выбираем пост с ID = 7
$post = Post::model()->findbyPk(7);
// показываем заголовок textColor
$post->getAttributeLabel('textColor');
echo '<br />';
// изменяем атрибут textColor
$post->textColor = 'red';
// снова показываем атрибут textColor
echo $post->textColor;
Но вообще для первой версии очень хорошо. Особенно, учитывая «@todo | Go sleep ».
Нравится Yii? Давайте сделаем его лучше!.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
1. А дальше что мне делать с именем таблицы? Решил сделать через модель, чтоб использовать все прелести модели, такие как валидация свойств например.Sam Dark писал(а):...
2. Хорошо что напомнил, забыл про этот псевдоним.
3. Тут ничего не понял. Иду читать что за метод getAttributeLabel(), хотя кажется мы по разному видим необходимость этого поведения. getAttributeLabel() оперирует с атрибутами модели post, но такого атрибута (textColor) нет в post, к нему подобраться можно только через поведение meta (или как у вас определено в моделе post), или я не понял документацию по поведению
4. Например?! Какие именно методы плохо названы?
Жду Yii 3!
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
Попробую описать для чего это может понадобится на примере, чтоб понять в какую сторону дальше идти.
Например, у нас есть модель пользователь. У пользователя есть обязательные атрибуты: login, password, email и другие. Которые скорее всего будут все в одной таблице Users в разных столбцах: userID, userLogin, userPass, userEmail и тд (может быть и другие варианты, но я так делаю обычно). Также у пользователя могут быть, а могут не быть, n-ое количество дополнительных, необязательных атрибутов: ICQ, Skype, MSN, аккаунт в facebook и очень, очень много других. Для таких атрибутов, мне кажется не совсем логично заводить столбец в таблице Users, большинство которых будет пустое. Для этого заводим дополнительную таблицу например UsersPlus с тремя столбцами userID, userAttribute, userAttributeValue. Теперь дополнительные, не обязательные атрибуты пользователя сохраняем строчкой в таблице.
Возможно глупо объяснил, много не нужной инфы. Но у меня с этим проблемы, возможно потому что, я не совсем русский или может потому что не совсем программист по профессии, опыта нет. Поэтому и объясняю как для дет.сада.
Например, у нас есть модель пользователь. У пользователя есть обязательные атрибуты: login, password, email и другие. Которые скорее всего будут все в одной таблице Users в разных столбцах: userID, userLogin, userPass, userEmail и тд (может быть и другие варианты, но я так делаю обычно). Также у пользователя могут быть, а могут не быть, n-ое количество дополнительных, необязательных атрибутов: ICQ, Skype, MSN, аккаунт в facebook и очень, очень много других. Для таких атрибутов, мне кажется не совсем логично заводить столбец в таблице Users, большинство которых будет пустое. Для этого заводим дополнительную таблицу например UsersPlus с тремя столбцами userID, userAttribute, userAttributeValue. Теперь дополнительные, не обязательные атрибуты пользователя сохраняем строчкой в таблице.
Возможно глупо объяснил, много не нужной инфы. Но у меня с этим проблемы, возможно потому что, я не совсем русский или может потому что не совсем программист по профессии, опыта нет. Поэтому и объясняю как для дет.сада.
Жду Yii 3!
Re: [DRAFT] Entity-Attribute-Value
Это очень хорошо, что так подробно расписываешь. Многие этого не делают и нам, начинающим, порой бывает сложно понять, что же хотел сказать "всевышний"mc-bear писал(а):Возможно глупо объяснил, много не нужной инфы. Но у меня с этим проблемы, возможно потому что, я не совсем русский или может потому что не совсем программист по профессии, опыта нет. Поэтому и объясняю как для дет.сада.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
1. Какая такая валидация у свойств entity, attribute и value? Они же всегда и везде одинаковые.
По-моему, использование экземпляра AR для каждого поля — довольно затратно. Поведение пишется один раз, а потом используется, так что намного лучше сделать через SQL:
3. Тут я не очень корректный пример показал. Смутило, что в примере сначала $post->meta, а затем $post->options. К тому же перепутал ещё одну штуку: в поведение передаются вызовы методов, но не свойств и их геттеров-сеттеров, как я почему-то думал.
4. Повникал ещё немного. Тут они, похоже, просто не очень привычные. Про нелогичные — это я, похоже, сгоряча.
По-моему, использование экземпляра AR для каждого поля — довольно затратно. Поведение пишется один раз, а потом используется, так что намного лучше сделать через SQL:
Код: Выделить всё
$command = $this->Owner->dbConnection->createCommand($sql);
$command->execute();
Код: Выделить всё
// Так можно. Будет вызван соотв. метод поведения
echo $post->getField();
// А вот так уже нет.
echo $post->field;
Нравится Yii? Давайте сделаем его лучше!.
Re: [DRAFT] Entity-Attribute-Value
Нормальное расширение. Кто-то что то делает, и это уже гуд
Мой маленький блог - http://dbhelp.ru
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
Валидацией я планировал проверять value, например если attribute = icq, то value = [0-9]{5,10}. Что-то такое. Но ты прав, это все можно проверять в модели формы. Однозначно будет вторая версия.Sam Dark писал(а):1. Какая такая валидация у свойств entity, attribute и value? Они же всегда и везде одинаковые.
По-моему, использование экземпляра AR для каждого поля — довольно затратно.
Тут моя опечатка в контролере. Добавил хинт к первому посту.Sam Dark писал(а):3. Тут я не очень корректный пример показал. Смутило, что в примере сначала $post->meta, а затем $post->options.
Не уловил, надо проверить.Sam Dark писал(а):К тому же перепутал ещё одну штуку: в поведение передаются вызовы методов, но не свойств и их геттеров-сеттеров, как я почему-то думал.
Ну приведи плиз не привычные модели, и как бы ты их назвали. Возможно твой вариант будет лучше звучать.Sam Dark писал(а):4. Повникал ещё немного. Тут они, похоже, просто не очень привычные. Про нелогичные — это я, похоже, сгоряча.
Ну почему же кто-то, вот ты скоро два проекта запускаешь, в гугл-код есть даже трекер на YiiOzzy писал(а):Нормальное расширение. Кто-то что то делает, и это уже гуд
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
Ещё немного пожеланий ко второй версии:
— Кодировку файлов очень хорошо было бы сменить на UTF-8.
— Расширения принято складывать в подпапки в extension. Например, в extensions/YEAV/*.
— Кодировку файлов очень хорошо было бы сменить на UTF-8.
— Расширения принято складывать в подпапки в extension. Например, в extensions/YEAV/*.
Нравится Yii? Давайте сделаем его лучше!.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
- Да проблемы с кодировкой заметил после как залил на гугл-код. Почему-то думал что NetBeans работает всегда в UTF-8. Оказалось нет Только при создании проекта можно указать кодировку, уже исправил.Sam Dark писал(а):Ещё немного пожеланий ко второй версии:
— Кодировку файлов очень хорошо было бы сменить на UTF-8.
— Расширения принято складывать в подпапки в extension. Например, в extensions/YEAV/*.
- Разве оно не в подпапке?
Жду Yii 3!
-
- Сообщения: 350
- Зарегистрирован: 2009.09.17, 16:47
- Откуда: Санкт-Петербург
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
Не знаю насколько актуально, но я бы таблицу postMeta разбил на две:
1. attribute: id, name
2. value: id, entity, attribute_id, value
1. attribute: id, name
2. value: id, entity, attribute_id, value
Предупрежден - значит вооружен.
devKP.ru
devKP.ru
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
Зачем? Нормализация, конечно — это хорошо. Но это будет лишний JOIN.
Нравится Yii? Давайте сделаем его лучше!.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
В предложенной версии, когда передается модель для атрибутов это делается составлением модели на любой вкус. Все довольно гибко, но накладно по ресурсам.SpiLLeR писал(а):Не знаю насколько актуально, но я бы таблицу postMeta разбил на две:
1. attribute: id, name
2. value: id, entity, attribute_id, value
В следующей версии AR, будет убран. Я думаю использовать одну таблицу. Выбирая, между хранением одинаковых имен атрибутов вместо их ID и затратами на join двух таблиц, выбираю первое. Как вариант постараюсь сделать так, чтоб пожеланию можно было легко перегрузить класс собственным.
Ваши мнения?
Другой вопрос нужен ли фильтр атрибутов? Чтоб при подключения поведения можно было указать какие атрибуты можно использовать для объекта?
Жду Yii 3!
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
нет видимых минусов, просто может он не нужен, зачем лишняя возможность, которая не будет никогда использоватьсяSam Dark писал(а):А в чём минус фильтра?
Жду Yii 3!
-
- Сообщения: 350
- Зарегистрирован: 2009.09.17, 16:47
- Откуда: Санкт-Петербург
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
Хочу уточнить концепцию библиотеки: планиируется хранить все атрибуты различных объектов? Будь то user, article, product?
Насчет таблиц, считаю, что чем выше нагрузка на проект, тем больше необходимость в нормализации, т.к. избыточность решается только увеличением харда(или нормализацией), а запросы можно закэшировать. Я конечно не фанат нормализаций, просто интересно подискутировать на эту тему.
Насчет таблиц, считаю, что чем выше нагрузка на проект, тем больше необходимость в нормализации, т.к. избыточность решается только увеличением харда(или нормализацией), а запросы можно закэшировать. Я конечно не фанат нормализаций, просто интересно подискутировать на эту тему.
Предупрежден - значит вооружен.
devKP.ru
devKP.ru
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
Если заниматься нормализацией, тут ещё одна проблема всплывёт: поле name у модели User и поле name у модели Post — это разные поля.
Нравится Yii? Давайте сделаем его лучше!.
-
- Сообщения: 139
- Зарегистрирован: 2009.09.02, 16:21
- Откуда: Черкассы, Украина
Re: [DRAFT] Entity-Attribute-Value
Ещё подумалось о i18n, как-то бы его присобачить в структуру таблицы нужно, наверное.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
i18n вроде совершенно отдельная штука.
Нравится Yii? Давайте сделаем его лучше!.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: [DRAFT] Entity-Attribute-Value
для этого в библиотеке будет настройка tableName и attributePrefix. Присоединяя поведение к user, можно использовать одну таблицу, для article и products другую, но одну на два объекта. Дело хозяйское. При использовании одной таблицы для двух объектов в работу приступает attributePrefix.SpiLLeR писал(а):Хочу уточнить концепцию библиотеки: планиируется хранить все атрибуты различных объектов? Будь то user, article, product?
Про нормализацию уже ответил. Запросы к БД постараюсь вывести в отдельный метод, чтоб можно было перегрузить по желанию с использованием двух таблиц.
i18n? если имелось виду иметь разные value для одного и того же attribute в разных языках, чем плохо сохранять атрибуты под именем attribute_ru, attribute_en?
Жду Yii 3!