Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / иерархия сущьностей / 19 сообщений из 19, страница 1 из 1
31.03.2006, 07:35
    #33636585
vitabir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
Как правильно описать с помощью sql иерархию сущьностей:
экземпляры объекта образуют подмножества, обладающие сходными и различными свойствами и вступающие в различные связи. Например, объект устройство (родовая сущьность, суперкласс) в него входят категории компьютер, монитор, принтер часть характеристик которых совпадает например инвентарный номер, кабинет, а другая часть свойственна отдельно каждой категории например жесткий диск, разрешение экрана.
Создать одну таблицу со всеми атрибутами или отдельно для компьютера, монитора и т.д. будет не правильно. Как это можно сделать?
Использую MS Sql server express и Management Studio Express Edition CTP
...
Рейтинг: 0 / 0
31.03.2006, 08:21
    #33636621
daw
daw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
это Вам в форум по Проектированию БД лучше. там такое не раз и не два уже
обсуждалось...


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
31.03.2006, 09:32
    #33636736
Alexander_F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
vitabir
Создать одну таблицу со всеми атрибутами или отдельно для компьютера, монитора и т.д. будет не правильно.

Почему неправильно? Аргументируйте.

Возможен вариант, когда общие свойства хранятся в одной таблице, а индивидуальные в соответствующей каждому объекту таблице.
...
Рейтинг: 0 / 0
31.03.2006, 09:49
    #33636771
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
vitabirСоздать одну таблицу со всеми атрибутами или отдельно для компьютера, монитора и т.д. будет не правильно.
Именно так и надо сделать. Т.е. так как вы бы делали на любом языке программирования: один общий тип с вложенными подтипами причем уровней вложения м.б. много.
...
Рейтинг: 0 / 0
31.03.2006, 10:31
    #33636879
vitabir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
Если сделать одну сущьность, напрмер устройство и внести в нее все атрибуты категорий компьютер, монитор, принтер это скроет реальную внутреннюю структуру категорий (поле жесткий диск у монитора) много лишних полей для некоторых категорий. А если создать отдельные сущности монитор, принтер, компьютер то скроется факт наличия общих харетеристик (инвентарный номер и т.п.) В теории я знаю что надо объединить общие характеристики и разъединить различные, но как это реализовать на практике?
...
Рейтинг: 0 / 0
31.03.2006, 10:51
    #33636961
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
vitabir В теории я знаю что надо объединить общие характеристики и разъединить различные, но как это реализовать на практике?
Если язык позволяет то введением пользовательских типов (а ля С или Oracle) если не позволяет то комментариями. Лишние поля не мешают - они ведь не будут заполняться (зависит от интерфейса).
...
Рейтинг: 0 / 0
31.03.2006, 10:57
    #33636978
vitabir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
мод vitabir В теории я знаю что надо объединить общие характеристики и разъединить различные, но как это реализовать на практике?
Если язык позволяет то введением пользовательских типов (а ля С или Oracle) если не позволяет то комментариями. Лишние поля не мешают - они ведь не будут заполняться (зависит от интерфейса).

использую SQL
...
Рейтинг: 0 / 0
31.03.2006, 11:16
    #33637049
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
vitabirиспользую SQL
В SQL оракла есть типы. У других не знаю. В крайнем случае - комментарии.
...
Рейтинг: 0 / 0
31.03.2006, 11:30
    #33637098
Alexander_F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
Возможны 2 варианта:
1) Сделать для каждой категории свою отдельную таблицу, но общие поля во всех категориях назвать одинаково. Если конечно количество общих полей заранее известно. Здесь возникает проблема, когда нужно изменить количество общих полей - нужно лезть во все таблицы.

2) Существует таблица, содержащая общие характеристики. Плюс в этой таблице есть 2 поля: одно указывает тип объекта, на основании которого можно обращаться к таблице, в которой содержатся уникальные свойства соответствующего объекта; второе поле содержит ключ объекта в соответствующей таблице.

На мой взгляд второй вариант более гибкий, так как при изменении количества общих свойств изменения нужно вносить только в одну таблицу.

Других вариантов просто нет.
...
Рейтинг: 0 / 0
31.03.2006, 11:46
    #33637156
_spy_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
Alexander_F2) Существует таблица, содержащая общие характеристики. Плюс в этой таблице есть 2 поля: одно указывает тип объекта, на основании которого можно обращаться к таблице, в которой содержатся уникальные свойства соответствующего объекта; второе поле содержит ключ объекта в соответствующей таблице.
И как так организовать ссылочность? Второе поле будет внешним ключем сразу ко всем таблицам объектов?
Не лучше ли сделать главной таблицу общих характеристик и набор таблиц для каждого объекта, которые будет детальными для таблицы общих характеристик?
...
Рейтинг: 0 / 0
31.03.2006, 11:53
    #33637178
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
Alexander_FДругих вариантов просто нет.
одна сущность=одна таблица
остальное от лукавого
...
Рейтинг: 0 / 0
31.03.2006, 12:04
    #33637227
PridobreY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
vitabirЕсли сделать одну сущьность, напрмер устройство и внести в нее все атрибуты категорий компьютер, монитор, принтер это скроет реальную внутреннюю структуру категорий (поле жесткий диск у монитора) много лишних полей для некоторых категорий. А если создать отдельные сущности монитор, принтер, компьютер то скроется факт наличия общих харетеристик (инвентарный номер и т.п.) В теории я знаю что надо объединить общие характеристики и разъединить различные, но как это реализовать на практике?

Посмотри третий вариант
...
Рейтинг: 0 / 0
31.03.2006, 12:06
    #33637233
Alexander_F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
_spy_
И как так организовать ссылочность? Второе поле будет внешним ключем сразу ко всем таблицам объектов?
Не лучше ли сделать главной таблицу общих характеристик и набор таблиц для каждого объекта, которые будет детальными для таблицы общих характеристик?

Возможно я не закончил мысль. Конечно для каждого объекта своя таблица, которая содержит индивидуальные для этого объекта свойства. Плюс глобальная таблица для общих свойств.

Второе поле будет внешним ключем к соответствующей таблице объекта.
...
Рейтинг: 0 / 0
31.03.2006, 12:23
    #33637293
Alexander_F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
PridobreY Посмотри третий вариант
Согласен, 3 варианта. В двух словах:

1) Все объекты в одной таблице
2) Все объекты в отдельных таблицах
3) Общие свойства объектов в одной таблице, индивидуальне - в отдельной для каждого вида объекта.

Я бы выбрал вариант 3 как самый гибкий.
...
Рейтинг: 0 / 0
31.03.2006, 12:23
    #33637294
_spy_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
Alexander_F Второе поле будет внешним ключем к соответствующей таблице объекта.
Это как? Тогда уж придется создавать в общей таблице столько полей для внешних ключей, сколько таблиц объектов. Я говорил про то, что главными должны быть не таблицы объектов, а таблица общих свойств и внешние ключи будут у таблиц объектов - ссылаться на поле идентификатора таблицы общих свойств. Хотя может все же подумать над вариантом просто отдельных таблиц для каждой сущности.
...
Рейтинг: 0 / 0
31.03.2006, 13:03
    #33637462
PridobreY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
Alexander_F PridobreY Посмотри третий вариант
Согласен, 3 варианта. В двух словах:

1) Все объекты в одной таблице
2) Все объекты в отдельных таблицах
3) Общие свойства объектов в одной таблице, индивидуальне - в отдельной для каждого вида объекта.

Я бы выбрал вариант 3 как самый гибкий.

Вы по другому трактовали, описанный мной, третий вариант. По приведенной ссылке он отличается, и намного гибче.
Суть в следующем.
Общие свойства объектов в одной таблице. Виды объектов в другой.
Для вида объекта устанавливаем перечень свойств. Для экземпляра объекта, определенного вида, заполняется установленный набор свойств. Значения этих свойств храняться в отдельных таблицах, в зависимости от типа данных (не от вида, вид лишь определяет набор свойств.) В итоге имеем возможность, добавлять новые виды объектов, изменять наборы свойств объектов, без перестройки структуры хранения данных. В случаях 1,2,3 - как описали Вы, придется добавлять поля, таблицы.
...
Рейтинг: 0 / 0
31.03.2006, 13:26
    #33637546
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
2PridobreY
В теории это, конечно, хорошо, но на практике обычно очень неэффективно.
Практически получается дублирование функций sql-сервера, его системные таблицы обьектов, свойств и т.д. дублируются пользовательскими.
Наверно, есть задачи, где это оправданно ( когда разных типов обьектов очень много и постоянное возникновение новых типов и изменение старых - часть рабочего процесса), но в большинстве случаев - имхо нет.
...
Рейтинг: 0 / 0
31.03.2006, 13:30
    #33637551
Alexander_F
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
Гибче, но только в том случае если придется создавать новые типы объектов,
причем делать это будет пользователь.
...
Рейтинг: 0 / 0
31.03.2006, 13:37
    #33637568
PridobreY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
иерархия сущьностей
Кот Матроскин
Наверно, есть задачи, где это оправданно ( когда разных типов обьектов очень много и постоянное возникновение новых типов и изменение старых - часть рабочего процесса), но в большинстве случаев - имхо нет.
Действительно, всё зависит от задачи.
Если различие в свойствах не велико, тогда первый вариант.
Если различий много, а типов(видов) мало, тогда второй.
Если все типы заранее не известны, и как следствие набор их свойств тоже не известен, тогда третий.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / иерархия сущьностей / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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