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

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

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

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

Сейчас есть представления, что атрибуты могут быть: строковыми, числовыми или датой, но возможно в будущем добавятся новые типы.
Спасибо.
...
Рейтинг: 0 / 0
16.12.2010, 22:40
    #37019502
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить значения атрибутов разных типов в EAV
OLEG_2005Здесь много раз обсуждался EAV, но по этому вопросу ничего стоящего найти не удалось.Этот EAV здесь столько раз перетирали, что очевидно Вам просто не хочется разгребать портянки на множество страниц. Или просто лень читать.
авторХранить значения атрибутов как строки, но данный вариант заведомо не подходитТак может выбран заведомо неправильный подхо и ну его к бису этот ЕАV?
...
Рейтинг: 0 / 0
17.12.2010, 00:05
    #37019588
JohnSparrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить значения атрибутов разных типов в EAV
а можно сцылы, где это перетиралось?
...
Рейтинг: 0 / 0
17.12.2010, 01:08
    #37019625
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить значения атрибутов разных типов в EAV
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
17.12.2010, 03:12
    #37019663
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить значения атрибутов разных типов в EAV
MasterZiv,

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

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

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

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


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

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


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

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

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

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

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

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

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


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

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

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


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

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

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


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

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

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

С этим вариантом связаны проблемы с целостностью данных и кроме того выполнять эффективно фильтрацию становиться проблематичным, все данные будут сравниваться как строки, а это не то, что нужно.
...
Рейтинг: 0 / 0
17.12.2010, 13:38
    #37020568
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить значения атрибутов разных типов в EAV
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
17.12.2010, 13:39
    #37020573
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше хранить значения атрибутов разных типов в EAV
On 17.12.2010 11:23, OLEG_2005 wrote:

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


Почему ?

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

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

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

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

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

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

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

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

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

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


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