|
|
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
еще вариант с наследованием : продукт принадлежит одной из групп группа определяет набор свойств продукта PRODUCTS ---------------- product_id (PK) group_id (FK) product_name GROUPS -------------- group_id (PK) group_name PROPERTIES ------------------ property_id (PK) group_id (FK) property_name PRODUCTS_PROPERTIES ----------------------------------- product_id (FK, PK1) property_id (FK, PK1) property_value получился у меня EAV (в PRODUCTS_PROPERTIES) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 21:18 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за ответы !! Вы реально помогли ! Вот исправленная таблица с наследованием. Теперь все верно? Но как вычитал для MySQL это не подходит (т.к СУБД не поддерживает наследование), т.е. одни и те же данные из goods можно добавить одновременно и в printers и в mobile.(А должно как я описывал выше только для одного товара одна характеристика и если задана, то во вторую уже нельзя добавить ). Тогда делать, как предложили tip78 ? Если сделать как говорит tip78 (как понял это модель EAV), то , что в таблице props2goods, будет содержаться по 10, 20 …. 1000 записей такое типа: 1 1 2 red 2 1 3 red 3 1 5 red 4 1 7 red 5 1 9 red Это нормально? В таблице props2goods, часто будут повторяться название характеристики, так и должно быть ? И последнее , как понял модель EAV часто используется в рабочих проектах (если брать в расчет то, что используется MySQL) ? авторя поддержу tip78 и проголосую за old school и стандартные структуры :) Правильно ли я понял, что это либо EAV либо как я написал в первом посте (где в таблице будет много NULL) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 00:58 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0Всем спасибо за ответы !! Вы реально помогли ! Вот исправленная таблица с наследованием. Теперь все верно? Но как вычитал для MySQL это не подходит (т.к СУБД не поддерживает наследование), т.е. одни и те же данные из goods можно добавить одновременно и в printers и в mobile.(А должно как я описывал выше только для одного товара одна характеристика и если задана, то во вторую уже нельзя добавить ). Тогда делать, как предложили tip78 ? "не поддерживает наследование" - это значит "нет специальных конструкций для реализации наследования". Реализовывать наследование "вручную", просто вставляя данные поочередно в 2 таблицы, Вам все равно помешать никто не может. Если Вам важен контроль на уровне БД отсутствия дублей - Вы можете реализовать его либо с помощью триггера, либо составным ключом и ограничением check. В любом случае с контролем целостности данных в EAV все гораздо хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 02:28 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0 В таблице props2goods, часто будут повторяться название характеристики, так и должно быть ?Ну там может быть не только название, а например код или айди. hwt0 понял модель EAV часто используется в рабочих проектахиз-за недостаточного знания предметной области свойства объектов часто добавляются и удаляются. При этом данных в таких таблицах немного. В эксплуатации, однако, это выходит боком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 02:49 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинВ любом случае с контролем целостности данных в EAV все гораздо хуже.Проблемы есть, но они легко решаемы. Вполне достаточно при сохранении/удалении вызывать некую ф-цию, кот. проверит соответствие данных бизнес-правилам и разрешит или отклонит действие. Ставить триггеры/констрайнты глупо. Они ничего не решают. Только мешают. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 09:10 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
LSVКот МатроскинВ любом случае с контролем целостности данных в EAV все гораздо хуже.Проблемы есть, но они легко решаемы. Вполне достаточно при сохранении/удалении вызывать некую ф-цию, кот. проверит соответствие данных бизнес-правилам и разрешит или отклонит действие. На уровне БД - нет, при доступе стороннего клиента все полетит к черту. А функцию можно вызывать хоть при сохранении в текстовые файлы - это не значит что при хранении в текстовых файлах все прекрасно с целостностью данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 09:46 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0, авторПравильно ли я понял, что это либо EAV либо как я написал в первом посте (где в таблице будет много NULL) ? нет неправильно, таблица в первом посте это нопасаран. без вариантов. про EAV ничего сказать не могу, т.к. не совсем понимаю, что это такое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 10:16 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
mini.weblab про EAV ничего сказать не могу, т.к. не совсем понимаю, что это такое 19114706 - это и есть EAV, самый "классический", на 4х таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 10:24 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, спасибо! учитывая, что мои знания про EAV ограничиваются расшифровкой аббревиатуры, рада, что у меня получилось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 10:33 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинLSVпропущено... Проблемы есть, но они легко решаемы. Вполне достаточно при сохранении/удалении вызывать некую ф-цию, кот. проверит соответствие данных бизнес-правилам и разрешит или отклонит действие. На уровне БД - нет, при доступе стороннего клиента все полетит к черту. А функцию можно вызывать хоть при сохранении в текстовые файлы - это не значит что при хранении в текстовых файлах все прекрасно с целостностью данных.Дык дайте клиенту ХП, кот. делает нужную операцию: редактирует/удаляет и пр. ХП всегда отработает одинаково. Ниодну БД невозможно защитить от порчи данных сторонним ПО, имеющим доступ на запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 11:23 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
LSVКот Матроскинпропущено... На уровне БД - нет, при доступе стороннего клиента все полетит к черту. А функцию можно вызывать хоть при сохранении в текстовые файлы - это не значит что при хранении в текстовых файлах все прекрасно с целостностью данных.Дык дайте клиенту ХП, кот. делает нужную операцию: редактирует/удаляет и пр. Это и называется "с целостностью данных все очень плохо". "В нашей гостинице нет проблем с удобствами - биотуалет и тазик можно привезти с собой, а воду набрать на колонке в соседнем квартале!". Если так рассуждать - то да, проблем с целостностью у EAV нет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 12:07 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинЕсли так рассуждать - то да, проблем с целостностью у EAV нет :) что за проблемы то, можете пример привести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 13:01 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0Если сделать как говорит tip78 (как понял это модель EAV), то , что в таблице props2goods, будет содержаться по 10, 20 …. 1000 записей такое типа: 1 1 2 red 2 1 3 red 3 1 5 red 4 1 7 red 5 1 9 red Это нормально? В таблице props2goods, часто будут повторяться название характеристики, так и должно быть ? есессно, у них ведь разные родители если одного родителя удалят, он заберёт с собой свою запись, а не чужую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 13:03 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78Кот МатроскинЕсли так рассуждать - то да, проблем с целостностью у EAV нет :) что за проблемы то, можете пример привести? Например, реализация ограничения not null для атрибута. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 13:46 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинtip78пропущено... что за проблемы то, можете пример привести? Например, реализация ограничения not null для атрибута. это валидация формы при сабмите, делается в самом PHP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 13:55 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, задание ограничения NOT NULL в базе не подойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 14:05 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
mini.weblabКот Матроскин, задание ограничения NOT NULL в базе не подойдет?Не пойдет т.к. речь про конкретный атрибут. Вообще говоря хранить EAV-запись с NULL - бред. Достаточно просто ее удалить. Не ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 14:22 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78Кот Матроскинпропущено... Например, реализация ограничения not null для атрибута. это валидация формы при сабмите, делается в самом PHP Я про это и говорю - декларативными ограничениями в базе при EAV этого сделать нельзя. (и даже программными - непросто) Мы тут все-таки на PHP обсуждаем :) mini.weblab задание ограничения NOT NULL в базе не подойдет? Нет, конечно - работать не будет. Для какого поля в Вашей структуре надо задать NOT NULL, чтобы любой продукт обязательно имел заполненный атрибут "Цвет"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 14:29 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
LSV, если я задам ограничение в базе, вы просто туда не сможете внести записи с пустым значением атрибута стирать ничего не придется не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 14:30 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, я говорила о таблице PRODUCTS_PROPERTIES и буду прописывать ограничение NOT NULL на property_value PRODUCTS_PROPERTIES ----------------------------------- product_id (FK, PK1) property_id (FK, PK1) property_value авторНет, конечно - работать не будет. Для какого поля в Вашей структуре надо задать NOT NULL, чтобы любой продукт обязательно имел заполненный атрибут "Цвет"? в моей структуре просто оговаривается множество свойств для продуктов группы структура не обязывает прописывать каждое свойство для каждого продукта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 14:46 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
mini.weblabКот Матроскин, я говорила о таблице PRODUCTS_PROPERTIES и буду прописывать ограничение NOT NULL на property_value PRODUCTS_PROPERTIES ----------------------------------- product_id (FK, PK1) property_id (FK, PK1) property_value авторНет, конечно - работать не будет. Для какого поля в Вашей структуре надо задать NOT NULL, чтобы любой продукт обязательно имел заполненный атрибут "Цвет"? в моей структуре просто оговаривается множество свойств для продуктов группы структура не обязывает прописывать каждое свойство для каждого продукта Еще раз - я хочу прописать в базе, что нельзя создать продукт без заполненного свойства "цвет". В традиционной структуре мне для этого нужен один щелчок мышки. Что мне делать в Вашей структуре? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 14:52 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
"Довольно часто встречаются приложения, построенные с использованием универсальных моделей данных для максимальной гибкости, и приложения, построенные так, что они мешают работе. Например, хорошо известно, что можно представить любой объект в базе данных используя только четыре таблицы: create table objects (oid int pimary key, name varchar2(255)); create table attributes (attrid int primary key, attrname varchar2(255), datatype varchar2(25)); create table object_attributes (oid int, attrid int, value varchar2(4000), primary key (oid,attrid)); create table links (oid1 int, oid2 int, primary key (oid1, oid2)); Но как такая модель работает ? Простой запрос select first_name, last_name from person трансформируется в соединение трех таблиц с аггрегированием, более того, если имеются атрибуты NULLABLE - в таком случае может не быть строки в таблице object_attributes для некоторых атрибутов, - возможно, возникнет необходимость использовать внешнее соединение, которое может исключить оптимальные планы запросов из рассмотрения. Мой совет всем: будьте более специализированы м менее универсальными. Несомненно, общий подход более гибкий, но менее производительный, более сложный, с точки зрения формирования запросов и сопровождения. Не используется словарь данных и метаданные. Те, кто применяет универсальный подход, загоняют себя в угол." (с) Том Кайт "Эффективное проектирование приложений Oracle" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 14:54 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
mini.weblabLSV, если я задам ограничение в базе, вы просто туда не сможете внести записи с пустым значением атрибута стирать ничего не придется не?Этого не достаточно. Пустота - сложное понятие. Один пробел это пустота ? А ноль (для чисел) пустота ? Комплексная проверка ввода - непростое понятие. Пустота - самый простой случай. Самое интересное - запрет ввода недопустимых значений. Во где все приколы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 14:56 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
mini.weblab, кстати, работала с EAV данными: и то, что авторлюбой продукт НЕ обязательно имеЕТ заполненный атрибут "Цвет"? достоинство структуры, а не недостаток все дело в том, какую задачу вы хотите решаете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 15:00 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинЕще раз - я хочу прописать в базе, что нельзя создать продукт без заполненного свойства "цвет". В традиционной структуре мне для этого нужен один щелчок мышки. Что мне делать в Вашей структуре? очевидно, не использовать мою структуру :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 15:03 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39226149&tid=1540349]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 399ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...