|
|
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. При разработке схемы возник такой вопрос. В системе будет некая сущность (Объект), в зависимости от ее типа к ней могут быть привязаны различные свойства. Например, тип объекта - Горшок цветочный серии ааа, свойства - масса (дробное число), цвет (строка), цена (целое число); тип объекта - книга, свойства - год издания (дата), цена (целое число), автор (строка), число страниц (целое число), название (строка) Соответственно появляются сущности Тип Объекта (динамически заполняется), Свойства (динамически заполняются) и Объект (*-1 к типу и *-* к свойствам). Не пойму, как лучше хранить значения этих свойств? Сделать таблицу по принципу Id св-ва, Id объекта, значение (строка) или же разбить эту таблицу на несколько по типу данных? т.е. Id св-ва, Id объекта, значение (строка) + Id св-ва, Id объекта, значение (дата) + Id св-ва, Id объекта, значение (дробное число) и т.п. Типы данных являются статическими, т.е. админ не сможет добавлять новые типы, к примеру дробное с 1 знаком до и с 5 знаками после запятой. Заранее спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 12:36 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
dukalis36, Я уже встречался с подобной задачей, когда свойства и их типы заведомо не определены, а их определение является динамическим, то есть в ходе добавления или редактирования некоторой сущности в БД. В данном случае лучшим подходом будет сделать как Вы уже и описали: это создание справочника свойств (длина, ширина, масса, напряжение, цвет и т. д.) и справочника типов. Также будет таблица сущности в которой будут присутствовать ссылки на эти два справочника (таблицы). Ясно, что в этом случае отношение сущность-справочник свойств будет определено как многие ко многим. В простом случае справочник типов будет связан с справочником свойств отношением один ко многим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 14:04 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Спасибо. Но я все равно не понял, что лучше авторНе пойму, как лучше хранить значения этих свойств? Сделать таблицу по принципу Id св-ва, Id объекта, значение (строка) или же разбить эту таблицу на несколько по типу данных? т.е. Id св-ва, Id объекта, значение (строка) + Id св-ва, Id объекта, значение (дата) + Id св-ва, Id объекта, значение (дробное число) и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 14:19 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
dukalis36, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 15:46 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
dukalis36Спасибо. Но я все равно не понял, что лучше авторНе пойму, как лучше хранить значения этих свойств? Сделать таблицу по принципу Id св-ва, Id объекта, значение (строка) или же разбить эту таблицу на несколько по типу данных? т.е. Id св-ва, Id объекта, значение (строка) + Id св-ва, Id объекта, значение (дата) + Id св-ва, Id объекта, значение (дробное число) и т.п. Думаю что лучше хранить значение в виде строки, поскольку любой тип можно преобразовать в строку и обратно. Создание связанной таблицы для каждого типа плохой вариант, поскольку типы заранее не определены, а создавать такие таблицы динамически это не самый лучший выбор, поскольку возможна ситуация, при которой будет создаваться большое количество типов для хранения свойств, для некоторых их которых будет мало значений. А создавать сто таблиц для хранение нескольких записей в каждой конкретно для это случая это точно не правильно. Храните как строку nvarchar(max) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 16:22 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
rsolanov, Это какие же типы не определены? какие 100 таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 16:48 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Джамшид Ровшанrsolanov, Это какие же типы не определены? какие 100 таблиц? То, что типов не так и много я согласен, а как выходить из ситуации с NUMERIC например? NUMERIC(14, 2); NUMERIC(18, 4); NUMERIC(18, 0) ну и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 17:15 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Будем считать, что типы значений свойств заранее определены. Скажем: целое, дробное, дата, строка. Какие будут аргументы за предложенные варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 17:16 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
dukalis36Будем считать, что типы значений свойств заранее определены. Скажем: целое, дробное, дата, строка. Какие будут аргументы за предложенные варианты? А что значит дробное позвольте узнать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 17:18 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
rsolanovА что значит дробное позвольте узнать? это сделанное из дроби - мелконакатанных металлических шариков... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 17:35 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Чую пахнет очередным EAV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 18:28 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
rsolanov, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 19:44 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
rsolanovДжамшид Ровшанrsolanov, Это какие же типы не определены? какие 100 таблиц? То, что типов не так и много я согласен, а как выходить из ситуации с NUMERIC например? NUMERIC(14, 2); NUMERIC(18, 4); NUMERIC(18, 0) ну и так далее. Никак. Будет только NUMERIC(9,2). В этой задаче это будет единственное "дробное". авторЧую пахнет очередным EAV Пованивает с самого начала)) Вопрос-то не в этом, а в том, хранить ли Value в одной таблице или в нескольких. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 19:57 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
авторdukalis36rsolanov[quot Джамшид Ровшан]rsolanov, Это какие же типы не определены? какие 100 таблиц? То, что типов не так и много я согласен, а как выходить из ситуации с NUMERIC например? NUMERIC(14, 2); NUMERIC(18, 4); NUMERIC(18, 0) ну и так далее. Никак. Будет только NUMERIC(9,2). В этой задаче это будет единственное "дробное". Понадеяться на то, что для этого типа точность и масштаб никогда не будут изменяться - это означает вбить в систему большой гвоздь. Практика показывает, что очень часто, даже на этапе проектирования ИС требования к ней часто изменяются. Например, хранить деньги в типе NUMERIC(9,2) я точно не советую, уже очень скоро Вы увидите что этого Вам не хватает. Если Вы до сих пор сомневаетесь, то завтра все по вылезут из своих берлог и у Вас будет больше постов для обдумывания этого вопроса. Я голосую за строку, а Джамшид Ровшан как я понял, предпочитает разбавить это по разным таблицам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 20:21 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
dukalis36авторЧую пахнет очередным EAV Пованивает с самого начала)) Вопрос-то не в этом, а в том, хранить ли Value в одной таблице или в нескольких.Как-же это так "вопрос не в этом"? В нем, родимом. :) Извините, если невнимательно прочитал тему, но Вы собираетесь "раскидать" EAV по нескольким таблям или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 20:23 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Джамшид Ровшан, я вижу Вы в неописуемом восторге. :) Помогите топикстартеру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 20:23 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
rsolanov, ПРи чем тут восторг? Есть задача, есть решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 21:24 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Джамшид Ровшан == Сахават Юсифов (забанненый который). Возможно опять ошибаюсь, но уж это точно он. С картинками своих супер-пупер программулин, суть поток сознания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 22:05 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Senya_L, вроде на той каринке все как в скл менеджмент студио, почему поток чего то , который ты не уразумел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2010, 22:29 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Один из возможных вариантов (несколько специфический, но всё же) - типы объектов хранить справочником, а свойства и их значения - в BLOB в формате XML. Что-нибудь вроде <property><type>integer</type><value>123</value></property> При такой схеме в свойства можно запихать всё что угодно. Если появляется новая сущность со специфическими свойствами, то схема БД не меняется. Но запросы писать по свойствам будет проблематично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 07:37 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
rsolanovТо, что типов не так и много я согласен, а как выходить из ситуации с NUMERIC например? NUMERIC(14, 2); NUMERIC(18, 4); NUMERIC(18, 0) ну и так далее. Рулить надо от пользовательских типов (доменов), а не от всех вариантов базовых типов сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 13:08 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовrsolanovТо, что типов не так и много я согласен, а как выходить из ситуации с NUMERIC например? NUMERIC(14, 2); NUMERIC(18, 4); NUMERIC(18, 0) ну и так далее. Рулить надо от пользовательских типов (доменов), а не от всех вариантов базовых типов сервера. Хорошо и как Вы предлагаете решить эту задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 13:28 |
|
||
|
Хранение сущности и ее свойств
|
|||
|---|---|---|---|
|
#18+
Про свойства EAV уже не раз перетирали на форуме. XML неплохой вариант, когда СУБД поддерживает SQL запросы по XML объектам. Попробуйте назвать сущность "Объект" както более определённо - в терминах прикладной области. Возможно это поможет вам точнее сформулировать задачу. Можно изменить подход к классификации. Например вместо типа "Горшок цветочный серии ааа", определить тип - "ёмкость", а назначение и серию ёмкости вынести в атрибуты. Для книги - носитель информации и т.п. Тогда у вас образуется ограниченный набор типов которые будут подходить для храния описаний любых товаров. Задача не простая, но в итоге вы получите систему ориентированную на решение прикладных задач пользователя, а не Lego пазл. Сейчас вы по сути предлагаете пользователю БД написать её структуру. Но надо помнить, что пользователь не специалист в области проектирования БД и ему нужны готовые решения. Пользователь скорее всего создаст плохую структуру БД и скажет, что ваша система плохая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 13:40 |
|
||
|
|

start [/forum/topic.php?fid=32&startmsg=36427338&tid=1542876]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 504ms |

| 0 / 0 |
