Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Связь двух полей одной таблицы с одним полем другой

341
21 декабря 2007 года
Der Meister
874 / / 21.12.2007
Народ, есть такая проблема. Разрабатывается база данных судоходной компании. Так вот, в ней есть таблица, хранящая сведения о портах отправки/назначения. Есть другая таблица, хранящая информацию о партии некоторого груза, в которой есть поля Origin и Destination, означающие ссылку на прот отправки и прибытия соответственно. Естественно, для каждой партии значения данных полей не должны совпадать. Имеем такую связь:
 
Код:
Consignmen   Dockyards
------------  ----------
Origin
                \
                / ID
Destination  
-----------  -----------

А оно, исессьна, не канает.
Так вот, как разрулить такую связь?
412
21 декабря 2007 года
grgdvo
323 / / 04.07.2007
Здесь на форуме уже просили указывать движок базы. Что используете? Oracle, MSSQL, MySQL, PostgresQL.... Это существенно.

Почему не канает? Описанная схема не противоречит реляционной модели данных - такое можно сделать. У вас два отношения один ко многим между двумя таблицами по разным полям. Парные записи можно отсекать, например, дополнительным тригером.

Типичный пример из торговых систем.
 
Код:
Торговая операция --- агент
                  \--- контрагент


Два последних выбираются из одной и той же таблицы и хранятся в разных полях таблицы "торговая операция"
8.2K
21 декабря 2007 года
Ora-cool
211 / / 20.09.2007
Цитата: Der Meister
Народ, есть такая проблема. Разрабатывается база данных судоходной компании. Так вот, в ней есть таблица, хранящая сведения о портах отправки/назначения. Есть другая таблица, хранящая информацию о партии некоторого груза, в которой есть поля Origin и Destination, означающие ссылку на прот отправки и прибытия соответственно. Естественно, для каждой партии значения данных полей не должны совпадать. Имеем такую связь:
 
Код:
Consignmen   Dockyards
------------  ----------
Origin
                \
                / ID
Destination  
-----------  -----------

А оно, исессьна, не канает.
Так вот, как разрулить такую связь?


По поводу связи, как уже ответили, все ок.
По поводу условия на не совпадение значений полей, если ваша СУБД поддерживает, то можно написать через check-constraint, например:

 
Код:
create table temp1
(
id1 number,
id2 number,

constraint c1 check (id1 <> id2))
341
21 декабря 2007 года
Der Meister
874 / / 21.12.2007
СУБД - MS SQL Server 2005. Путём долгих стараний связь действительно удалось сделать, однако, мне казалось, что это - корявенькое решение...
8.2K
21 декабря 2007 года
Ora-cool
211 / / 20.09.2007
Ну покажите-то хоть решение, чтобы оценить корявость
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог