powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Подтипы объекта с разными внешними ключами
6 сообщений из 6, страница 1 из 1
Подтипы объекта с разными внешними ключами
    #37574540
coba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой раз уже задумываюсь об этом, но так и не могу понять как правильно. А преподаватель на контакт не идет.
Прошу не придираться к бессмысленности примера. Это всего лишь пример. И.. я только учусь. И.. извиняюсь за много букв.

Допустим есть универмаги, магазины и киоски (торговые точки).
У универмагов есть секции, поделённые на залы.
Магазины поделены только на залы.

Допустим есть ещё уборщицы, которые привязаны к любой торговой точке одной. На одну точку может быть несколько уборщиц.
И допустим ещё есть продавцы. Они привязаны либо к залам универмага, либо к залам магазина, либо к киоскам. Может быть по несколько.

Вопросы:
1. Стоит ли объединять все торговые точки в одну сущность? Да? А если данные будут разниться, то наследование таблиц?
2. Допустим атрибуты залов никогда ничем не отличаются. Значит объединяем их в одну сущность? Один из атрибутов будет тип зала: "Зал универмага" или "Зал магазина". Что делать с внешним ключом. Нужно делать одно поле, которые будет играть двоякую роль в зависимости от типа, или нужно сделать два отдельных поля, одно из которых всегда должно иметь значение NULL? Как лучше?
3. С уборщицами вроде все очевидно, мы ведь специально сделали сущность торговая точка с разными подтипами.
4. С продавцами та же история, что и с залами. Отдельные сущности вроде как смысла делать нет, делаем разные подтипы. Сколько внешних ключей делаем, 1 неоднозначный или 2, один из которых всегда NULL.

5. Бывают ситуации, когда без наследования не обойтись. Есть много разновидностей предков от объекта (15), их экземпляров много (тысячи), у всех разные атрибуты. Если вот так делать таблицы со связью 1:1, то при обработке таких данных, как я понимаю, будет тратится ужас много ресурсов во-первых. Во-вторых сложность алгоритмом возрастает во многие разы. К примеру я работал с СДО Moodle - там повсюду ООП и типа мощная архитектура. В итоге минимальные системные требования сервера: ОЗУ 256мб, +1гб на каждые 50 пользователей одновременно работающих. Всё работает ужас медленно. Так какой же тогда выход? Как сделать быстро, удобно, понятно и правильно?

Буду очень благодарен, если кто-нибудь даст ссылок где можно почитать что-то толковое о наследовании в БД. Желательно на русском. Собрался сделать кое-что нужное и значимое.

Понимаю, что прошу многого, но надеюсь на ваш альтруизм. А я потом поделюсь своим с другими людьми в хорошо понимаемых мной областях :)
...
Рейтинг: 0 / 0
Подтипы объекта с разными внешними ключами
    #37574657
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разберись, что ты моделируешь.

Точки с торговыми площадями, оборудованием и персоналом, это физический мир со сложной организацеий.
Ты пытаешься напялить на него свою классификацию, которая служит какой то определённой цели. (Почему бы не классифицировать объекты по цвету или по топологии подключения к электросети?)

Если в твоей классификации требуется строгая типизация объектов учёта, то никуда от неё не денешься.

Смотрю, речь зашла о сотрудниках. Подозреваю, что классификатор тебе нужен для штатного расписания. Так зачем тебе в штатном расписании строго типизированная иерархия точек и залов. А что если твою систему захотят установить не в розничной торговле, а на оптовом сладе или на заводе?

Напиши просто:

ДолжностьОтделКатегорияМенеджерЗал ПО в магазине "Зацепись ты".СтаршойКонсультантЗал ПО в магазине "Зацепись ты".ЭкспертКонсультантЗал ПО в магазине "Зацепись ты".AnykeyМенеджерЗал Сетевого оборудования в магазине "Зацепись ты".МладшийУборщицаЭтаж 1 магазин "Зацепись ты".УборщицаЭтаж 2 магазин "Зацепись ты".УборщицаТуалеты магазин "Зацепись ты".ПродавецТочка "Загугли"

Отделы можно как то структурировать, обычно по административному подчинению. Но как видим, административная структура может не совпадать с классификацией торговых площадей.
...
Рейтинг: 0 / 0
Подтипы объекта с разными внешними ключами
    #37575240
coba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за замечание, но на самом деле под фразой "прошу не придираться к бессмысленности примера" я подразумевал то, что мой пример не имеет никакого практического применения. Это лишь плод фантазии, чтобы свести все к проблемной ситуации. Чтобы я смог разобраться как правильно указывать внешние ключи, если возникнет что-то подобное.

Зал ссылается либо на секцию универмага, либо на магазин (торговую точку с типом магазин). Делать один внешний ключ "id чего-то, к чему относится зал" или два: "id секции универмага" и "id магазина", один из них всегда должен быть NULL.
...
Рейтинг: 0 / 0
Подтипы объекта с разными внешними ключами
    #37576186
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Зал ссылается либо на секцию универмага, либо на магазин

Это легко обходится типизацией торговых залов. Вы можете рассматривать киоск как торговый зал, который используется только для размещения витрин без доступа к ним покупателей. Т. е. для розничной точки с обслуживающим персоналом пара (идентификатор точки, идентификатор зала) будет иметь смысл.

Приведенный вами пример неудачен: задача может иметь стандартное решение. Однако, вопрос вы задали совершенно правильно. Действительно, есть структуры, где выбор идентификатора необходим. Но также можно придумать структуры, когда один идентификатор необходим, а второй может использоваться, а может и не использоваться. Универсальных рекомендаций по выбору решения нет.
...
Рейтинг: 0 / 0
Подтипы объекта с разными внешними ключами
    #37576439
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobaЗал ссылается либо на секцию универмага, либо на магазин (торговую точку с типом магазин). Делать один внешний ключ "id чего-то, к чему относится зал" или два: "id секции универмага" и "id магазина", один из них всегда должен быть NULL.

а вы не считаете, что зал магазина и зал секции универмага-разные типы залов? если разные, то вполне естественно, что они имеют разные типы предков, точнее они потому и разные типы, что ссылаются на предков разного типа.
если напротив, ссылку направить от предка к потомку, (возможно через таблицу сязей, если речь идет о реляционной БД) то однотипные залы можно будет создавать в торговых предприятиях разного типа.

всегда остается выбор между строгой типизацией на уровне структур и типов данных, и слабой типизацией с проверками правил целостности на уровне декларативных и процедурных ограничений целостности.
...
Рейтинг: 0 / 0
Подтипы объекта с разными внешними ключами
    #37577576
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coba,

часто делали "вырожденное" наследование когда в какую-то таблицу надо вставлять ссылки на разных потомком одной сущности

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Родитель
---------------
ID uniqueidentifier
Тип потомка

Потомок1
------------------
ID uniqueidentifier 
Набор атрибутов

Потомок2
------------------
ID uniqueidentifier 
Набор атрибутов



Родитель вырожден фактически в ID - потомки наследуют только его ID - это дает свободу в варьировании атрибутов, освобождает от соединений с предком при выборках, позволяет вставлять ссылку на различные типы потомков в одно поле таблицы
Единственный минус - чуть усложняется выборка данных потомка по его ID из родительской таблицы по типу
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Подтипы объекта с разными внешними ключами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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