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

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

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

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

а множества связей для разных А могут пересекаться?
...
Рейтинг: 0 / 0
28.09.2011, 10:21
    #37458456
БуГаГа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связть между двумя отношениями с обязательным полем...
давайте рассмотрим оба варианта, т.е. могут и не могут.
...
Рейтинг: 0 / 0
28.09.2011, 12:15
    #37458769
adv
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
28.09.2011, 12:18
    #37458777
adv
adv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связть между двумя отношениями с обязательным полем...
Везде вместо RTipe% читать RType% :)
...
Рейтинг: 0 / 0
28.09.2011, 12:30
    #37458803
БуГаГа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
связть между двумя отношениями с обязательным полем...
adv,

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

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

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


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