powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Товары с разными характеристиками
66 сообщений из 66, показаны все 3 страниц
Товары с разными характеристиками
    #39223111
hwt0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, помогите понять, как правильно сделать схему базы данных.
Суть в том, что есть разные типы товара с разными характеристиками, если сделать как у меня на схеме , то всегда будут оставаться поля со значение NULL того или иного типа товара( как я понимаю так делать не нужно ) или все-таки это не так критично ?
Алгоритм работы простой, человек оформляет заявку , выбирает из базы соответствующий товар(принтер, мобильник и так далее) .
П.С. схема никакая не дипломная\курсавая , просто разобраться хочу. Схема нарисована для примера.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39223125
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hwt0если сделать как у меня на схеме , то всегда будут оставаться поля со значение NULL того или иного типа товара( как я понимаю так делать не нужно ) или все-таки это не так критично ?
Пока все атрибуты умещаются по количеству в одну таблицу - не так критично.
Можно делать наследование - т.е. таблицу "товары" и несколько дочерних таблиц "мобильники", "принтеры" и т.п. с ссылкой на главную таблицу "товары".
В "товарах" у Вас будет
IDНазвание1 Мобильник IPHONE2 Принтер Canon, а в дочерних - по одной записи с соответствующими характеристиками
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39223152
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hwt0всегда будут оставаться поля со значение NULL того или иного типа товара( как я
понимаю так делать не нужно )
Дейта начитался? Тогда тебе прямая дорога к EAV.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39223176
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39223177
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
EAV это то же, что и BCNF?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39223257
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поддержу Матроскина, а для разобраться поищите на этом форуме реализацию наследования с одной, двумя и тремя таблицами.
А также в каких условиях та или иная реализация будет выгодной.
mini.weblab EAV это то же, что и BCNF?Совсем разные вещи
https://en.wikipedia.org/wiki/Boyce–Codd_normal_form
https://en.wikipedia.org/wiki/Entity–attribute–value_model
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39223264
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hwt0Здравствуйте, помогите понять, как правильно сделать схему базы данных.
это всю жизнь было так:
таблица товаров (goods) + таблица названий свойств (prop_name) + таблица свойств товаров (props2goods)
вы просто в товар набираете нужные свойства + их кол-во
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39223278
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hwt0,
тебе надо изучать подкатегории, оно же Наследование.
найди что типа "subcategory relationship"

достаточно хорошо всё это очень в документации на hibernate, Там можно почитать
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39223444
hwt0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы!

Таблица 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 ).

Правильно ли я понял идею с наследованием ?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39224996
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hwt0Правильно ли я понял идею с наследованием ?

нет
Printers, Mobile и Televisor это 1 таблица, таблица названий свойств - `prop_name`
она содержит вообще все возможные св-ва в магазине
содержимое этих свойств в каждом товаре это другая таблица - `props2goods`
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225005
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78hwt0Правильно ли я понял идею с наследованием ?

нет
Printers, Mobile и Televisor это 1 таблица, таблица названий свойств - `prop_name`
она содержит вообще все возможные св-ва в магазине
содержимое этих свойств в каждом товаре это другая таблица - `props2goods`

Не надо путать человека - паттерн "наследование" он понял совершенно правильно.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225159
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинtip78пропущено...


нет
Printers, Mobile и Televisor это 1 таблица, таблица названий свойств - `prop_name`
она содержит вообще все возможные св-ва в магазине
содержимое этих свойств в каждом товаре это другая таблица - `props2goods`

Не надо путать человека - паттерн "наследование" он понял совершенно правильно.
не знаю, что вы там поняли, но лично я читаю его таблицы и вижу, что они неправильные
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225169
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78 лично я читаю его таблицы и вижу, что они неправильные Да мы уже поняли что ты фанат EAV
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225208
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78Кот Матроскинпропущено...


Не надо путать человека - паттерн "наследование" он понял совершенно правильно.
не знаю, что вы там поняли, но лично я читаю его таблицы и вижу, что они неправильные
Расскажите, что в них неправильного?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225211
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинtip78пропущено...

не знаю, что вы там поняли, но лично я читаю его таблицы и вижу, что они неправильные
Расскажите, что в них неправильного?
неправильно разбивать каждую группу товаров по отдельным таблицам свойств
у него принтеры это одна таблица свойств, мобильники - другая, итд
не видите чтоли или по-вашему это норма?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225266
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

отношения между таблицами по-моему неверны
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225335
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabотношения между таблицами по-моему неверны

Отношения на схеме - да, отношения между goods и printers/mobiles/... должны быть 1:0..1, а не 1:n. Но это, видимо, просто ошибка в схеме, написал-то ТС правильно
Таблица goods имеет отношения с таблицей printers (idgoods - idprinters) оба они первичные ключи.

tip78 неправильно разбивать каждую группу товаров по отдельным таблицам свойств
у него принтеры это одна таблица свойств, мобильники - другая, итд
Еще раз - это называется "наследование типов". Погуглите.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225347
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,
Таблица goods имеет отношения с таблицей printers (idgoods - idprinters) оба они первичные ключи.

вообще-то, idgoods это FK
(в общем должно быть весело)
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225353
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,

В какой таблице idgoods - FK? я говорил про goods и printers/mobiles/...
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225393
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,
я думала, что
idgoods в таблице goods будет FK по отношению к соотв. id в таблицах printers, mobile, televisor

хотя
авторотношения между goods и printers/mobiles/... должны быть 1:0..1
по-вашему получается, что свойства вы будете хранить не для всех товаров...
в любом случае, без foreign key не обойтись (обеспечение целостности данных)
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225429
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabКот Матроскин,
я думала, что
idgoods в таблице goods будет FK по отношению к соотв. id в таблицах printers, mobile, televisor

Наоборот - IDPrinter будет FK к IDGoods. Сперва создается запись в goods, потом - в printers
Иначе Вам будет сложно сделать "сквозную" нумерацию товаров.

mini.weblabхотя
авторотношения между goods и printers/mobiles/... должны быть 1:0..1
по-вашему получается, что свойства вы будете хранить не для всех товаров...

Почему - для всех. Но не все товары являются принтерами, поэтому не для каждой записи в goods есть соответствующая запись в printers.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225450
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,
надеюсь, что делать сквозную нумерацию мне не придется
я поддержу tip78 и проголосую за old school и стандартные структуры :)
в любом случае, работать с базой будет непросто
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225600
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинmini.weblabотношения между таблицами по-моему неверны

Отношения на схеме - да, отношения между goods и printers/mobiles/... должны быть 1:0..1, а не 1:n. Но это, видимо, просто ошибка в схеме, написал-то ТС правильно
Таблица goods имеет отношения с таблицей printers (idgoods - idprinters) оба они первичные ключи.

tip78 неправильно разбивать каждую группу товаров по отдельным таблицам свойств
у него принтеры это одна таблица свойств, мобильники - другая, итд
Еще раз - это называется "наследование типов". Погуглите.
ну вообще-то называется "наследование таблиц" и... вы сами то вникали?
именно это я и называю "неправильно"
вы выбрали чуть меньший размер БД в ущерб скорости
хотя у ТС магазин и для таких задач важнее скорость
(строго говоря, скорость важнее практически для любых задач, разве что бэкапам пофиг, а размер там дело десятое)
вы бы, на досуге, редис для себя открыли (ваша очередь гуглить), подивились бы, как там дела обстоят с соотношением размер/скорость
но там сжатие например есть, оно чуть спасает
хотя и не особо надо
зато 100к запросов в секунду
расскажите им про наследования...
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225608
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, вот ссылка от 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.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39225678
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78Кот Матроскинпропущено...


Отношения на схеме - да, отношения между goods и printers/mobiles/... должны быть 1:0..1, а не 1:n. Но это, видимо, просто ошибка в схеме, написал-то ТС правильно
пропущено...


пропущено...

Еще раз - это называется "наследование типов". Погуглите.
ну вообще-то называется "наследование таблиц" и... вы сами то вникали?
именно это я и называю "неправильно"
вы выбрали чуть меньший размер БД в ущерб скорости

Лолшто? EAV выигрывает по скорости запросов у классических таблиц?
Ну давайте померяем, где будет быстрее работать фильтр, к примеру, по трем атрибутам.

tip78читаем про минусы (disadvantages)
Минусы по сравнению с чем ?
Там в качестве альтернатив рассматриваются подходы "все держать в одной таблице" (то с чего начал ТС) и "сделать по одной таблице на каждый тип, дублируя одинаковые атрибуты". Никакого Вашего
таблица товаров (goods) + таблица названий свойств (prop_name) + таблица свойств товаров (props2goods)
нет в помине.
А по сравнению с этими двумя способами - наследование, конечно, медленнее (хотя и на копейки)
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39226149
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще вариант с наследованием :
продукт принадлежит одной из групп
группа определяет набор свойств продукта

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) ?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227147
hwt0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы !! Вы реально помогли !


Вот исправленная таблица с наследованием. Теперь все верно?

Но как вычитал для 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) ?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227164
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hwt0Всем спасибо за ответы !! Вы реально помогли !


Вот исправленная таблица с наследованием. Теперь все верно?

Но как вычитал для MySQL это не подходит (т.к СУБД не поддерживает наследование), т.е. одни и те же данные из goods можно добавить одновременно и в printers и в mobile.(А должно как я описывал выше только для одного товара одна характеристика и если задана, то во вторую уже нельзя добавить ). Тогда делать, как предложили tip78 ?

"не поддерживает наследование" - это значит "нет специальных конструкций для реализации наследования". Реализовывать наследование "вручную", просто вставляя данные поочередно в 2 таблицы, Вам все равно помешать никто не может.
Если Вам важен контроль на уровне БД отсутствия дублей - Вы можете реализовать его либо с помощью триггера, либо составным ключом и ограничением check. В любом случае с контролем целостности данных в EAV все гораздо хуже.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227165
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hwt0 В таблице props2goods, часто будут повторяться название характеристики, так и должно быть ?Ну там может быть не только название, а например код или айди.
hwt0 понял модель EAV часто используется в рабочих проектахиз-за недостаточного знания предметной области свойства объектов часто добавляются и удаляются. При этом данных в таких таблицах немного.
В эксплуатации, однако, это выходит боком.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227220
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинВ любом случае с контролем целостности данных в EAV все гораздо хуже.Проблемы есть, но они легко решаемы.
Вполне достаточно при сохранении/удалении вызывать некую ф-цию, кот. проверит соответствие данных бизнес-правилам и разрешит или отклонит действие.
Ставить триггеры/констрайнты глупо. Они ничего не решают. Только мешают. :)
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227236
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVКот МатроскинВ любом случае с контролем целостности данных в EAV все гораздо хуже.Проблемы есть, но они легко решаемы.
Вполне достаточно при сохранении/удалении вызывать некую ф-цию, кот. проверит соответствие данных бизнес-правилам и разрешит или отклонит действие.
На уровне БД - нет, при доступе стороннего клиента все полетит к черту.
А функцию можно вызывать хоть при сохранении в текстовые файлы - это не значит что при хранении в текстовых файлах все прекрасно с целостностью данных.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227254
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hwt0,
авторПравильно ли я понял, что это либо EAV либо как я написал в первом посте (где в таблице будет много NULL) ?


нет неправильно, таблица в первом посте это нопасаран. без вариантов.
про EAV ничего сказать не могу, т.к. не совсем понимаю, что это такое
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227260
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
про EAV ничего сказать не могу, т.к. не совсем понимаю, что это такое

19114706 - это и есть EAV, самый "классический", на 4х таблицах.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227275
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,
спасибо!
учитывая, что мои знания про EAV ограничиваются расшифровкой аббревиатуры, рада, что у меня получилось :)
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227323
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинLSVпропущено...
Проблемы есть, но они легко решаемы.
Вполне достаточно при сохранении/удалении вызывать некую ф-цию, кот. проверит соответствие данных бизнес-правилам и разрешит или отклонит действие.
На уровне БД - нет, при доступе стороннего клиента все полетит к черту.
А функцию можно вызывать хоть при сохранении в текстовые файлы - это не значит что при хранении в текстовых файлах все прекрасно с целостностью данных.Дык дайте клиенту ХП, кот. делает нужную операцию: редактирует/удаляет и пр.
ХП всегда отработает одинаково.
Ниодну БД невозможно защитить от порчи данных сторонним ПО, имеющим доступ на запись.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227366
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVКот Матроскинпропущено...

На уровне БД - нет, при доступе стороннего клиента все полетит к черту.
А функцию можно вызывать хоть при сохранении в текстовые файлы - это не значит что при хранении в текстовых файлах все прекрасно с целостностью данных.Дык дайте клиенту ХП, кот. делает нужную операцию: редактирует/удаляет и пр.

Это и называется "с целостностью данных все очень плохо".
"В нашей гостинице нет проблем с удобствами - биотуалет и тазик можно привезти с собой, а воду набрать на колонке в соседнем квартале!".
Если так рассуждать - то да, проблем с целостностью у EAV нет :)
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227416
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинЕсли так рассуждать - то да, проблем с целостностью у EAV нет :)
что за проблемы то, можете пример привести?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227419
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, часто будут повторяться название характеристики, так и должно быть ?
есессно, у них ведь разные родители
если одного родителя удалят, он заберёт с собой свою запись, а не чужую
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227452
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78Кот МатроскинЕсли так рассуждать - то да, проблем с целостностью у EAV нет :)
что за проблемы то, можете пример привести?

Например, реализация ограничения not null для атрибута.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227462
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинtip78пропущено...

что за проблемы то, можете пример привести?

Например, реализация ограничения not null для атрибута.
это валидация формы при сабмите, делается в самом PHP
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227477
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,
задание ограничения NOT NULL в базе не подойдет?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227501
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabКот Матроскин,
задание ограничения NOT NULL в базе не подойдет?Не пойдет т.к. речь про конкретный атрибут.
Вообще говоря хранить EAV-запись с NULL - бред. Достаточно просто ее удалить. Не ? :)
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227509
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78Кот Матроскинпропущено...


Например, реализация ограничения not null для атрибута.
это валидация формы при сабмите, делается в самом PHP
Я про это и говорю - декларативными ограничениями в базе при EAV этого сделать нельзя.
(и даже программными - непросто)
Мы тут все-таки на PHP обсуждаем :)

mini.weblab задание ограничения NOT NULL в базе не подойдет?
Нет, конечно - работать не будет. Для какого поля в Вашей структуре надо задать NOT NULL, чтобы любой продукт обязательно имел заполненный атрибут "Цвет"?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227510
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV,
если я задам ограничение в базе, вы просто туда не сможете внести записи с пустым значением атрибута
стирать ничего не придется
не?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227526
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,
я говорила о таблице PRODUCTS_PROPERTIES и буду прописывать ограничение NOT NULL на property_value

PRODUCTS_PROPERTIES
-----------------------------------
product_id (FK, PK1)
property_id (FK, PK1)
property_value


авторНет, конечно - работать не будет. Для какого поля в Вашей структуре надо задать NOT NULL, чтобы любой продукт обязательно имел заполненный атрибут "Цвет"?

в моей структуре просто оговаривается множество свойств для продуктов группы
структура не обязывает прописывать каждое свойство для каждого продукта
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227533
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabКот Матроскин,
я говорила о таблице PRODUCTS_PROPERTIES и буду прописывать ограничение NOT NULL на property_value

PRODUCTS_PROPERTIES
-----------------------------------
product_id (FK, PK1)
property_id (FK, PK1)
property_value


авторНет, конечно - работать не будет. Для какого поля в Вашей структуре надо задать NOT NULL, чтобы любой продукт обязательно имел заполненный атрибут "Цвет"?

в моей структуре просто оговаривается множество свойств для продуктов группы
структура не обязывает прописывать каждое свойство для каждого продукта
Еще раз - я хочу прописать в базе, что нельзя создать продукт без заполненного свойства "цвет".
В традиционной структуре мне для этого нужен один щелчок мышки. Что мне делать в Вашей структуре?
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227538
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Довольно часто встречаются приложения, построенные с использованием универсальных моделей данных для максимальной гибкости, и приложения, построенные так, что они мешают работе. Например, хорошо известно, что можно представить любой объект в базе данных используя только четыре таблицы:

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"
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227539
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabLSV,
если я задам ограничение в базе, вы просто туда не сможете внести записи с пустым значением атрибута
стирать ничего не придется
не?Этого не достаточно. Пустота - сложное понятие.
Один пробел это пустота ?
А ноль (для чисел) пустота ?
Комплексная проверка ввода - непростое понятие. Пустота - самый простой случай.

Самое интересное - запрет ввода недопустимых значений. Во где все приколы. :)
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227548
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,
кстати, работала с EAV данными: и то, что
авторлюбой продукт НЕ обязательно имеЕТ заполненный атрибут "Цвет"?
достоинство структуры, а не недостаток
все дело в том, какую задачу вы хотите решаете
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227551
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинЕще раз - я хочу прописать в базе, что нельзя создать продукт без заполненного свойства "цвет".
В традиционной структуре мне для этого нужен один щелчок мышки. Что мне делать в Вашей структуре?
очевидно, не использовать мою структуру :)
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227561
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabКот МатроскинЕще раз - я хочу прописать в базе, что нельзя создать продукт без заполненного свойства "цвет".
В традиционной структуре мне для этого нужен один щелчок мышки. Что мне делать в Вашей структуре?
очевидно, не использовать мою структуру :)
Про что я и говорю - а
mini.weblabзадание ограничения NOT NULL в базе
-не поможет никак.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227566
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVСамое интересное - запрет ввода недопустимых значений. Во где все приколы. :)
а мы уже дошли до самого интересного? просто обсудили возможные структуры.
следующий этап: посмотреть на тз, и принимая во внимание плюсы и минусы возможных подходов, выбрать наиболее подходящий вариант
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227575
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,
замечу, вашего требования не было в начальном ТЗ
а так мои вам поздравления
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227600
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинЯ про это и говорю - декларативными ограничениями в базе при EAV этого сделать нельзя.
(и даже программными - непросто)
Мы тут все-таки на PHP обсуждаем :)
это не значит, что надо валидацию формы в SQL тащить ))
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227605
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78Кот МатроскинЯ про это и говорю - декларативными ограничениями в базе при EAV этого сделать нельзя.
(и даже программными - непросто)
Мы тут все-таки на PHP обсуждаем :)
это не значит, что надо валидацию формы в SQL тащить ))

Какую "валидацию формы"? Это целостность данных , и очень хотелось бы, чтобы ограничения этой целостности лежали бы в одном месте - в СУБД.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227608
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78 что за проблемы то, можете пример привести?Шо опять? Да полфорума здесь ломаются копья. Побойтесь бога воспользуйтесь поиском.
Я могу сделать за вас эту работу, но тогда пропадет воспитательный эффект.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227827
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257tip78 что за проблемы то, можете пример привести?Шо опять? Да полфорума здесь ломаются копья. Побойтесь бога воспользуйтесь поиском.
Я могу сделать за вас эту работу, но тогда пропадет воспитательный эффект.
ой, да вы уж так не напрягайтесь, пожалейте себя
возвращайтесь на печь
а мы уж тут как-то сами.
пока что только из пальца высосана потребность непременно тащить сырые данные в БД, чтобы там их проверять...
некрасиво прикрытая некой "целостностью данных", которой там в помине ничего не угрожало.
эта половина программистов может и дальше убиваться обо всё, что ей взбредёт в голову
учитывая, что 95% программистов вовсе не программисты, считаю это нормой )
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227840
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78 тащить сырые данные в БДНе понял вашей сентенции.
tip78 некрасиво прикрытая некой "целостностью данных", которой там в помине ничего не угрожало.вы хотите сказать констрейнты - зло?
tip78 а мы уж тут как-то самиДа уж постарайтесь найдите второй неустранимый недостаток.

Еще раз повторю - с точки зрения разработчика все хорошо.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227870
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78пока что только из пальца высосана потребность непременно тащить сырые данные в БД, чтобы там их проверять...
некрасиво прикрытая некой "целостностью данных", которой там в помине ничего не угрожало.

Не, это как-то вяловато :)
Вот когда Вы жгли про преимущества EAV в скорости запросов - вот это был да, трэш и угар.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227882
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стыдно, господа. Вас из вашей серости пытается вытащить крупный специалист, остальное в его профиле. А вы ещё ерепенитесь. Признайте уж вашу закоснелость и спрячьте тела где-нибудь в утёсах.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227971
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257tip78 тащить сырые данные в БДвы хотите сказать констрейнты - зло?
я говорю, что пустышка или нет проверяется на этапе валидации формы
валидация формы это в любом случае процедура обязательная и получается, что своим констрейнтом на NOT NULL вы делаете двойную работу
но это не главное, главное, что в 99% случаев БД вообще не нужно трогать, до тех пор, пока не случится INSERT/UPDATE
(иногда надо конечно проверить, чтобы нужные данные присутствовали в БД, но это другое)
потому что БД это всегда самое узкое место в приложении
вы же предлагаете через дёрганье БД проверять NULL там или NOT NULL
это совершенно непрофессионально, как по мне
когда !== '' или !empty() в PHP не создаёт никакой нагрузки

и когда тут столько разговоров про замену привычной и удобной структуры таблиц, а в итоге причиной является совершенно ненужная проверка в БД на NOT NULL, это, мягко говоря, вызывает недоумение.
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39227983
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78SERG1257пропущено...
вы хотите сказать констрейнты - зло?
я говорю, что пустышка или нет проверяется на этапе валидации формы
валидация формы это в любом случае процедура обязательная и получается, что своим констрейнтом на NOT NULL вы делаете двойную работу
но это не главное, главное, что в 99% случаев БД вообще не нужно трогать, до тех пор, пока не случится INSERT/UPDATE
(иногда надо конечно проверить, чтобы нужные данные присутствовали в БД, но это другое)
потому что БД это всегда самое узкое место в приложении

Ерунда, конечно.
При вводе номенклатуры товаров (мы, если что, обсуждаем номенклатуру товаров) БД- самое узкое место? Ха-ха три раза.
Сколько в Вашем интернет-магазине описывается новых товаров в сутки ( через PHP-шные формы, да)? хотя бы 100к есть?
Собственно, повторяется история с IBM-овской статьей про наследование - Вы где-то вычитали фразу "БД это всегда самое узкое место в приложении", но даже не попытались задуматься "А к чему она относится? А в каких случаях она применима?"
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39228057
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,
Основы проектировани БДдля определения перечня и структуры хранимых данных надо собрать информацию о реальных и потенциальных приложениях, а также о пользователях базы данных, а при построении инфологической модели следует заботиться лишь о надежности хранения этих данных, напрочь забывая о приложениях и пользователях, для которых создается база данных
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39228268
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинtip78пропущено...

я говорю, что пустышка или нет проверяется на этапе валидации формы
валидация формы это в любом случае процедура обязательная и получается, что своим констрейнтом на NOT NULL вы делаете двойную работу
но это не главное, главное, что в 99% случаев БД вообще не нужно трогать, до тех пор, пока не случится INSERT/UPDATE
(иногда надо конечно проверить, чтобы нужные данные присутствовали в БД, но это другое)
потому что БД это всегда самое узкое место в приложении

Ерунда, конечно.
При вводе номенклатуры товаров (мы, если что, обсуждаем номенклатуру товаров) БД- самое узкое место? Ха-ха три раза.
Сколько в Вашем интернет-магазине описывается новых товаров в сутки ( через PHP-шные формы, да)? хотя бы 100к есть?
Собственно, повторяется история с IBM-овской статьей про наследование - Вы где-то вычитали фразу "БД это всегда самое узкое место в приложении", но даже не попытались задуматься "А к чему она относится? А в каких случаях она применима?"

а вы за описанием товаров не прячьтесь, это не поможет ))
если вы проверяете NOT NULL через БД, значит так делаете всегда, потому что вам почему-то в голову не приходит, что данные перед походом в БД должны быть проверены.
Что может случиться ДДоС на любой из этих форм и тогда вы увидите не 100к в день, а в секунду, потому что L7 это самая вкусняшка, её все любят.
Что грамотное программирование должно быть везде, и в особенности там, где вам кажется, что "нагрузки нету и всё обойдётся".
"Фразу я вычитал" у хайлоадеров, которые twitter, pinterest, facebook, muut.com (полностью на REDIS кстати) и прочие.
Но ещё мне "повезло" реально влетать на бизнес-приложениях в простои, которые влекут потери моих уже денег и, что куда дороже, репутации.
Мой опыт, сын ошибок трудных, меня научил каждую мелочь учитывать и ожидать всего, поэтому я просчитываю все случаи.
честно я вообще не понимаю, как кому-то с опытом в голову может придти через базу там что-то проверять, кроме самих данных в этой базе
дикость ^^
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39228300
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78 если вы проверяете NOT NULL через БД, значит так делаете всегда, Не мы проверяем, а СУБД проверяет перед записью, и не только NOT NULL, но и любые другие ограничения.
tip78 что данные перед походом в БД должны быть проверены.Да проверяйте конечно, кто вам мешает, это бысто дешево и практично. Просто обычно с одной базой работает более одного приложения.
tip78 "Фразу я вычитал" у хайлоадеров, которые twitter, pinterest, facebook, muut.com (полностью на REDIS кстати) и прочие.Ээ, а ты в своей машине руль на спортивный поменял? И не забудь про выхлопную трубу и клиренс занизить, я формулу один смотрел там все так делают.
tip78 Но ещё мне "повезло" реально влетать на бизнес-приложениях в простои, которые влекут потери моих уже денег и, что куда дороже, репутации.И почему я не удивлен.
tip78 Мой опыт, сын ошибок трудных, меня научил каждую мелочь учитывать и ожидать всего, поэтому я просчитываю все случаи.Давай учти маленькую мелочь - сколько действий должна сделать СУБД чтобы достать строку для EAV и для обычных таблиц.
tip78придти через базу там что-то проверять, кроме самих данных в этой базеКличко завидует твоему красноречию
...
Рейтинг: 0 / 0
Товары с разными характеристиками
    #39228331
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78Кот Матроскинпропущено...

Ерунда, конечно.
При вводе номенклатуры товаров (мы, если что, обсуждаем номенклатуру товаров) БД- самое узкое место? Ха-ха три раза.
Сколько в Вашем интернет-магазине описывается новых товаров в сутки ( через PHP-шные формы, да)? хотя бы 100к есть?
Собственно, повторяется история с IBM-овской статьей про наследование - Вы где-то вычитали фразу "БД это всегда самое узкое место в приложении", но даже не попытались задуматься "А к чему она относится? А в каких случаях она применима?"

а вы за описанием товаров не прячьтесь, это не поможет ))
если вы проверяете NOT NULL через БД, значит так делаете всегда, потому что вам почему-то в голову не приходит, что данные перед походом в БД должны быть проверены.
Что может случиться ДДоС на любой из этих форм и тогда вы увидите не 100к в день, а в секунду, потому что L7 это самая вкусняшка, её все любят.
Что грамотное программирование должно быть везде, и в особенности там, где вам кажется, что "нагрузки нету и всё обойдётся".
"Фразу я вычитал" у хайлоадеров, которые twitter, pinterest, facebook, muut.com (полностью на REDIS кстати) и прочие.
Но ещё мне "повезло" реально влетать на бизнес-приложениях в простои, которые влекут потери моих уже денег и, что куда дороже, репутации.
Мой опыт, сын ошибок трудных, меня научил каждую мелочь учитывать и ожидать всего, поэтому я просчитываю все случаи.
честно я вообще не понимаю, как кому-то с опытом в голову может придти через базу там что-то проверять, кроме самих данных в этой базе
дикость ^^

Во, похоже восприняли мой упрек про "вяловато" и снова развернулись :)
Почти каждая фраза - шедевр (что про "в голову не приходит", что про DDoS на админке магазина и борьбу с ним при помощи отсутствия constraint'ов, что про хайлоадеров ), но больше всего мне понравился довод
Мой опыт, сын ошибок трудных, меня научил каждую мелочь учитывать и ожидать всего, поэтому я просчитываю все случаи в защиту тезиса "Да нафиг проверять корректность данных в БД - и так сойдет" :)
...
Рейтинг: 0 / 0
66 сообщений из 66, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Товары с разными характеристиками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]