|
|
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
добрый день, к сути вопроса, есть приложение в нем регятся пользователи, пользователи могут создавать свои типы товаров, у каждого типа товара свои поля ну и соответственно можно заводить товары по созданным типам. для реализации подобной задачи принято решение использовать паттерн 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.09.2015, 17:36:16 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
hurt3для отдельного типа данных -числа строки текст дата , заводится своя отдельная таблица А смысл? максимум что будет по таким полям - это фильтрация/поиск. Почему тогда не использовать универсальный тип и конвертацию? тем более что в MySQL типизация, мягко говоря, не очень, а автоприведение типов торчит из всех щелей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 18:25:09 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
у нас может быть 10 000 пользователей, каждый пользователь может создать 1000 и более товарных шаблонов, ив каждом товарном шаблоне может быть неограниченное количество свойств для товара я думал вначале создать под отдельный шаблон отдельную таблицу но если база будет содержать 10000000 таблиц это не нормально или нет? или какое решение вы можете предложить? общие свойства могут быть типа размер или цвет но они будут в кардинальном меньшинстве, поэтому затачивать функционал под них отдельно бессмысленно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 18:32:14 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Это не просто ненормально... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 21:13:24 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
так и какую реализацию задачи посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 21:32:23 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
hurt3, Вполне решаемый подход. Примерно так и делал одному из заказчиков года 2-3 назад. Относительно живой сервер с 16 гектарами вполне тащил до 5млн товаров с примерно по 15 параметров на каждый. Таблички со значениями разных типов - имеют смысл, который становится особо понятен, когда вы упретесь в вычисляемые и диапазонные значения "размеры с 36-го по 45-й" ... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 22:00:07 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Arhat109, Да, забылось уже: вам ещё потребуется один тип значений - индексный. Это когда значение - определяет номер (ид) другого товара. Например "упаковка" - картонная коробка 40х30х60, гофрокартон 2мм. Или ещё такой идиотизм как "набор столовых предметов 7шт: 3 вилки + 3 ложки + зубочистка" ... ну, с комплектами и наборами вам повозится все одно придется. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 22:04:16 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Arhat109, А, ну ещё ... предоставление другому автору права на пользование товарным шаблоном неизбежно приведет к пропускам в заполнении тех или иных значений ... что будете делать с недоопределенными значениями? А ещё веселее будет, когда новоиспеченный пользователь шаблона захочет его "поправить", ибо этот параметр называется вовсе не "длина", а "ширина", а тот "толщина", а не высота... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 22:09:17 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Arhat109, Ну и под занавес: что будете делать с сокращениями значений и ваще с их разнокалиберным написанием? вот к примеру "л." - это "листов", "литров" или чего ишо? Требование писать только верно - приведет к извечному "а я так вижу!" и? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 22:11:55 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Arhat109, Ну и поле id_task у вас использовано избыточно. Одно использование - точно лишнее. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 22:15:49 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Arhat109А ещё веселее будет, когда новоиспеченный пользователь шаблона захочет его "поправить", ибо этот параметр называется вовсе не "длина", а "ширина", а тот "толщина", а не высота... :)Гы... вспомнился offtop мужчины для измерения габаритных предметов используют 3 характеристики: высота, ширина, длина У женщин тоже 3 характеристики, но немного другие: высота, ширина, глубина физиология-с ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2015, 22:56:07 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, Да просто я этой темой с перерывами занимаюсь с 2000-го года. Когда ещё на Access-97 забабахал себе прогу "автоматизированный снабженец" ... тогда это ещё не называлось так громко - "EAV" (Тенцер ещё не писал свою статью), а просто: "хранение данных повдоль: одна запись - одно свойство" против обычного "поперек: одна запись - весь набор свойств, колонок" ... Так вот тогда и появилась "эйфория": да ща мы весь мир в БД запих*ем! Ага ... так это "щазз" и тянется... хотя, современные компы, в целом, уже позволяют утверждать что "решение близко". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 07:58:59 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Arhat109Таблички со значениями разных типов - имеют смысл, который становится особо понятен, когда вы упретесь в вычисляемые и диапазонные значения "размеры с 36-го по 45-й" ... :) Я, правда, не каждый день такие базы клепаю, да и записей там обычно меньше миллиарда... но вот когда возникла именно такая надобность - диапазонные отборы и вычисления,- я пошёл по пути "одна таблица, но несколько полей". Т.е. стринговое поле заполнено всегда, а из остальных заполнены только те, которые приводимы. Типа CREATE TABLE EAV_data ( id BIGINT AI PK, sValue VARCHAR(255) NOT NULL, lValue BIGINT, dValue DOUBLE, dtValue DATETIME ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 09:32:28 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
блин ну ппц а решать нужно, есть более простое решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 10:50:00 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Akina а смысл? яица в одну корзину Arhat109 >А, ну ещё ... предоставление другому автору права на пользование товарным шаблоном неизбежно приведет к пропускам в >заполнении тех или иных значений ... что будете делать с недоопределенными значениями? это можно обыграть запросом sql, или через php >вот к примеру "л." - это "листов", "литров" или чего ишо? Требование писать только верно - приведет к извечному "а я так вижу!" и? >:) определение типа измеряемой единицы в отдельной таблице все это ничего, и решение на php можно разработать и прочие мелочи учесть. Смущает один момент -фактически создается новая бд из mysql и php, и я чувствую что это не верный подход, но как иначе решить задачу не знаю, задаю этот вопос на 3 форумах в итоге все по 0. Я не прошу за меня думать но хотя бы какую то наметку получить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 10:58:37 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
hurt3, Дык, вам об том и пишут, что полноценного решения до сих пор нет ... никакого. Я вам привел список ожидающих вас проблем "первого уровня", что вспомнил, на память ... это далеко не "огласите весь список пжалста!" :) Там ишо проблема очепяток и синонимии вкупе с "отображением", контекстно разного смысла у разных "авторов", утерянного контекста и его восстановления (проблема поисковиков ... Яндекс), поиска "аналогов", желании продавцов продавать свой, уникальный аналог ... и т.д. Решение лучше или хуже - возможно только при задании сильных ограничений на задачу "в целом". Вот и уточняйте свое ТЗ до "приемлемого" уровня. В таком виде - сказать "есть ли лучше" - низзя. Я уже скока лет занимаюсь этим вопросом (периодически, ктобы платил...). :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 11:02:58 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
hurt3, "все бы ничего, но создается новая БД..." Конечно. Любое клиентское приложение (Скуль + клиент) - завсегда и есть такая "БД". Скуль "сам по себе" - всего лишь инструмент .. Система Управления Базами Данных (СУБД) как-то так. :) P.S. Посмотрите в сторону Cache и Mumps ... там есть ряд очень вкусных решений как раз этой задачи (EAV). Тока "не пугайтесь". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 11:05:45 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
hurt3а смысл? Привязывать одну таблицу, пусть и вдвое бОльшую, дешевле, чем четыре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 11:54:59 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
Arhat109 , Akina спасибо большое >Посмотрите в сторону Cache и Mumps ... нужно почитать тему не закрывайте, думаю дискуссия продолжится после изучения материала ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 12:13:13 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
>Посмотрите в сторону Cache и Mumps ... да что то уже более похожее на нужное решение, хоть и в стиле алгебры древнего египта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 14:40:59 |
|
||
|
паттерн EAV
|
|||
|---|---|---|---|
|
#18+
господа а что можете сказать о Redis ? может быть его лучше применить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 14:45:40 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39048534&tid=1832729]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 298ms |

| 0 / 0 |
