Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: Первый или второй?
Первый вариант 0 0%
Второй вариант 0 0%
Голосовавшие: 0. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2017, 18:25   #1
gantzboss
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 31
По умолчанию Связи между таблицами

Здравствуйте

Как правильно поставить связи между 3 таблицами, что бы в 3-ей таблице была первая или вторая, но не две сразу

Может, что то вроде этого:

1)
Снимок.PNG
2)
Снимок2.PNG

Но оба варианта мне как то не нравятся, хоть я остановился на втором
gantzboss вне форума Ответить с цитированием
Старый 02.11.2017, 18:58   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ни первый, ни второй способ не обеспечит на уровне внешних ссылок не две сразу. Нужно еще триггерный контроль добавлять и 1-ый способ предпочтительней, имхо. Лишнее поле пугает? А лишняя пара таблиц не?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 02.11.2017 в 19:01.
Аватар вне форума Ответить с цитированием
Старый 02.11.2017, 20:09   #3
gantzboss
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Лишнее поле пугает? А лишняя пара таблиц не?
В каждой строке будет пустое поле. А 2 таблицы(связь n:m) меня меньше пугают, так как его там нет


Может есть иной способ реализовать данную задачу? А не только этими двумя.

Последний раз редактировалось gantzboss; 02.11.2017 в 20:11.
gantzboss вне форума Ответить с цитированием
Старый 05.11.2017, 16:35   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Как правильно поставить связи между 3 таблицами, что бы в 3-ей таблице была первая или вторая, но не две сразу
я бы сделал вот так

Код:
CREATE SEQUENCE global   INCREMENT 1  MINVALUE 1  MAXVALUE 999999  START 1;
а теперь вот так

Код:
create table TABLE1
(
  id integer PRIMARY KEY nextval(global),
  data1 xxxx,
  data2 yyyy,
  и так далееее
)

create table TABLE2
(
  id integer PRIMARY KEY nextval(global),
  data1 xxxx,
  data2 yyyy,
  и так далееее
)

а теперь таблица 3

create table TABLE3
(
  id integer PRIMARY KEY,
ref integer, 
  data1 xxxx,
  data2 yyyy,
  и так далееее
)

при корректном наполнении таблиц 1 и 2, значение REF в таблице 3 всегда будет уникальным, а id первой и второй таблицы никогда не будут повторятся.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 08.11.2017, 10:07   #5
gantzboss
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 31
По умолчанию

Хм. Я даже не думал, что так можно. Спасибо.

Но я делаю на mysql. Этот вариант будет аналогом

Код:
create table global1(
glob bigint auto_increment primary key
);

create table TABLE1
(
  id bigint PRIMARY KEY,
  foreign key fk1(id) references global1(glob)
);

create table TABLE2
(
  id bigint PRIMARY KEY,
  foreign key fk2(id) references global1(glob)
);

create table TABLE3
(
  id integer PRIMARY KEY,
  ref bigint,
  foreign key fk3(ref) references global1(glob)
)
или есть аналог SEQUENCE ?

Последний раз редактировалось gantzboss; 08.11.2017 в 14:53.
gantzboss вне форума Ответить с цитированием
Старый 08.11.2017, 22:54   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от gantzboss Посмотреть сообщение
Но я делаю на mysql. Этот вариант будет аналогом
1) Для понятия типы связей между таблицами http://www.online-academy.ru/demo/ac...teor/teor4.htm
2) Почитайте про on cascade delete и on cascade update http://www.mysqltutorial.org/mysql-on-delete-cascade/
xxbesoxx вне форума Ответить с цитированием
Старый 09.11.2017, 10:18   #7
gantzboss
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
1) Для понятия типы связей между таблицами http://www.online-academy.ru/demo/ac...teor/teor4.htm
2) Почитайте про on cascade delete и on cascade update http://www.mysqltutorial.org/mysql-on-delete-cascade/
не до конца понимаю как каскадность повлияет на мой аналог замены SEQUENCE, я не собираюсь строку из глобала(global1) подсоединять сразу в две таблицы(TABLE1, TABLE2)
и по сути не вижу ничего противозаконного в связях

Последний раз редактировалось gantzboss; 09.11.2017 в 10:21.
gantzboss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связи между таблицами Вероника99 PHP 1 09.03.2016 12:21
Access связи между таблицами DoGFoX Microsoft Office Access 4 16.11.2012 10:04
Связи между таблицами. AntiKaspersky Общие вопросы .NET 1 19.11.2010 14:40
связи между таблицами new_here Microsoft Office Access 8 06.10.2010 12:13
Связи между таблицами! Alexij БД в Delphi 1 10.06.2008 18:11