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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE IF NOT EXISTS `tab_anketa_rashod` (
  `login_acc` varchar(128) NOT NULL COMMENT 'Логин',
  `num_ver` int(7) unsigned NOT NULL COMMENT 'Номер версии анкеты',
  `kod_rashod` tinyint(2) unsigned NOT NULL COMMENT 'Код расхода',
  `sum_rashod` decimal(12,2) unsigned NOT NULL COMMENT 'Размер расхода',  

  PRIMARY KEY (`login_acc`,`num_ver`, `kod_rashod`),

  CONSTRAINT `fk_ranketa` FOREIGN KEY (`login_acc`,`num_ver`) REFERENCES `tab_anketa` (`login_acc`,`num_ver`) ON DELETE NO ACTION ON UPDATE NO ACTION
, 
  CONSTRAINT `fk_rashod` FOREIGN KEY (`kod_rashod`) REFERENCES `tab_vid_rashod` (`kod_rashod`) ON DELETE NO ACTION ON UPDATE NO ACTION

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE IF NOT EXISTS `tab_anketa` (
  `login_acc` varchar(128) NOT NULL COMMENT 'Логин',
  `num_ver` int(7) unsigned NOT NULL COMMENT 'Номер версии анкеты',
  `rec_date` datetime NOT NULL COMMENT 'Дата и время записи версии',

  PRIMARY KEY (`login_acc`,`num_ver`),

  CONSTRAINT `fk_acc` FOREIGN KEY (`login_acc`) REFERENCES `tab_accounts` (`login_acc`) ON DELETE NO ACTION ON UPDATE NO ACTION

) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE IF NOT EXISTS `tab_accounts` (  
  `login_acc` varchar(128) NOT NULL COMMENT 'Логин',
  `password` varchar(128) NOT NULL COMMENT 'Пароль', 

  PRIMARY KEY (`login_acc`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Внешний ключ fk_ranketa не создается, fk_rashod - создается.

Если вводим новое поле num_rec в таблице tab_anketa ...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE IF NOT EXISTS `tab_anketa_rashod` (
  `num_rec` int(12) unsigned NOT NULL,
  `kod_rashod` tinyint(2) unsigned NOT NULL COMMENT 'Код расхода',
  `sum_rashod` decimal(12,2) unsigned NOT NULL COMMENT 'Размер расхода',  

  PRIMARY KEY (`num_rec`, `kod_rashod`),

  CONSTRAINT `fk_ranketa` FOREIGN KEY (`num_rec`) REFERENCES `tab_anketa` (`num_rec`) ON DELETE NO ACTION ON UPDATE NO ACTION
, 
  CONSTRAINT `fk_rashod` FOREIGN KEY (`kod_rashod`) REFERENCES `tab_vid_rashod` (`kod_rashod`) ON DELETE NO ACTION ON UPDATE NO ACTION

) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE IF NOT EXISTS `tab_anketa` (
  `num_rec` int(12) unsigned NOT NULL,
  `login_acc` varchar(128) NOT NULL COMMENT 'Логин',
  `num_ver` int(7) unsigned NOT NULL COMMENT 'Номер версии анкеты',
  `rec_date` datetime NOT NULL COMMENT 'Дата и время записи версии',

  PRIMARY KEY (`login_acc`,`num_ver`),

  CONSTRAINT `fk_acc` FOREIGN KEY (`login_acc`) REFERENCES `tab_accounts` (`login_acc`) ON DELETE NO ACTION ON UPDATE NO ACTION

) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE IF NOT EXISTS `tab_accounts` (  
  `login_acc` varchar(128) NOT NULL COMMENT 'Логин',
  `password` varchar(128) NOT NULL COMMENT 'Пароль', 

  PRIMARY KEY (`login_acc`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Все внешние ключи fk_ranketa и fk_rashod создаются.

В чем подвох?
...
Рейтинг: 0 / 0
Прошу знатоков помочь разобраться.
    #39023746
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
elstal,
подвох в отсутствии таблицы `tab_vid_rashod`. Если закомментировать FK `fk_rashod`, то таблица создается.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE IF NOT EXISTS `tab_anketa_rashod` (
  `login_acc` varchar(128) NOT NULL COMMENT 'Логин',
  `num_ver` int(7) unsigned NOT NULL COMMENT 'Номер версии анкеты',
  `kod_rashod` tinyint(2) unsigned NOT NULL COMMENT 'Код расхода',
  `sum_rashod` decimal(12,2) unsigned NOT NULL COMMENT 'Размер расхода',  

  PRIMARY KEY (`login_acc`,`num_ver`, `kod_rashod`),

  CONSTRAINT `fk_ranketa` FOREIGN KEY (`login_acc`,`num_ver`) REFERENCES `tab_anketa` (`login_acc`,`num_ver`) ON DELETE NO ACTION ON UPDATE NO ACTION /* , 
  
  CONSTRAINT `fk_rashod` FOREIGN KEY (`kod_rashod`) REFERENCES `tab_vid_rashod` (`kod_rashod`) ON DELETE NO ACTION ON UPDATE NO ACTION */

) ENGINE=InnoDB DEFAULT CHARSET=utf8;
...
Рейтинг: 0 / 0
Прошу знатоков помочь разобраться.
    #39024062
elstal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотища,

Таблицы создаются в обоих вариантах, не создается внешний ключ fk_ranketa. Таблица tab_vid_rashoda существует, я не стал приводить лишний код, тем более, что внешний ключ fk_rashod создается.

Приведенные варианты отличаются только тем что во втором варианте в таблице tab_anketa_rashod вместо составного ключа login_acc+num_ver используется num_rec и внешний ключ fk_ranketa создается.

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


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