Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как нужно спроектировать схему под такие условия ? / 7 сообщений из 7, страница 1 из 1
24.12.2014, 16:58
    #38841941
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как нужно спроектировать схему под такие условия ?
Привет.

Подскажите пожалуйста. как нужно спроектировать таблицы по такой задаче. Задаю вопрос не по лабораторной работе а для понимания :)

Имеется Таблица заявок MainTable. заявки могут оставлять Организации (OrgTable) и Пользователи (UserTable).

MainTable
id RequesterID Type

Столбец Type:
1 - ссылка на OrgTable, 2 - ссылка на userTable

OrgTable
id Name

userTable
id name

Как спроектировать таблицы, чтобы можно было настроить Ограничения (уникальности, внешних ключей) для столбца MainTable.RequesterID ? Ведь он должен ссылатся на две таблицы !
В итоге в MainTable.RequesterID будут дубли (1,1,2,2) - т.к. она ссылается на 2 разные таблицы.

Может быть нужно пойти от обратного, и пусть в таблицах OrgTable/UserTable пусть будут ссылки на MainTable ? Но каким ограничением обеспечить, чтобы не появились "мертвые записи" в таблице MainTable в этом случае ?
...
Рейтинг: 0 / 0
24.12.2014, 17:10
    #38841953
vova ivanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как нужно спроектировать схему под такие условия ?
ProBiotek,

общая должна быть таблица для Организации и Пользователи (Клиенты)
и поле Type - уже в ней

если для Организации и Пользователи реквизиты слишком разные, и вы не терпимы к "дырявым" таблицам,
то делаете ещё 2-е таб. КлиентыОрганизации и КлиентыПользователи , связанные в 1:(1,0) с Клиенты
...
Рейтинг: 0 / 0
24.12.2014, 17:13
    #38841956
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как нужно спроектировать схему под такие условия ?
Вы выбираете подход, когда Организации (OrgTable) и Пользователи (UserTable) у Вас суть две разные сущности. Я бы предложил подумать над вариантом объединить их в одну сущность, скажем, Клиент. Тут проблемы с целостностью уже не возникнет, ибо формально таблица одна. Реально же их будет три - Client, ClientOrganizationExtended и ClientPersonExtended. В основной будут только базовые совместимые характеристики, в Extended - дополнительные и уникальные для типа клиента характеристики. Да, контроль целостности типа "вилка" останется. Но критичность нарушения целостности резко снизится, потому можно будет использовать методы контроля целостности, допускающие нарушение (удаление при CHECK CONSTRAINT, например). А можно вообще вместо двух Extended-таблиц пойти на создание одной EAV-таблицы. Там, правда, свои заморочки.
В общем, куда не плюнь, везде свои минусы... да, есть и ещё варианты, и тоже с минусами - фантазия-то у нас безгранична.
...
Рейтинг: 0 / 0
24.12.2014, 17:19
    #38841970
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как нужно спроектировать схему под такие условия ?
Akina,

Что означает "удаление при CHECK CONSTRAINT" ? Каким образом это реализуется ?

Я понимаю про каскадное удаление, но там связано с внешними ключами....
...
Рейтинг: 0 / 0
24.12.2014, 18:02
    #38842028
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как нужно спроектировать схему под такие условия ?
ProBiotekЧто означает "удаление при CHECK CONSTRAINT" ? Каким образом это реализуется ?
То, что тебя смутило в соседней теме " Как сделать такое ограничение ? ". Ни больше ни меньше...
...
Рейтинг: 0 / 0
24.12.2014, 18:09
    #38842040
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как нужно спроектировать схему под такие условия ?
Правильно было бы разделить MainTable на две таблицы по горизонтали.
Как вариант - отказаться от нормализации и собрать в общий "хвост" обе таблицы OrgTable и UseTable. Тогда появятся незаполненные поля.
...
Рейтинг: 0 / 0
24.12.2014, 18:15
    #38842052
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как нужно спроектировать схему под такие условия ?
Владислав КолосовКак вариант - отказаться от нормализации и собрать в общий "хвост" обе таблицы OrgTable и UseTable. Тогда появятся незаполненные поля.Пустые поля - не так страшно, как избыточные индексы. С хреновой тучей NULL-ов.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как нужно спроектировать схему под такие условия ? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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