Consignmen Dockyards
------------ ----------
Origin
\
/ ID
Destination
----------- -----------
Связь двух полей одной таблицы с одним полем другой
Код:
А оно, исессьна, не канает.
Так вот, как разрулить такую связь?
Почему не канает? Описанная схема не противоречит реляционной модели данных - такое можно сделать. У вас два отношения один ко многим между двумя таблицами по разным полям. Парные записи можно отсекать, например, дополнительным тригером.
Типичный пример из торговых систем.
Код:
Торговая операция --- агент
\--- контрагент
\--- контрагент
Два последних выбираются из одной и той же таблицы и хранятся в разных полях таблицы "торговая операция"
Цитата: Der Meister
Народ, есть такая проблема. Разрабатывается база данных судоходной компании. Так вот, в ней есть таблица, хранящая сведения о портах отправки/назначения. Есть другая таблица, хранящая информацию о партии некоторого груза, в которой есть поля Origin и Destination, означающие ссылку на прот отправки и прибытия соответственно. Естественно, для каждой партии значения данных полей не должны совпадать. Имеем такую связь:
А оно, исессьна, не канает.
Так вот, как разрулить такую связь?
Код:
Consignmen Dockyards
------------ ----------
Origin
\
/ ID
Destination
----------- -----------
------------ ----------
Origin
\
/ ID
Destination
----------- -----------
А оно, исессьна, не канает.
Так вот, как разрулить такую связь?
По поводу связи, как уже ответили, все ок.
По поводу условия на не совпадение значений полей, если ваша СУБД поддерживает, то можно написать через check-constraint, например:
Код:
create table temp1
(
id1 number,
id2 number,
constraint c1 check (id1 <> id2))
(
id1 number,
id2 number,
constraint c1 check (id1 <> id2))
СУБД - MS SQL Server 2005. Путём долгих стараний связь действительно удалось сделать, однако, мне казалось, что это - корявенькое решение...
Ну покажите-то хоть решение, чтобы оценить корявость