powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше хранить значения атрибутов разных типов в EAV
25 сообщений из 120, страница 1 из 5
Как лучше хранить значения атрибутов разных типов в EAV
    #37019459
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Здесь много раз обсуждался EAV, но по этому вопросу ничего стоящего найти не удалось.

Скажите, пожалуйста, как, по вашему мнению, лучше хранить значения атрибутов разных типов в EAV?
Варианты, которые кажутся возможными:

1. Хранить в таблице значений несколько полей для значений атрибутов, что-то вроде:
entity_id attribute_id string_value integer_value date_value.
2. Создать несколько таблиц, каждая их которых хранит значения атрибутов определенного типа:
таблица для хранения строк VARCHAR(255), таблица для хранения чисел (UNSIGNED BIGINT), таблица для хранения дат (DATE type).
3. Хранить значения атрибутов как строки, но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы.

Сейчас есть представления, что атрибуты могут быть: строковыми, числовыми или датой, но возможно в будущем добавятся новые типы.
Спасибо.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37019502
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLEG_2005Здесь много раз обсуждался EAV, но по этому вопросу ничего стоящего найти не удалось.Этот EAV здесь столько раз перетирали, что очевидно Вам просто не хочется разгребать портянки на множество страниц. Или просто лень читать.
авторХранить значения атрибутов как строки, но данный вариант заведомо не подходитТак может выбран заведомо неправильный подхо и ну его к бису этот ЕАV?
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37019588
JohnSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно сцылы, где это перетиралось?
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37019625
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 16.12.2010 21:43, OLEG_2005 wrote:
> Скажите, пожалуйста, как, по вашему мнению, лучше хранить значения атрибутов
> разных типов в EAV?

Это:
> 2. Создать несколько таблиц, каждая их которых хранит значения атрибутов
> определенного типа:
> таблица для хранения строк VARCHAR(255), таблица для хранения чисел (UNSIGNED
> BIGINT), таблица для хранения дат (DATE type).\


3 -- это вообще не вариант.

А вот интересно именно ПОЧЕМУ 2 лучше, чем 1. На самом деле не так в них
много разницы. Но вот мне не нравится, что NULL-ы в записях с другим
типом данных будут портить статистику распределения значений по данному
атрибуту.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37019663
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

NULL тут нефиг хранить
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37019812
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 17.12.2010 3:12, ViPRos wrote:

> NULL тут нефиг хранить

Если в одной строке хранить один атрибут, а
полей в строке столько, сколько возможных типов данных атбирутов,
то остальные поля, кроме поля с типом данного атрибута будут NULL.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37019842
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivOn 16.12.2010 21:43, OLEG_2005 wrote:
> Скажите, пожалуйста, как, по вашему мнению, лучше хранить значения атрибутов
> разных типов в EAV?

Это:
> 2. Создать несколько таблиц, каждая их которых хранит значения атрибутов
> определенного типа:
> таблица для хранения строк VARCHAR(255), таблица для хранения чисел (UNSIGNED
> BIGINT), таблица для хранения дат (DATE type).\


3 -- это вообще не вариант.

А вот интересно именно ПОЧЕМУ 2 лучше, чем 1. На самом деле не так в них
много разницы. Но вот мне не нравится, что NULL-ы в записях с другим
типом данных будут портить статистику распределения значений по данному
атрибуту.


Что вы имеете виду? Вариант с разными таблицами рассмотрен как попытка уйти от NULL в одной таблице с несколькими столбцами для хранения значений разных типов.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37019883
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В варианте с несколькими таблицами смущает необходимость собирать атрибуты из нескольких таблиц, а не из одной таблицы.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37019893
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь за неточность формулировки. Что касается третьего варианта, то я имел в виду следующее:

3. Использовать EAV и хранить значения атрибутов как строки (VARCHAR), но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы, но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы.

То есть этот вариант подразумевает:
entity_id attribute_id value (VARCHAR)
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020080
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 17.12.2010 10:03, OLEG_2005 wrote:

> В варианте с несколькими таблицами смущает необходимость собирать атрибуты из
> нескольких таблиц, а не из одной таблицы.

А какая в .опу разница ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020083
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 17.12.2010 10:07, OLEG_2005 wrote:

> 3. Использовать EAV и хранить значения атрибутов как строки (VARCHAR), но данный
> вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам,
> например, сравнивать числа, к тому же в этом случае, например, в поля, которые
> должны хранить числа, можно добавить любые символы, но данный вариант заведомо
> не подходит, так как нужно производить фильтрацию по атрибутам, например,
> сравнивать числа, к тому же в этом случае, например, в поля, которые должны
> хранить числа, можно добавить любые символы.
>
> То есть этот вариант подразумевает:
> entity_id attribute_id value (VARCHAR)

Ещё раз, это вообще не вариант. Это -- нарушение доменной целостности данных,
грубейшая ошибка проектирования БД. Потом последствия её будут очень горькими.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020106
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivOn 17.12.2010 10:07, OLEG_2005 wrote:

> 3. Использовать EAV и хранить значения атрибутов как строки (VARCHAR), но данный
> вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам,
> например, сравнивать числа, к тому же в этом случае, например, в поля, которые
> должны хранить числа, можно добавить любые символы, но данный вариант заведомо
> не подходит, так как нужно производить фильтрацию по атрибутам, например,
> сравнивать числа, к тому же в этом случае, например, в поля, которые должны
> хранить числа, можно добавить любые символы.
>
> То есть этот вариант подразумевает:
> entity_id attribute_id value (VARCHAR)

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


Я пояснил вариант 3, так как его изначально он был сформулирован непонятно и его неправильно понимали
Выбор главным образом между вариантами хранить в одной таблице в нескольких полях и в разных таблицах для каждого типа. Это выбор не кажется простым.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020116
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivOn 17.12.2010 10:03, OLEG_2005 wrote:

> В варианте с несколькими таблицами смущает необходимость собирать атрибуты из
> нескольких таблиц, а не из одной таблицы.

А какая в .опу разница ?


Мне представляется, что в общем случае собирать данных из одной таблице быстрее и проще, чем из трех.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020130
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivOn 17.12.2010 10:03, OLEG_2005 wrote:

> В варианте с несколькими таблицами смущает необходимость собирать атрибуты из
> нескольких таблиц, а не из одной таблицы.

А какая в .опу разница ?


То есть, если мы храним данные, например, в трех таблицах, что мы для получения атрибутов должны сделать три запроса.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020379
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLEG_2005,
Я уже как-то говорил, что вариант 1) я неоднократно встречал в различных программных продуктах крупных компаний. То есть, статистика, так сказать, говорит в его пользу:)
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020506
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OLEG_20053. Хранить значения атрибутов как строки, но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы.

Именно этот вариант. Проверку корректности производить на клиенте. Фильтрация идет, нет проблем.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020514
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модOLEG_20053. Хранить значения атрибутов как строки, но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы.

Именно этот вариант. Проверку корректности производить на клиенте. Фильтрация идет, нет проблем.

С этим вариантом связаны проблемы с целостностью данных и кроме того выполнять эффективно фильтрацию становиться проблематичным, все данные будут сравниваться как строки, а это не то, что нужно.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020568
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 17.12.2010 11:20, OLEG_2005 wrote:

> Мне представляется, что в общем случае собирать данных из одной таблице быстрее
> и проще, чем из трех.

Да нет, как раз ровно наоборот.

Если N -- общее кол-во атрибутов,

а Ni -- кол-во атрибутов i-го типа, то

N = N1 + N2 + N3 .... Nk

и время выполнения запросов будет

O( m * N ) или O( m * log N ) -- для решения с одной общей таблицей,

( m -- кол-во получаемых атрибутов)

или

O( m * Ni ) или O( m * log Ni ) -- для решения с индивидуальной таблицей для
каждого атрибута.


Поскольку Ni <= N то как минимум проишрыша не будет, чаще всего будет
выигрыш. Другое дело, что естественно он будет далеко не решающий,
в общем незначительный.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020573
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 17.12.2010 11:23, OLEG_2005 wrote:

> То есть, если мы храним данные, например, в трех таблицах, что мы для получения
> атрибутов должны сделать три запроса.


Почему ?

один запрос с тремя JOIN-ами одной и той же таблицы атрибутов,
либо
один запрос с тремя JOIN-ами трёх разных таблиц атрибутов.

Вот я и говорю -- разницы немного.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020577
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 17.12.2010 12:27, Бредятина wrote:

> Я уже как-то говорил, что вариант 1) я неоднократно встречал в различных
> программных продуктах крупных компаний. То есть, статистика, так сказать,
> говорит в его пользу:)

Вообще в мире-то глупых людей больше, чем умных. Статистика ...

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020783
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivOn 17.12.2010 3:12, ViPRos wrote:

> NULL тут нефиг хранить

Если в одной строке хранить один атрибут, а
полей в строке столько, сколько возможных типов данных атбирутов,
то остальные поля, кроме поля с типом данного атрибута будут NULL.

Я NULL не храню, храню метаданные об атрибутном составе
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020821
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OLEG_2005С этим вариантом связаны проблемы с целостностью данных и кроме того выполнять эффективно фильтрацию становиться проблематичным, все данные будут сравниваться как строки, а это не то, что нужно.
целостность и EAV несовместимы. сравнения нужно делать после преобразования. 90% данных в типовых системах обработки данных - строки.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020862
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модOLEG_2005С этим вариантом связаны проблемы с целостностью данных и кроме того выполнять эффективно фильтрацию становиться проблематичным, все данные будут сравниваться как строки, а это не то, что нужно.
целостность и EAV несовместимы. сравнения нужно делать после преобразования. 90% данных в типовых системах обработки данных - строки.

По крайней мере обеспечить целостность, настолько насколько возможно, кажется логичным.
При преобразовании данных, например, строк в числа, индексы использоваться уже не будут.
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020957
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модOLEG_2005С этим вариантом связаны проблемы с целостностью данных и кроме того выполнять эффективно фильтрацию становиться проблематичным, все данные будут сравниваться как строки, а это не то, что нужно.
целостность и EAV несовместимы. сравнения нужно делать после преобразования. 90% данных в типовых системах обработки данных - строки.

Понятно, что, если есть возможность не использовать EAV, лучше этого не делать.
В данном случае без
...
Рейтинг: 0 / 0
Как лучше хранить значения атрибутов разных типов в EAV
    #37020958
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае без EAV не обойтись.
...
Рейтинг: 0 / 0
25 сообщений из 120, страница 1 из 5
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше хранить значения атрибутов разных типов в EAV
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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