Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 паттерн EAV  [new]
hurt3
Member

Откуда:
Сообщений: 11
добрый день, к сути вопроса,

есть приложение в нем регятся пользователи, пользователи могут создавать свои типы товаров, у каждого типа товара свои поля ну и соответственно можно заводить товары по созданным типам.

для реализации подобной задачи принято решение использовать паттерн EAV (Entity-Attribute-Value). или скорее антипаттерн

но для реализации подобной системы нужно будет извратиться

вообще я уже начал смотреть в сторону nosql но в целом идея следующая на mysql

суть такова для отдельного типа данных -числа строки текст дата , заводится своя отдельная таблица

пользователь заводит задачу(товарный шаблон) и указывает в нем поля, для каждого нового товара создается строка , она связывает задачу и занесенные данные

user
id | user

task
id | id_user | task_name

field
id| id_task| field_name | type_table

row
id |id_task

конкретный вид таблицы для хранения информации определенного вида
id_field | id_row | data


разумна ли подобная организация бд или есть более простое решение7
10 сен 15, 17:36    [18134126]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
hurt3
для отдельного типа данных -числа строки текст дата , заводится своя отдельная таблица

А смысл? максимум что будет по таким полям - это фильтрация/поиск. Почему тогда не использовать универсальный тип и конвертацию? тем более что в MySQL типизация, мягко говоря, не очень, а автоприведение типов торчит из всех щелей...
10 сен 15, 18:25    [18134388]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
hurt3
Member

Откуда:
Сообщений: 11
у нас может быть 10 000 пользователей, каждый пользователь может создать 1000 и более товарных шаблонов, ив каждом товарном шаблоне может быть неограниченное количество свойств для товара

я думал вначале создать под отдельный шаблон отдельную таблицу

но если база будет содержать 10000000 таблиц это не нормально или нет? или какое решение вы можете предложить?
общие свойства могут быть типа размер или цвет но они будут в кардинальном меньшинстве, поэтому затачивать функционал под них отдельно бессмысленно
10 сен 15, 18:32    [18134400]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
Это не просто ненормально...
10 сен 15, 21:13    [18134980]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
hurt3
Member

Откуда:
Сообщений: 11
так и какую реализацию задачи посоветуете?
10 сен 15, 21:32    [18135043]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3430
hurt3,

Вполне решаемый подход. Примерно так и делал одному из заказчиков года 2-3 назад. Относительно живой сервер с 16 гектарами вполне тащил до 5млн товаров с примерно по 15 параметров на каждый.

Таблички со значениями разных типов - имеют смысл, который становится особо понятен, когда вы упретесь в вычисляемые и диапазонные значения "размеры с 36-го по 45-й" ... :)
10 сен 15, 22:00    [18135164]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3430
Arhat109,

Да, забылось уже: вам ещё потребуется один тип значений - индексный. Это когда значение - определяет номер (ид) другого товара. Например "упаковка" - картонная коробка 40х30х60, гофрокартон 2мм.

Или ещё такой идиотизм как "набор столовых предметов 7шт: 3 вилки + 3 ложки + зубочистка" ... ну, с комплектами и наборами вам повозится все одно придется. :)
10 сен 15, 22:04    [18135183]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3430
Arhat109,

А, ну ещё ... предоставление другому автору права на пользование товарным шаблоном неизбежно приведет к пропускам в заполнении тех или иных значений ... что будете делать с недоопределенными значениями?

А ещё веселее будет, когда новоиспеченный пользователь шаблона захочет его "поправить", ибо этот параметр называется вовсе не "длина", а "ширина", а тот "толщина", а не высота... :)
10 сен 15, 22:09    [18135202]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3430
Arhat109,

Ну и под занавес: что будете делать с сокращениями значений и ваще с их разнокалиберным написанием?

вот к примеру "л." - это "листов", "литров" или чего ишо? Требование писать только верно - приведет к извечному "а я так вижу!" и? :)
10 сен 15, 22:11    [18135206]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3430
Arhat109,

Ну и поле id_task у вас использовано избыточно. Одно использование - точно лишнее. :)
10 сен 15, 22:15    [18135213]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Arhat109
А ещё веселее будет, когда новоиспеченный пользователь шаблона захочет его "поправить", ибо этот параметр называется вовсе не "длина", а "ширина", а тот "толщина", а не высота... :)
Гы... вспомнился offtop
мужчины для измерения габаритных предметов используют 3 характеристики: высота, ширина, длина
У женщин тоже 3 характеристики, но немного другие: высота, ширина, глубина

физиология-с
10 сен 15, 22:56    [18135302]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3430
Cygapb-007,

Да просто я этой темой с перерывами занимаюсь с 2000-го года. Когда ещё на Access-97 забабахал себе прогу "автоматизированный снабженец" ... тогда это ещё не называлось так громко - "EAV" (Тенцер ещё не писал свою статью), а просто: "хранение данных повдоль: одна запись - одно свойство" против обычного "поперек: одна запись - весь набор свойств, колонок" ...

Так вот тогда и появилась "эйфория": да ща мы весь мир в БД запих*ем! Ага ... так это "щазз" и тянется... хотя, современные компы, в целом, уже позволяют утверждать что "решение близко". :)
11 сен 15, 07:58    [18135709]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
Arhat109
Таблички со значениями разных типов - имеют смысл, который становится особо понятен, когда вы упретесь в вычисляемые и диапазонные значения "размеры с 36-го по 45-й" ... :)

Я, правда, не каждый день такие базы клепаю, да и записей там обычно меньше миллиарда... но вот когда возникла именно такая надобность - диапазонные отборы и вычисления,- я пошёл по пути "одна таблица, но несколько полей". Т.е. стринговое поле заполнено всегда, а из остальных заполнены только те, которые приводимы. Типа
CREATE TABLE EAV_data (
id BIGINT AI PK,
sValue VARCHAR(255) NOT NULL,
lValue BIGINT,
dValue DOUBLE,
dtValue DATETIME
)
11 сен 15, 09:32    [18135924]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
hurt3
Member

Откуда:
Сообщений: 11
блин ну ппц а решать нужно, есть более простое решение?
11 сен 15, 10:50    [18136466]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
hurt3
Member

Откуда:
Сообщений: 11
Akina
а смысл? яица в одну корзину

Arhat109

>А, ну ещё ... предоставление другому автору права на пользование товарным шаблоном неизбежно приведет к пропускам в >заполнении тех или иных значений ... что будете делать с недоопределенными значениями?

это можно обыграть запросом sql, или через php

>вот к примеру "л." - это "листов", "литров" или чего ишо? Требование писать только верно - приведет к извечному "а я так вижу!" и? >:)

определение типа измеряемой единицы в отдельной таблице

все это ничего, и решение на php можно разработать и прочие мелочи учесть. Смущает один момент -фактически создается новая бд из mysql и php, и я чувствую что это не верный подход, но как иначе решить задачу не знаю, задаю этот вопос на 3 форумах в итоге все по 0. Я не прошу за меня думать но хотя бы какую то наметку получить
11 сен 15, 10:58    [18136529]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3430
hurt3,

Дык, вам об том и пишут, что полноценного решения до сих пор нет ... никакого. Я вам привел список ожидающих вас проблем "первого уровня", что вспомнил, на память ... это далеко не "огласите весь список пжалста!" :) Там ишо проблема очепяток и синонимии вкупе с "отображением", контекстно разного смысла у разных "авторов", утерянного контекста и его восстановления (проблема поисковиков ... Яндекс), поиска "аналогов", желании продавцов продавать свой, уникальный аналог ... и т.д.

Решение лучше или хуже - возможно только при задании сильных ограничений на задачу "в целом". Вот и уточняйте свое ТЗ до "приемлемого" уровня. В таком виде - сказать "есть ли лучше" - низзя. Я уже скока лет занимаюсь этим вопросом (периодически, ктобы платил...). :)
11 сен 15, 11:02    [18136560]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3430
hurt3,

"все бы ничего, но создается новая БД..."

Конечно. Любое клиентское приложение (Скуль + клиент) - завсегда и есть такая "БД". Скуль "сам по себе" - всего лишь инструмент .. Система Управления Базами Данных (СУБД)

как-то так. :)

P.S.

Посмотрите в сторону Cache и Mumps ... там есть ряд очень вкусных решений как раз этой задачи (EAV). Тока "не пугайтесь". :)
11 сен 15, 11:05    [18136572]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
hurt3
а смысл?

Привязывать одну таблицу, пусть и вдвое бОльшую, дешевле, чем четыре.
11 сен 15, 11:54    [18136975]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
hurt3
Member

Откуда:
Сообщений: 11
Arhat109 , Akina спасибо большое

>Посмотрите в сторону Cache и Mumps ...

нужно почитать тему не закрывайте, думаю дискуссия продолжится после изучения материала
11 сен 15, 12:13    [18137123]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
hurt3
Member

Откуда:
Сообщений: 11
>Посмотрите в сторону Cache и Mumps ...

да что то уже более похожее на нужное решение, хоть и в стиле алгебры древнего египта
11 сен 15, 14:40    [18138174]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
hurt3
Member

Откуда:
Сообщений: 11
господа а что можете сказать о Redis ? может быть его лучше применить?
11 сен 15, 14:45    [18138215]     Ответить | Цитировать Сообщить модератору
 Re: паттерн EAV  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3897
может в будущее... CUBRID ...
11 сен 15, 16:02    [18138761]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить