|
|
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, помогите понять, как правильно сделать схему базы данных. Суть в том, что есть разные типы товара с разными характеристиками, если сделать как у меня на схеме , то всегда будут оставаться поля со значение NULL того или иного типа товара( как я понимаю так делать не нужно ) или все-таки это не так критично ? Алгоритм работы простой, человек оформляет заявку , выбирает из базы соответствующий товар(принтер, мобильник и так далее) . П.С. схема никакая не дипломная\курсавая , просто разобраться хочу. Схема нарисована для примера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2016, 17:55 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0если сделать как у меня на схеме , то всегда будут оставаться поля со значение NULL того или иного типа товара( как я понимаю так делать не нужно ) или все-таки это не так критично ? Пока все атрибуты умещаются по количеству в одну таблицу - не так критично. Можно делать наследование - т.е. таблицу "товары" и несколько дочерних таблиц "мобильники", "принтеры" и т.п. с ссылкой на главную таблицу "товары". В "товарах" у Вас будет IDНазвание1 Мобильник IPHONE2 Принтер Canon, а в дочерних - по одной записи с соответствующими характеристиками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2016, 18:20 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0всегда будут оставаться поля со значение NULL того или иного типа товара( как я понимаю так делать не нужно ) Дейта начитался? Тогда тебе прямая дорога к EAV. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2016, 19:05 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0, я сделала бы так: ORDERS: ------------- order_id product_id (FK) date product_name PRODUCTS ------------- product_id product_name product_description комментарий: в поле product_description помещаем свойства продукта допустим нас это по каким-то причинам не устраивает, тогда можно перейти к 4НФ, схема следующая: ORDERS: ------------- order_id product_id (FK) date product_name PRODUCTS ------------- product_id product_name PROPERTIES ------------- property_id product_id (FK) property_name ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2016, 20:07 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, EAV это то же, что и BCNF? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2016, 20:10 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Поддержу Матроскина, а для разобраться поищите на этом форуме реализацию наследования с одной, двумя и тремя таблицами. А также в каких условиях та или иная реализация будет выгодной. mini.weblab EAV это то же, что и BCNF?Совсем разные вещи https://en.wikipedia.org/wiki/Boyce–Codd_normal_form https://en.wikipedia.org/wiki/Entity–attribute–value_model ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2016, 00:09 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0Здравствуйте, помогите понять, как правильно сделать схему базы данных. это всю жизнь было так: таблица товаров (goods) + таблица названий свойств (prop_name) + таблица свойств товаров (props2goods) вы просто в товар набираете нужные свойства + их кол-во ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2016, 01:44 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0, тебе надо изучать подкатегории, оно же Наследование. найди что типа "subcategory relationship" достаточно хорошо всё это очень в документации на hibernate, Там можно почитать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2016, 06:15 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за ответы! Таблица goods имеет отношения с таблицей mobile (idgoods - idmobile) оба они первичные ключи. Таблица goods имеет отношения с таблицей printers (idgoods - idprinters) оба они первичные ключи. Ну и так далее…. Размещаться данные будут так. Category Id | name 1 | принтеры 2 | мобильники 3 | телики Goods Id | name | id category 1 | Laserjet Pro 232 | 1 2 | Laserjet Pro 282 | 1 3 | Iphone 5s | 2 4 | Laserjet Pro 112 | 1 5 | UE22H5600 | 3 Printers Id | Interface 1 | 1 2 | 1 4 | 2 Mobile Id | colorId 3 | 1 Televisor Id | diagonal 5 | 2 Записать характеристику в таблице mobile, televisor, printers можно только только тогда, когда в таблице goods есть не при присвоенная запись к одной из записи 3-х этих таблиц (mobile, televisor, printers ). Правильно ли я понял идею с наследованием ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2016, 21:21 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
hwt0Правильно ли я понял идею с наследованием ? нет Printers, Mobile и Televisor это 1 таблица, таблица названий свойств - `prop_name` она содержит вообще все возможные св-ва в магазине содержимое этих свойств в каждом товаре это другая таблица - `props2goods` ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 17:29 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78hwt0Правильно ли я понял идею с наследованием ? нет Printers, Mobile и Televisor это 1 таблица, таблица названий свойств - `prop_name` она содержит вообще все возможные св-ва в магазине содержимое этих свойств в каждом товаре это другая таблица - `props2goods` Не надо путать человека - паттерн "наследование" он понял совершенно правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 17:45 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинtip78пропущено... нет Printers, Mobile и Televisor это 1 таблица, таблица названий свойств - `prop_name` она содержит вообще все возможные св-ва в магазине содержимое этих свойств в каждом товаре это другая таблица - `props2goods` Не надо путать человека - паттерн "наследование" он понял совершенно правильно. не знаю, что вы там поняли, но лично я читаю его таблицы и вижу, что они неправильные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 21:11 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78 лично я читаю его таблицы и вижу, что они неправильные Да мы уже поняли что ты фанат EAV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 21:26 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78Кот Матроскинпропущено... Не надо путать человека - паттерн "наследование" он понял совершенно правильно. не знаю, что вы там поняли, но лично я читаю его таблицы и вижу, что они неправильные Расскажите, что в них неправильного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 00:28 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинtip78пропущено... не знаю, что вы там поняли, но лично я читаю его таблицы и вижу, что они неправильные Расскажите, что в них неправильного? неправильно разбивать каждую группу товаров по отдельным таблицам свойств у него принтеры это одна таблица свойств, мобильники - другая, итд не видите чтоли или по-вашему это норма? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 02:18 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, отношения между таблицами по-моему неверны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 09:31 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
mini.weblabотношения между таблицами по-моему неверны Отношения на схеме - да, отношения между goods и printers/mobiles/... должны быть 1:0..1, а не 1:n. Но это, видимо, просто ошибка в схеме, написал-то ТС правильно Таблица goods имеет отношения с таблицей printers (idgoods - idprinters) оба они первичные ключи. tip78 неправильно разбивать каждую группу товаров по отдельным таблицам свойств у него принтеры это одна таблица свойств, мобильники - другая, итд Еще раз - это называется "наследование типов". Погуглите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 10:33 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Таблица goods имеет отношения с таблицей printers (idgoods - idprinters) оба они первичные ключи. вообще-то, idgoods это FK (в общем должно быть весело) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 10:42 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
mini.weblab, В какой таблице idgoods - FK? я говорил про goods и printers/mobiles/... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 10:46 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, я думала, что idgoods в таблице goods будет FK по отношению к соотв. id в таблицах printers, mobile, televisor хотя авторотношения между goods и printers/mobiles/... должны быть 1:0..1 по-вашему получается, что свойства вы будете хранить не для всех товаров... в любом случае, без foreign key не обойтись (обеспечение целостности данных) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 11:13 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
mini.weblabКот Матроскин, я думала, что idgoods в таблице goods будет FK по отношению к соотв. id в таблицах printers, mobile, televisor Наоборот - IDPrinter будет FK к IDGoods. Сперва создается запись в goods, потом - в printers Иначе Вам будет сложно сделать "сквозную" нумерацию товаров. mini.weblabхотя авторотношения между goods и printers/mobiles/... должны быть 1:0..1 по-вашему получается, что свойства вы будете хранить не для всех товаров... Почему - для всех. Но не все товары являются принтерами, поэтому не для каждой записи в goods есть соответствующая запись в printers. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 11:32 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, надеюсь, что делать сквозную нумерацию мне не придется я поддержу tip78 и проголосую за old school и стандартные структуры :) в любом случае, работать с базой будет непросто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 11:48 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинmini.weblabотношения между таблицами по-моему неверны Отношения на схеме - да, отношения между goods и printers/mobiles/... должны быть 1:0..1, а не 1:n. Но это, видимо, просто ошибка в схеме, написал-то ТС правильно Таблица goods имеет отношения с таблицей printers (idgoods - idprinters) оба они первичные ключи. tip78 неправильно разбивать каждую группу товаров по отдельным таблицам свойств у него принтеры это одна таблица свойств, мобильники - другая, итд Еще раз - это называется "наследование типов". Погуглите. ну вообще-то называется "наследование таблиц" и... вы сами то вникали? именно это я и называю "неправильно" вы выбрали чуть меньший размер БД в ущерб скорости хотя у ТС магазин и для таких задач важнее скорость (строго говоря, скорость важнее практически для любых задач, разве что бэкапам пофиг, а размер там дело десятое) вы бы, на досуге, редис для себя открыли (ваша очередь гуглить), подивились бы, как там дела обстоят с соотношением размер/скорость но там сжатие например есть, оно чуть спасает хотя и не особо надо зато 100к запросов в секунду расскажите им про наследования... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 13:53 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
кстати, вот ссылка от IBM авторFigure 4. Mapping each class to its own data entity The main advantage of this approach is that it conforms best to object-oriented concepts. It supports polymorphism very well as you merely have records in the appropriate tables for each role that an object might have. It is also very easy to modify superclasses and add new subclasses because you merely need to modify or add one table. There are several disadvantages to this approach. First, there are many tables in the database -- one for every class, in fact (plus tables to maintain relationships). Second, it takes longer to read and write data using this technique because you have to access multiple tables. This problem can be alleviated if you organize your database intelligently by putting each table within a class hierarchy on different physical disk-drive platters (this assumes that each of the disk-drive heads operate independently). Third, ad hoc reporting on your database is difficult, unless you add views to simulate the desired tables. блабла полиморфизм, нафиг не нужный читаем про минусы (disadvantages) автор Second, it takes longer to read and write data using this technique because you have to access multiple tables. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 13:56 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78Кот Матроскинпропущено... Отношения на схеме - да, отношения между goods и printers/mobiles/... должны быть 1:0..1, а не 1:n. Но это, видимо, просто ошибка в схеме, написал-то ТС правильно пропущено... пропущено... Еще раз - это называется "наследование типов". Погуглите. ну вообще-то называется "наследование таблиц" и... вы сами то вникали? именно это я и называю "неправильно" вы выбрали чуть меньший размер БД в ущерб скорости Лолшто? EAV выигрывает по скорости запросов у классических таблиц? Ну давайте померяем, где будет быстрее работать фильтр, к примеру, по трем атрибутам. tip78читаем про минусы (disadvantages) Минусы по сравнению с чем ? Там в качестве альтернатив рассматриваются подходы "все держать в одной таблице" (то с чего начал ТС) и "сделать по одной таблице на каждый тип, дублируя одинаковые атрибуты". Никакого Вашего таблица товаров (goods) + таблица названий свойств (prop_name) + таблица свойств товаров (props2goods) нет в помине. А по сравнению с этими двумя способами - наследование, конечно, медленнее (хотя и на копейки) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 14:29 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
mini.weblabКот МатроскинЕще раз - я хочу прописать в базе, что нельзя создать продукт без заполненного свойства "цвет". В традиционной структуре мне для этого нужен один щелчок мышки. Что мне делать в Вашей структуре? очевидно, не использовать мою структуру :) Про что я и говорю - а mini.weblabзадание ограничения NOT NULL в базе -не поможет никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 15:12 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
LSVСамое интересное - запрет ввода недопустимых значений. Во где все приколы. :) а мы уже дошли до самого интересного? просто обсудили возможные структуры. следующий этап: посмотреть на тз, и принимая во внимание плюсы и минусы возможных подходов, выбрать наиболее подходящий вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 15:19 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, замечу, вашего требования не было в начальном ТЗ а так мои вам поздравления ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 15:30 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинЯ про это и говорю - декларативными ограничениями в базе при EAV этого сделать нельзя. (и даже программными - непросто) Мы тут все-таки на PHP обсуждаем :) это не значит, что надо валидацию формы в SQL тащить )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 15:50 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78Кот МатроскинЯ про это и говорю - декларативными ограничениями в базе при EAV этого сделать нельзя. (и даже программными - непросто) Мы тут все-таки на PHP обсуждаем :) это не значит, что надо валидацию формы в SQL тащить )) Какую "валидацию формы"? Это целостность данных , и очень хотелось бы, чтобы ограничения этой целостности лежали бы в одном месте - в СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 15:52 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78 что за проблемы то, можете пример привести?Шо опять? Да полфорума здесь ломаются копья. Побойтесь бога воспользуйтесь поиском. Я могу сделать за вас эту работу, но тогда пропадет воспитательный эффект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 15:54 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
SERG1257tip78 что за проблемы то, можете пример привести?Шо опять? Да полфорума здесь ломаются копья. Побойтесь бога воспользуйтесь поиском. Я могу сделать за вас эту работу, но тогда пропадет воспитательный эффект. ой, да вы уж так не напрягайтесь, пожалейте себя возвращайтесь на печь а мы уж тут как-то сами. пока что только из пальца высосана потребность непременно тащить сырые данные в БД, чтобы там их проверять... некрасиво прикрытая некой "целостностью данных", которой там в помине ничего не угрожало. эта половина программистов может и дальше убиваться обо всё, что ей взбредёт в голову учитывая, что 95% программистов вовсе не программисты, считаю это нормой ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 21:50 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78 тащить сырые данные в БДНе понял вашей сентенции. tip78 некрасиво прикрытая некой "целостностью данных", которой там в помине ничего не угрожало.вы хотите сказать констрейнты - зло? tip78 а мы уж тут как-то самиДа уж постарайтесь найдите второй неустранимый недостаток. Еще раз повторю - с точки зрения разработчика все хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 22:12 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78пока что только из пальца высосана потребность непременно тащить сырые данные в БД, чтобы там их проверять... некрасиво прикрытая некой "целостностью данных", которой там в помине ничего не угрожало. Не, это как-то вяловато :) Вот когда Вы жгли про преимущества EAV в скорости запросов - вот это был да, трэш и угар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2016, 23:36 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Стыдно, господа. Вас из вашей серости пытается вытащить крупный специалист, остальное в его профиле. А вы ещё ерепенитесь. Признайте уж вашу закоснелость и спрячьте тела где-нибудь в утёсах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2016, 00:31 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
SERG1257tip78 тащить сырые данные в БДвы хотите сказать констрейнты - зло? я говорю, что пустышка или нет проверяется на этапе валидации формы валидация формы это в любом случае процедура обязательная и получается, что своим констрейнтом на NOT NULL вы делаете двойную работу но это не главное, главное, что в 99% случаев БД вообще не нужно трогать, до тех пор, пока не случится INSERT/UPDATE (иногда надо конечно проверить, чтобы нужные данные присутствовали в БД, но это другое) потому что БД это всегда самое узкое место в приложении вы же предлагаете через дёрганье БД проверять NULL там или NOT NULL это совершенно непрофессионально, как по мне когда !== '' или !empty() в PHP не создаёт никакой нагрузки и когда тут столько разговоров про замену привычной и удобной структуры таблиц, а в итоге причиной является совершенно ненужная проверка в БД на NOT NULL, это, мягко говоря, вызывает недоумение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2016, 11:59 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78SERG1257пропущено... вы хотите сказать констрейнты - зло? я говорю, что пустышка или нет проверяется на этапе валидации формы валидация формы это в любом случае процедура обязательная и получается, что своим констрейнтом на NOT NULL вы делаете двойную работу но это не главное, главное, что в 99% случаев БД вообще не нужно трогать, до тех пор, пока не случится INSERT/UPDATE (иногда надо конечно проверить, чтобы нужные данные присутствовали в БД, но это другое) потому что БД это всегда самое узкое место в приложении Ерунда, конечно. При вводе номенклатуры товаров (мы, если что, обсуждаем номенклатуру товаров) БД- самое узкое место? Ха-ха три раза. Сколько в Вашем интернет-магазине описывается новых товаров в сутки ( через PHP-шные формы, да)? хотя бы 100к есть? Собственно, повторяется история с IBM-овской статьей про наследование - Вы где-то вычитали фразу "БД это всегда самое узкое место в приложении", но даже не попытались задуматься "А к чему она относится? А в каких случаях она применима?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2016, 12:38 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78, Основы проектировани БДдля определения перечня и структуры хранимых данных надо собрать информацию о реальных и потенциальных приложениях, а также о пользователях базы данных, а при построении инфологической модели следует заботиться лишь о надежности хранения этих данных, напрочь забывая о приложениях и пользователях, для которых создается база данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2016, 18:30 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинtip78пропущено... я говорю, что пустышка или нет проверяется на этапе валидации формы валидация формы это в любом случае процедура обязательная и получается, что своим констрейнтом на NOT NULL вы делаете двойную работу но это не главное, главное, что в 99% случаев БД вообще не нужно трогать, до тех пор, пока не случится INSERT/UPDATE (иногда надо конечно проверить, чтобы нужные данные присутствовали в БД, но это другое) потому что БД это всегда самое узкое место в приложении Ерунда, конечно. При вводе номенклатуры товаров (мы, если что, обсуждаем номенклатуру товаров) БД- самое узкое место? Ха-ха три раза. Сколько в Вашем интернет-магазине описывается новых товаров в сутки ( через PHP-шные формы, да)? хотя бы 100к есть? Собственно, повторяется история с IBM-овской статьей про наследование - Вы где-то вычитали фразу "БД это всегда самое узкое место в приложении", но даже не попытались задуматься "А к чему она относится? А в каких случаях она применима?" а вы за описанием товаров не прячьтесь, это не поможет )) если вы проверяете NOT NULL через БД, значит так делаете всегда, потому что вам почему-то в голову не приходит, что данные перед походом в БД должны быть проверены. Что может случиться ДДоС на любой из этих форм и тогда вы увидите не 100к в день, а в секунду, потому что L7 это самая вкусняшка, её все любят. Что грамотное программирование должно быть везде, и в особенности там, где вам кажется, что "нагрузки нету и всё обойдётся". "Фразу я вычитал" у хайлоадеров, которые twitter, pinterest, facebook, muut.com (полностью на REDIS кстати) и прочие. Но ещё мне "повезло" реально влетать на бизнес-приложениях в простои, которые влекут потери моих уже денег и, что куда дороже, репутации. Мой опыт, сын ошибок трудных, меня научил каждую мелочь учитывать и ожидать всего, поэтому я просчитываю все случаи. честно я вообще не понимаю, как кому-то с опытом в голову может придти через базу там что-то проверять, кроме самих данных в этой базе дикость ^^ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2016, 21:43 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78 если вы проверяете NOT NULL через БД, значит так делаете всегда, Не мы проверяем, а СУБД проверяет перед записью, и не только NOT NULL, но и любые другие ограничения. tip78 что данные перед походом в БД должны быть проверены.Да проверяйте конечно, кто вам мешает, это бысто дешево и практично. Просто обычно с одной базой работает более одного приложения. tip78 "Фразу я вычитал" у хайлоадеров, которые twitter, pinterest, facebook, muut.com (полностью на REDIS кстати) и прочие.Ээ, а ты в своей машине руль на спортивный поменял? И не забудь про выхлопную трубу и клиренс занизить, я формулу один смотрел там все так делают. tip78 Но ещё мне "повезло" реально влетать на бизнес-приложениях в простои, которые влекут потери моих уже денег и, что куда дороже, репутации.И почему я не удивлен. tip78 Мой опыт, сын ошибок трудных, меня научил каждую мелочь учитывать и ожидать всего, поэтому я просчитываю все случаи.Давай учти маленькую мелочь - сколько действий должна сделать СУБД чтобы достать строку для EAV и для обычных таблиц. tip78придти через базу там что-то проверять, кроме самих данных в этой базеКличко завидует твоему красноречию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2016, 04:02 |
|
||
|
Товары с разными характеристиками
|
|||
|---|---|---|---|
|
#18+
tip78Кот Матроскинпропущено... Ерунда, конечно. При вводе номенклатуры товаров (мы, если что, обсуждаем номенклатуру товаров) БД- самое узкое место? Ха-ха три раза. Сколько в Вашем интернет-магазине описывается новых товаров в сутки ( через PHP-шные формы, да)? хотя бы 100к есть? Собственно, повторяется история с IBM-овской статьей про наследование - Вы где-то вычитали фразу "БД это всегда самое узкое место в приложении", но даже не попытались задуматься "А к чему она относится? А в каких случаях она применима?" а вы за описанием товаров не прячьтесь, это не поможет )) если вы проверяете NOT NULL через БД, значит так делаете всегда, потому что вам почему-то в голову не приходит, что данные перед походом в БД должны быть проверены. Что может случиться ДДоС на любой из этих форм и тогда вы увидите не 100к в день, а в секунду, потому что L7 это самая вкусняшка, её все любят. Что грамотное программирование должно быть везде, и в особенности там, где вам кажется, что "нагрузки нету и всё обойдётся". "Фразу я вычитал" у хайлоадеров, которые twitter, pinterest, facebook, muut.com (полностью на REDIS кстати) и прочие. Но ещё мне "повезло" реально влетать на бизнес-приложениях в простои, которые влекут потери моих уже денег и, что куда дороже, репутации. Мой опыт, сын ошибок трудных, меня научил каждую мелочь учитывать и ожидать всего, поэтому я просчитываю все случаи. честно я вообще не понимаю, как кому-то с опытом в голову может придти через базу там что-то проверять, кроме самих данных в этой базе дикость ^^ Во, похоже восприняли мой упрек про "вяловато" и снова развернулись :) Почти каждая фраза - шедевр (что про "в голову не приходит", что про DDoS на админке магазина и борьбу с ним при помощи отсутствия constraint'ов, что про хайлоадеров ), но больше всего мне понравился довод Мой опыт, сын ошибок трудных, меня научил каждую мелочь учитывать и ожидать всего, поэтому я просчитываю все случаи в защиту тезиса "Да нафиг проверять корректность данных в БД - и так сойдет" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2016, 10:32 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1540349]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 284ms |

| 0 / 0 |

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