Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Не понимаю связи / 6 сообщений из 6, страница 1 из 1
19.02.2015, 14:45
    #38884009
timedo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понимаю связи
Здравствуйте. Есть бд с 3 таблицами, это Avtor, Opros и Qwestions вот с такой связью:

http://i10.pixs.ru/storage/5/2/2/SnimokPNG_3045196_16116522.png

В таблице Opros у меня есть 3 опроса:

http://i10.pixs.ru/storage/5/3/5/pollPNG_3405755_16116535.png

В таблице Qwestions есть к каждому опросу по одному вопросу:

http://i10.pixs.ru/storage/5/5/9/quPNG_5871640_16116559.png

К примеру я хочу удалить один из опросов, для этого удаляю сначала все вопросы с опроса под id 6 :

http://i10.pixs.ru/storage/5/7/2/quDellPNG_3471186_16116572.png

И удаляю в таблице опросов(Opros), опрос с id 6

http://i10.pixs.ru/storage/6/0/0/dellPollPN_2680922_16116600.png

Но происходит что то не предвиденное и удаляются все вопросы с опросов, т.е. в таблице Qwestions после этого ничего не содержится. Почему так происходит, объясните пожалуйста

http://i10.pixs.ru/storage/6/5/0/questPNG_5637043_16116650.png
...
Рейтинг: 0 / 0
19.02.2015, 15:04
    #38884036
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понимаю связи
Если присутствуют только картинки (видимо, все делалось кликами мышой) и нет ни строчки текста, то почему вопрос в форуме Программирование? :)
...
Рейтинг: 0 / 0
19.02.2015, 15:08
    #38884048
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понимаю связи
Для картинок есть тэг img (в дополнительных)

У тебя лишняя связь (opros.teachid - qwestions.teachid) с каскадным удалением. Удали ее. Должно быть (avtor.teachid - qwestions.teachid)

timedoЗдравствуйте. Есть бд с 3 таблицами, это Avtor, Opros и Qwestions вот с такой связью:



В таблице Opros у меня есть 3 опроса:



В таблице Qwestions есть к каждому опросу по одному вопросу:



К примеру я хочу удалить один из опросов, для этого удаляю сначала все вопросы с опроса под id 6 :



И удаляю в таблице опросов(Opros), опрос с id 6



Но происходит что то не предвиденное и удаляются все вопросы с опросов, т.е. в таблице Qwestions после этого ничего не содержится. Почему так происходит, объясните пожалуйста

...
Рейтинг: 0 / 0
19.02.2015, 15:15
    #38884073
timedo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понимаю связи
Уппссс...сори, вот так будет более понятно:



Код: sql
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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
-- Структура таблицы `avtor`
--
 
CREATE TABLE IF NOT EXISTS `avtor` (
  `TeachId` int(11) NOT NULL AUTO_INCREMENT,
  `Login` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `Password` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `Lastname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`TeachId`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=36 ;
 
 
--
-- Структура таблицы `opros`
--
 
CREATE TABLE IF NOT EXISTS `opros` (
  `TestId` int(11) NOT NULL AUTO_INCREMENT,
  `TeachId` int(11) DEFAULT NULL,
  `TestName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `GroupName` int(11) NOT NULL,
  PRIMARY KEY (`TestId`),
  KEY `TeachId` (`TeachId`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
 
--
-- Структура таблицы `qwestions`
--
 
CREATE TABLE IF NOT EXISTS `qwestions` (
  `QwestionsId` int(11) NOT NULL AUTO_INCREMENT,
  `TeachId` int(11) DEFAULT NULL,
  `TestId` int(11) DEFAULT NULL,
  `Text` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`QwestionsId`),
  KEY `TestId` (`TestId`),
  KEY `TeachId` (`TeachId`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
 
-- --------------------------------------------------------
 
--
-- Ограничения внешнего ключа таблицы `opros`
--
ALTER TABLE `opros`
  ADD CONSTRAINT `opros_ibfk_1` FOREIGN KEY (`TeachId`) REFERENCES `avtor` (`TeachId`);
 
--
-- Ограничения внешнего ключа таблицы `qwestions`
--
ALTER TABLE `qwestions`
  ADD CONSTRAINT `qwestions_ibfk_1` FOREIGN KEY (`TestId`) REFERENCES `opros` (`TestId`),
  ADD CONSTRAINT `qwestions_ibfk_2` FOREIGN KEY (`TeachId`) REFERENCES `opros` (`TeachId`) ON DELETE CASCADE ON UPDATE CASCADE;
...
Рейтинг: 0 / 0
19.02.2015, 15:16
    #38884078
timedo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понимаю связи
Dima T, спасибо большое за ответ! А почему там не нужна эта связь?
...
Рейтинг: 0 / 0
19.02.2015, 15:39
    #38884113
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не понимаю связи
timedoDima T, спасибо большое за ответ! А почему там не нужна эта связь?
Потому что связь нужна для контроля целостности, поэтому она должна быть между таблицей с первичным ключом к таблице где этот ключ используется.

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


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