|
|
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Здесь много раз обсуждался EAV, но по этому вопросу ничего стоящего найти не удалось. Скажите, пожалуйста, как, по вашему мнению, лучше хранить значения атрибутов разных типов в EAV? Варианты, которые кажутся возможными: 1. Хранить в таблице значений несколько полей для значений атрибутов, что-то вроде: entity_id attribute_id string_value integer_value date_value. 2. Создать несколько таблиц, каждая их которых хранит значения атрибутов определенного типа: таблица для хранения строк VARCHAR(255), таблица для хранения чисел (UNSIGNED BIGINT), таблица для хранения дат (DATE type). 3. Хранить значения атрибутов как строки, но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы. Сейчас есть представления, что атрибуты могут быть: строковыми, числовыми или датой, но возможно в будущем добавятся новые типы. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2010, 21:43 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Здесь много раз обсуждался EAV, но по этому вопросу ничего стоящего найти не удалось.Этот EAV здесь столько раз перетирали, что очевидно Вам просто не хочется разгребать портянки на множество страниц. Или просто лень читать. авторХранить значения атрибутов как строки, но данный вариант заведомо не подходитТак может выбран заведомо неправильный подхо и ну его к бису этот ЕАV? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2010, 22:40 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
а можно сцылы, где это перетиралось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 00:05 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 01:08 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
MasterZiv, NULL тут нефиг хранить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 03:12 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
On 17.12.2010 3:12, ViPRos wrote: > NULL тут нефиг хранить Если в одной строке хранить один атрибут, а полей в строке столько, сколько возможных типов данных атбирутов, то остальные поля, кроме поля с типом данного атрибута будут NULL. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 09:33 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 16.12.2010 21:43, OLEG_2005 wrote: > Скажите, пожалуйста, как, по вашему мнению, лучше хранить значения атрибутов > разных типов в EAV? Это: > 2. Создать несколько таблиц, каждая их которых хранит значения атрибутов > определенного типа: > таблица для хранения строк VARCHAR(255), таблица для хранения чисел (UNSIGNED > BIGINT), таблица для хранения дат (DATE type).\ 3 -- это вообще не вариант. А вот интересно именно ПОЧЕМУ 2 лучше, чем 1. На самом деле не так в них много разницы. Но вот мне не нравится, что NULL-ы в записях с другим типом данных будут портить статистику распределения значений по данному атрибуту. Что вы имеете виду? Вариант с разными таблицами рассмотрен как попытка уйти от NULL в одной таблице с несколькими столбцами для хранения значений разных типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 09:47 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
В варианте с несколькими таблицами смущает необходимость собирать атрибуты из нескольких таблиц, а не из одной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 10:03 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
Извиняюсь за неточность формулировки. Что касается третьего варианта, то я имел в виду следующее: 3. Использовать EAV и хранить значения атрибутов как строки (VARCHAR), но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы, но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы. То есть этот вариант подразумевает: entity_id attribute_id value (VARCHAR) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 10:07 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
On 17.12.2010 10:03, OLEG_2005 wrote: > В варианте с несколькими таблицами смущает необходимость собирать атрибуты из > нескольких таблиц, а не из одной таблицы. А какая в .опу разница ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 11:09 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 11:10 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 17.12.2010 10:07, OLEG_2005 wrote: > 3. Использовать EAV и хранить значения атрибутов как строки (VARCHAR), но данный > вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, > например, сравнивать числа, к тому же в этом случае, например, в поля, которые > должны хранить числа, можно добавить любые символы, но данный вариант заведомо > не подходит, так как нужно производить фильтрацию по атрибутам, например, > сравнивать числа, к тому же в этом случае, например, в поля, которые должны > хранить числа, можно добавить любые символы. > > То есть этот вариант подразумевает: > entity_id attribute_id value (VARCHAR) Ещё раз, это вообще не вариант. Это -- нарушение доменной целостности данных, грубейшая ошибка проектирования БД. Потом последствия её будут очень горькими. Я пояснил вариант 3, так как его изначально он был сформулирован непонятно и его неправильно понимали Выбор главным образом между вариантами хранить в одной таблице в нескольких полях и в разных таблицах для каждого типа. Это выбор не кажется простым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 11:16 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 17.12.2010 10:03, OLEG_2005 wrote: > В варианте с несколькими таблицами смущает необходимость собирать атрибуты из > нескольких таблиц, а не из одной таблицы. А какая в .опу разница ? Мне представляется, что в общем случае собирать данных из одной таблице быстрее и проще, чем из трех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 11:20 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 17.12.2010 10:03, OLEG_2005 wrote: > В варианте с несколькими таблицами смущает необходимость собирать атрибуты из > нескольких таблиц, а не из одной таблицы. А какая в .опу разница ? То есть, если мы храним данные, например, в трех таблицах, что мы для получения атрибутов должны сделать три запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 11:23 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
OLEG_2005, Я уже как-то говорил, что вариант 1) я неоднократно встречал в различных программных продуктах крупных компаний. То есть, статистика, так сказать, говорит в его пользу:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 12:27 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
OLEG_20053. Хранить значения атрибутов как строки, но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы. Именно этот вариант. Проверку корректности производить на клиенте. Фильтрация идет, нет проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 13:18 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
_модOLEG_20053. Хранить значения атрибутов как строки, но данный вариант заведомо не подходит, так как нужно производить фильтрацию по атрибутам, например, сравнивать числа, к тому же в этом случае, например, в поля, которые должны хранить числа, можно добавить любые символы. Именно этот вариант. Проверку корректности производить на клиенте. Фильтрация идет, нет проблем. С этим вариантом связаны проблемы с целостностью данных и кроме того выполнять эффективно фильтрацию становиться проблематичным, все данные будут сравниваться как строки, а это не то, что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 13:21 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 13:38 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
On 17.12.2010 11:23, OLEG_2005 wrote: > То есть, если мы храним данные, например, в трех таблицах, что мы для получения > атрибутов должны сделать три запроса. Почему ? один запрос с тремя JOIN-ами одной и той же таблицы атрибутов, либо один запрос с тремя JOIN-ами трёх разных таблиц атрибутов. Вот я и говорю -- разницы немного. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 13:39 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
On 17.12.2010 12:27, Бредятина wrote: > Я уже как-то говорил, что вариант 1) я неоднократно встречал в различных > программных продуктах крупных компаний. То есть, статистика, так сказать, > говорит в его пользу:) Вообще в мире-то глупых людей больше, чем умных. Статистика ... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 13:39 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 17.12.2010 3:12, ViPRos wrote: > NULL тут нефиг хранить Если в одной строке хранить один атрибут, а полей в строке столько, сколько возможных типов данных атбирутов, то остальные поля, кроме поля с типом данного атрибута будут NULL. Я NULL не храню, храню метаданные об атрибутном составе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 14:31 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
OLEG_2005С этим вариантом связаны проблемы с целостностью данных и кроме того выполнять эффективно фильтрацию становиться проблематичным, все данные будут сравниваться как строки, а это не то, что нужно. целостность и EAV несовместимы. сравнения нужно делать после преобразования. 90% данных в типовых системах обработки данных - строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 14:43 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
_модOLEG_2005С этим вариантом связаны проблемы с целостностью данных и кроме того выполнять эффективно фильтрацию становиться проблематичным, все данные будут сравниваться как строки, а это не то, что нужно. целостность и EAV несовместимы. сравнения нужно делать после преобразования. 90% данных в типовых системах обработки данных - строки. По крайней мере обеспечить целостность, настолько насколько возможно, кажется логичным. При преобразовании данных, например, строк в числа, индексы использоваться уже не будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 14:50 |
|
||
|
Как лучше хранить значения атрибутов разных типов в EAV
|
|||
|---|---|---|---|
|
#18+
_модOLEG_2005С этим вариантом связаны проблемы с целостностью данных и кроме того выполнять эффективно фильтрацию становиться проблематичным, все данные будут сравниваться как строки, а это не то, что нужно. целостность и EAV несовместимы. сравнения нужно делать после преобразования. 90% данных в типовых системах обработки данных - строки. Понятно, что, если есть возможность не использовать EAV, лучше этого не делать. В данном случае без ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2010, 15:09 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37020080&tid=1542393]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
136ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 455ms |

| 0 / 0 |
