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

1. Есть два отношения A и B, представляют две разных сущности. Сущность A должна иметь минимум одно соединение с отношением B. Причём если для конкретной записи из A существует несколько записей в B, то нужно уметь отличать основную связь (обязательную) от остальных.

2. Обобщаю первую модель. Для любого A может существовать несколько заранее определённых видов связей: обязательный (как выше, для каждого А такя связь может бьть только одна), опциональная связь 1:1 (может быть несколько) и опциональная связь 1:N (может быть несколько).

Множества связей для каждого A не должны пересекаться.
...
Рейтинг: 0 / 0
связть между двумя отношениями с обязательным полем...
    #37458448
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БуГаГа,

а множества связей для разных А могут пересекаться?
...
Рейтинг: 0 / 0
связть между двумя отношениями с обязательным полем...
    #37458456
БуГаГа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
давайте рассмотрим оба варианта, т.е. могут и не могут.
...
Рейтинг: 0 / 0
связть между двумя отношениями с обязательным полем...
    #37458769
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БуГаГа,

что-то вы свой вариант забыли выложить


вариант для "могут" вкраце (если я правильно понял, отношение становится M:N):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
create table B (
BID int not null primary key
);

create table RType (
RTipeID int not null primary key
);


insert into RType (RTypeID) values ( 1 ); -- 1-1
insert into RType (RTypeID) values ( 2 ); -- M-N

create table A (
AID int not null primary key,
BID int not null,
foreign key (BID) references B (BID)
);

create table AB (
ABID  int not null primary key,
AID int not null,
BID int not null,
RTypeID int not null, 
foreign key (AID) references A (AID),
foreign key (BID) references B (BID),
foreign key (RTypeID) references RTipe (RTypeID)
);
go

create unique index IX_AB_11 on AB (AID) where RTypeID= 1 ;
go

create unique index IX_AB_MN on AB (AID, BID);
go

create trigger TG_AB_IU on AB for insert, update as
begin
 if exists (select AID from A inner join inserted i on A.AID=i.AID and A.BID=i.BID)
 begin
  rollback transaction
 end
end
go
...
Рейтинг: 0 / 0
связть между двумя отношениями с обязательным полем...
    #37458777
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Везде вместо RTipe% читать RType% :)
...
Рейтинг: 0 / 0
связть между двумя отношениями с обязательным полем...
    #37458803
БуГаГа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
adv,

что-то вы свой вариант забыли выложить

Да вот что-то не могу придумать подходящий вариант, получается примерно как у вас - через триггеры. Нет ли решения с естественной "нормализацией" данных, т.е. просто через отношения связей и FK (стандартные контсреинты)?
...
Рейтинг: 0 / 0
связть между двумя отношениями с обязательным полем...
    #37458837
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БуГаГа,

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


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