Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как связать различные сущности с одним полем? / 10 сообщений из 10, страница 1 из 1
11.09.2017, 09:42
    #39518996
Victor Mog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
Есть таблица, описывающая системы (system, например).
А у систем есть владелец - сотрудник, подразделение или организация.
Как мне это связать в БД?!
...
Рейтинг: 0 / 0
11.09.2017, 09:51
    #39519002
netfrog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
Victor Mog,

Как это сделано в операционных системах:

Сделай группу доступа, в неё включи тех, кто имеет права.

К защищаемой системе присоединить один к одному группу доступа и, возможно, поле владельца системы.
...
Рейтинг: 0 / 0
11.09.2017, 11:18
    #39519047
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
Victor MogКак мне это связать в БД?!

Используй foreign key между таблицами system и owner, Люк!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.09.2017, 11:34
    #39519062
Victor Mog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
Может я не смог объяснить подробно...
Нет таблицы owner !
Есть employees/i], [i]organisatrions и divisions - разные сущности!
...
Рейтинг: 0 / 0
11.09.2017, 12:02
    #39519083
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
Victor MogНет таблицы owner!

Так создай. И перенеси туда общие поля из трёх перечисленных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.09.2017, 12:44
    #39519110
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
Victor Mogу систем есть владелец - сотрудник, подразделение или организация.Иными словами, экземпляр сущности "контрагент" является атрибутом сущности "система". В этом случае - просто поле в таблице систем и FK в таблицу с деревом контрагентов.
Либо экземпляр сущности "контрагент" является мульти-атрибутом сущности "система" (несколько экземпляров контрагента одновременно являются владельцем экземпляра системы). В таком случае дополнительная связывающая таблица СистемаКонтрагент, и FK из неё в обе таблицы.
...
Рейтинг: 0 / 0
11.09.2017, 18:28
    #39519426
registerers
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
Victor Mog,

как то так?

...
Рейтинг: 0 / 0
12.09.2017, 08:37
    #39519645
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
registerersкак то так?Нет, как-то не так. Организация, Отдел, Сотрудник - в рамках предметной области это одна и та же сущность Владелец. И таблица должна быть одна, а не три.
...
Рейтинг: 0 / 0
15.09.2017, 15:14
    #39521913
Владимир П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
Akinaэто одна и та же сущность Владелец. И таблица должна быть одна, а не три.
Ты предлагаешь создать таблицу OWNER. А как ты бы поступал дальше?

Вариант с полем-дискриминантом и IDом без внешнего ключа (OwnershipType + OwnerId) уже многократно (и справедливо) раскритикован именно за то, что не позволяет создать внешний ключ и добится декларативного контроля целостности ссылок. Его рассматривать не будем.

Можно сделать в таблице OWNER по внешнему ключу на каждый тип владельца. Это позволит легко создать ограничение "тип владельца должен быть один и только один" (подсчитать количество NOT NULL'ов и потребовать, чтобы оно было равно 1). Но потребует вмешаться в структуру таблицы всякий раз, когда набор возможных типов владельцев изменяется.

Второй вариант — сделать ссылки в противоположном направлении, от владельцев каждого конкретного типа к общей таблице OWNER. Но проконтролировать, чтобы на каждую запись OWNER была ровно одна ссылка — наверное, здесь придётся накручивать нетривиальную логику на триггерах или хранимках.
...
Рейтинг: 0 / 0
15.09.2017, 16:22
    #39521965
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать различные сущности с одним полем?
Victor MogЕсть таблица, описывающая системы (system, например).
А у систем есть владелец - сотрудник, подразделение или организация.
Как мне это связать в БД?!

Наследование и связь с общим предком.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как связать различные сущности с одним полем? / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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