EAV и пустое значение атрибута

StalkerClasses

Новичок
Есть атрибут "цвет" по модели EAV.
Есть любое произвольное значение - пример "#eee".

Вопрос в следующем - когда поле имеет пустое значение имеет ли смысл хранить в БД запись (строку) с пустым значением в таблице VALUE или лучше пустые значения удалять?
Как это скажется на поиске? Ведь строки в БД не будет!

SQL:
// Так найдем все цвета которые не заполнены
where attr_value = ''

// Так найдем все заполненные цвета
where attr_value <> ''

А если физически строки в БД не будет сущестовать в таблице value то как тогда искать?
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
Весь запрос напиши а не огрызок, ты под еав понимаешь «моя реализация». Я искал бы без цвета where attval is null
 
Последнее редактирование:

StalkerClasses

Новичок
За основу я взял работы https://github.com/sunel/eav
Там таблиц больше - 6 основных таблиц, все остальные для типов данных.

Когда нужно добавить атрибут (например цвет) в выборку то в SELECT-ах будет дополнительных подзапрос к таблице атрибутов.
Когда идет фильтрация - будет INNER JOIN

Я упростился до трех таблиц.
1 таблица сущности (ENTITY)
2 таблица атрибут (ATTR)
3 таблица значение атрибута (VALUE)

Я искал бы без цвета where attval is null
Вот если вы будете искать, получается у вас обязательно должна быть строка с пустым значением в таблице VALUE для такого-то атрибута (ATTR) и такой-то сущности (ENTITY).
Если такой строки не будет то как? Если я правильно понимаю - вы добавили новый атрибут в таблицу ATTR, например год. То соответственно для всех сущностей где он встречается нужно создать пустые строки в БД что бы иметь возможность фильтровать... Или не обязательно?
 

StalkerClasses

Новичок
Пока даже решил остановится всего лишь на 1 таблице. Полиморфная связь 1:M
Вот структура таблица:

SQL:
CREATE TABLE sys_attr_value (
    id int(11) NOT NULL auto_increment
    source_table varchar(255) DEFAULT '' NOT NULL,
    source_signature varchar(255) DEFAULT '' NOT NULL,
    source_record tinyint(4) unsigned DEFAULT '0' NOT NULL,
    source_sorting tinyint(4) unsigned DEFAULT '0' NOT NULL,
    attrkey varchar(255) DEFAULT '' NOT NULL,
    attrvalue text,
    PRIMARY KEY (id)
);
id | таблица | шаблон | id-записи | сортировка | ключ атрибута | значение атрибута
1 | page | templatenews | 10 | 100 | attr_color | #eee
2 | page | templatenews | 11 | 100 | attr_color | #000
3 | page | templatenews | 12 | 100 | attr_color | #fff
 

WMix

герр M:)ller
Партнер клуба
Вот если вы будете искать, получается у вас обязательно должна быть строка с пустым значением в таблице
если соединять таблицу значений оператором left join, то вместо не найденной строчки будут NULLs

не пойму зачем ты мне laravel показываешь, вопросы DB надо решать только sql а уже после, можешь чем угодно решать..
 
Последнее редактирование:
Сверху