Соединить элемент таблицы с другим элементом той же таблицы - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! У меня возникла проблема с соединением элементов таблицы по внешнему ключу. зы: использую MySQL Workbench.
Листинг программы
  1. -- MySQL Workbench Forward Engineering
  2. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  3. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  4. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
  5. -- -----------------------------------------------------
  6. -- Schema shop
  7. -- -----------------------------------------------------
  8. -- -----------------------------------------------------
  9. -- Schema shop
  10. -- -----------------------------------------------------
  11. CREATE SCHEMA IF NOT EXISTS `shop` DEFAULT CHARACTER SET utf8 ;
  12. USE `shop` ;
  13. -- -----------------------------------------------------
  14. -- Table `shop`.`customer`
  15. -- -----------------------------------------------------
  16. CREATE TABLE IF NOT EXISTS `shop`.`customer` (
  17. `id` INT NOT NULL AUTO_INCREMENT,
  18. `first_name` VARCHAR(45) NULL,
  19. `last_name` VARCHAR(45) NULL,
  20. PRIMARY KEY (`id`),
  21. UNIQUE INDEX `id_UNIQUE` (`id` ASC))
  22. ENGINE = InnoDB;
  23.  
  24. -- -----------------------------------------------------
  25. -- Table `shop`.`the_order`
  26. -- -----------------------------------------------------
  27. CREATE TABLE IF NOT EXISTS `shop`.`the_order` (
  28. `id` INT NOT NULL AUTO_INCREMENT,
  29. `client_id` INT NOT NULL,
  30. `time` VARCHAR(5) NULL,
  31. `date` DATE NULL,
  32. PRIMARY KEY (`id`, `client_id`),
  33. INDEX `client_id_idx` (`client_id` ASC),
  34. UNIQUE INDEX `id_UNIQUE` (`id` ASC),
  35. CONSTRAINT `client_id`
  36. FOREIGN KEY (`client_id`)
  37. REFERENCES `shop`.`customer` (`id`)
  38. ON DELETE CASCADE
  39. ON UPDATE CASCADE)
  40. ENGINE = InnoDB;
  41.  
  42. -- -----------------------------------------------------
  43. -- Table `shop`.`category`
  44. -- -----------------------------------------------------
  45. CREATE TABLE IF NOT EXISTS `shop`.`category` (
  46. `id` INT NOT NULL,
  47. `name` VARCHAR(30) NOT NULL,
  48. `parent_cat` VARCHAR(30) NOT NULL,
  49. PRIMARY KEY (`id`, `parent_cat`),
  50. INDEX `subcat_to_cat_idx` (`parent_cat` ASC),
  51. CONSTRAINT `subcat_to_cat`
  52. FOREIGN KEY (`parent_cat`)
  53. REFERENCES `shop`.`category` (`name`)
  54. ON DELETE CASCADE
  55. ON UPDATE CASCADE)
  56. ENGINE = InnoDB;
  57.  
  58. -- -----------------------------------------------------
  59. -- Table `shop`.`product`
  60. -- -----------------------------------------------------
  61. CREATE TABLE IF NOT EXISTS `shop`.`product` (
  62. `id` INT NOT NULL AUTO_INCREMENT,
  63. `name` VARCHAR(45) NULL,
  64. `price` INT NULL,
  65. `weight` FLOAT NULL,
  66. `cat_id` INT NOT NULL,
  67. PRIMARY KEY (`id`, `cat_id`),
  68. INDEX `productCategory_idx` (`cat_id` ASC),
  69. UNIQUE INDEX `id_UNIQUE` (`id` ASC),
  70. CONSTRAINT `productCategory`
  71. FOREIGN KEY (`cat_id`)
  72. REFERENCES `shop`.`category` (`id`)
  73. ON DELETE CASCADE
  74. ON UPDATE CASCADE)
  75. ENGINE = InnoDB;
  76.  
  77. -- -----------------------------------------------------
  78. -- Table `shop`.`orderProduct`
  79. -- -----------------------------------------------------
  80. CREATE TABLE IF NOT EXISTS `shop`.`orderProduct` (
  81. `order_id` INT NOT NULL,
  82. `product_id` INT NOT NULL,
  83. PRIMARY KEY (`order_id`, `product_id`),
  84. INDEX `product_id_idx` (`product_id` ASC),
  85. CONSTRAINT `order_id`
  86. FOREIGN KEY (`order_id`)
  87. REFERENCES `shop`.`the_order` (`id`)
  88. ON DELETE CASCADE
  89. ON UPDATE CASCADE,
  90. CONSTRAINT `product_id`
  91. FOREIGN KEY (`product_id`)
  92. REFERENCES `shop`.`product` (`id`)
  93. ON DELETE CASCADE
  94. ON UPDATE CASCADE)
  95. ENGINE = InnoDB;
  96.  
  97. SET SQL_MODE=@OLD_SQL_MODE;
  98. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  99. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
  100. -- -----------------------------------------------------
  101. -- Data for table `shop`.`customer`
  102. -- -----------------------------------------------------
  103. START TRANSACTION;
  104. USE `shop`;
  105. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (1, 'Grisha', 'Sydorenko');
  106. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (2, 'Pasha', 'Grigorenko');
  107. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (3, 'Sasha', 'Mukolenko');
  108. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (4, 'Dasha', 'Denisenko');
  109. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (5, 'Masha', 'Maximenko');
  110. COMMIT;
  111.  
  112. -- -----------------------------------------------------
  113. -- Data for table `shop`.`the_order`
  114. -- -----------------------------------------------------
  115. START TRANSACTION;
  116. USE `shop`;
  117. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (1, 5, '', '28/08/2017');
  118. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (2, 1, '', '27/08/2017');
  119. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (3, 1, '', '26/08/2017');
  120. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (4, 4, '', '25/08/2017');
  121. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (5, 5, '', '24/08/2017');
  122. COMMIT;
  123.  
  124. -- -----------------------------------------------------
  125. -- Data for table `shop`.`category`
  126. -- -----------------------------------------------------
  127. START TRANSACTION;
  128. USE `shop`;
  129. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (1, 'Laptops', 'null');
  130. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (2, 'Phones', 'null');
  131. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (3, 'Household appliances', 'null');
  132. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (4, 'Goods for the home', 'null');
  133. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (5, 'Plumbing and repair', 'null');
  134. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (6, 'Asus', 'Laptops');
  135. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (7, 'Acer', 'Laptops');
  136. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (8, 'Nokia', 'Phones');
  137. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (9, 'Samsung', 'Phones');
  138. COMMIT;
  139.  
  140. -- -----------------------------------------------------
  141. -- Data for table `shop`.`product`
  142. -- -----------------------------------------------------
  143. START TRANSACTION;
  144. USE `shop`;
  145. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (1, 'product-1', 320, 5.5, 5);
  146. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (2, 'product-2', 450, 2.8, 4);
  147. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (3, 'product-3', 1200, 3.3, 3);
  148. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (4, 'product-4', 280, 10.2, 4);
  149. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (5, 'product-5', 785, 7.4, 1);
  150. COMMIT;
  151.  
  152. -- -----------------------------------------------------
  153. -- Data for table `shop`.`orderProduct`
  154. -- -----------------------------------------------------
  155. START TRANSACTION;
  156. USE `shop`;
  157. INSERT INTO `shop`.`orderProduct` (`order_id`, `product_id`) VALUES (1, 2);
  158. INSERT INTO `shop`.`orderProduct` (`order_id`, `product_id`) VALUES (2, 2);
  159. INSERT INTO `shop`.`orderProduct` (`order_id`, `product_id`) VALUES (3, 1);
  160. COMMIT;
Выдает ошибку: Executing SQL script in server ERROR: Error 1005: Can't create table `shop`.`category` (errno: 150 "Foreign key constraint is incorrectly formed") SQL Code:
Листинг программы
  1. -- -----------------------------------------------------
  2. -- Table `shop`.`category`
  3. -- -----------------------------------------------------
  4. CREATE TABLE IF NOT EXISTS `shop`.`category` (
  5. `id` INT NOT NULL,
  6. `name` VARCHAR(30) NOT NULL,
  7. `parent_cat` VARCHAR(30) NOT NULL,
  8. PRIMARY KEY (`id`, `parent_cat`),
  9. INDEX `subcat_to_cat_idx` (`parent_cat` ASC),
  10. CONSTRAINT `subcat_to_cat`
  11. FOREIGN KEY (`parent_cat`)
  12. REFERENCES `shop`.`category` (`name`)
  13. ON DELETE CASCADE
  14. ON UPDATE CASCADE)
  15. ENGINE = InnoDB
Так же пробовал связывать через id таблицы: Результат: Executing SQL script in server ERROR: Error 1048: Column 'parent_cat' cannot be null SQL Code:
Листинг программы
  1. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (1, 'Laptops', NULL)

Решение задачи: «Соединить элемент таблицы с другим элементом той же таблицы»

textual
Листинг программы
  1. -- MySQL Workbench Forward Engineering
  2.  
  3. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  4. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  5. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
  6.  
  7. -- -----------------------------------------------------
  8. -- Schema shop
  9. -- -----------------------------------------------------
  10.  
  11. -- -----------------------------------------------------
  12. -- Schema shop
  13. -- -----------------------------------------------------
  14. CREATE SCHEMA IF NOT EXISTS `shop` DEFAULT CHARACTER SET utf8 ;
  15. USE `shop` ;
  16.  
  17. -- -----------------------------------------------------
  18. -- Table `shop`.`customer`
  19. -- -----------------------------------------------------
  20. CREATE TABLE IF NOT EXISTS `shop`.`customer` (
  21.   `id` INT NOT NULL AUTO_INCREMENT,
  22.   `first_name` VARCHAR(45) NULL,
  23.   `last_name` VARCHAR(45) NULL,
  24.   PRIMARY KEY (`id`),
  25.   UNIQUE INDEX `id_UNIQUE` (`id` ASC))
  26. ENGINE = InnoDB;
  27.  
  28.  
  29. -- -----------------------------------------------------
  30. -- Table `shop`.`the_order`
  31. -- -----------------------------------------------------
  32. CREATE TABLE IF NOT EXISTS `shop`.`the_order` (
  33.   `id` INT NOT NULL AUTO_INCREMENT,
  34.   `client_id` INT NOT NULL,
  35.   `time` VARCHAR(5) NULL,
  36.   `date` DATE NULL,
  37.   PRIMARY KEY (`id`, `client_id`),
  38.   INDEX `client_id_idx` (`client_id` ASC),
  39.   UNIQUE INDEX `id_UNIQUE` (`id` ASC),
  40.   CONSTRAINT `client_id`
  41.     FOREIGN KEY (`client_id`)
  42.     REFERENCES `shop`.`customer` (`id`)
  43.     ON DELETE CASCADE
  44.     ON UPDATE CASCADE)
  45. ENGINE = InnoDB;
  46.  
  47.  
  48. -- -----------------------------------------------------
  49. -- Table `shop`.`category`
  50. -- -----------------------------------------------------
  51. CREATE TABLE IF NOT EXISTS `shop`.`category` (
  52.   `id` INT NOT NULL,
  53.   `name` VARCHAR(30) NOT NULL,
  54.   `parent_cat` INT NULL DEFAULT NULL,
  55.   PRIMARY KEY (`id`, `parent_cat`),
  56.   INDEX `subcat_to_cat_idx` (`parent_cat` ASC),
  57.   CONSTRAINT `subcat_to_cat`
  58.     FOREIGN KEY (`parent_cat`)
  59.     REFERENCES `shop`.`category` (`id`)
  60.     ON DELETE CASCADE
  61.     ON UPDATE CASCADE)
  62. ENGINE = InnoDB;
  63.  
  64.  
  65. -- -----------------------------------------------------
  66. -- Table `shop`.`product`
  67. -- -----------------------------------------------------
  68. CREATE TABLE IF NOT EXISTS `shop`.`product` (
  69.   `id` INT NOT NULL AUTO_INCREMENT,
  70.   `name` VARCHAR(45) NULL,
  71.   `price` INT NULL,
  72.   `weight` FLOAT NULL,
  73.   `cat_id` INT NOT NULL,
  74.   PRIMARY KEY (`id`, `cat_id`),
  75.   INDEX `productCategory_idx` (`cat_id` ASC),
  76.   UNIQUE INDEX `id_UNIQUE` (`id` ASC),
  77.   CONSTRAINT `productCategory`
  78.     FOREIGN KEY (`cat_id`)
  79.     REFERENCES `shop`.`category` (`id`)
  80.     ON DELETE CASCADE
  81.     ON UPDATE CASCADE)
  82. ENGINE = InnoDB;
  83.  
  84.  
  85. -- -----------------------------------------------------
  86. -- Table `shop`.`orderProduct`
  87. -- -----------------------------------------------------
  88. CREATE TABLE IF NOT EXISTS `shop`.`orderProduct` (
  89.   `order_id` INT NOT NULL,
  90.   `product_id` INT NOT NULL,
  91.   PRIMARY KEY (`order_id`, `product_id`),
  92.   INDEX `product_id_idx` (`product_id` ASC),
  93.   CONSTRAINT `order_id`
  94.     FOREIGN KEY (`order_id`)
  95.     REFERENCES `shop`.`the_order` (`id`)
  96.     ON DELETE CASCADE
  97.     ON UPDATE CASCADE,
  98.   CONSTRAINT `product_id`
  99.     FOREIGN KEY (`product_id`)
  100.     REFERENCES `shop`.`product` (`id`)
  101.     ON DELETE CASCADE
  102.     ON UPDATE CASCADE)
  103. ENGINE = InnoDB;
  104.  
  105.  
  106. SET SQL_MODE=@OLD_SQL_MODE;
  107. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  108. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
  109.  
  110. -- -----------------------------------------------------
  111. -- Data for table `shop`.`customer`
  112. -- -----------------------------------------------------
  113. START TRANSACTION;
  114. USE `shop`;
  115. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (1, 'Grisha', 'Sydorenko');
  116. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (2, 'Pasha', 'Grigorenko');
  117. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (3, 'Sasha', 'Mukolenko');
  118. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (4, 'Dasha', 'Denisenko');
  119. INSERT INTO `shop`.`customer` (`id`, `first_name`, `last_name`) VALUES (5, 'Masha', 'Maximenko');
  120.  
  121. COMMIT;
  122.  
  123.  
  124. -- -----------------------------------------------------
  125. -- Data for table `shop`.`the_order`
  126. -- -----------------------------------------------------
  127. START TRANSACTION;
  128. USE `shop`;
  129. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (1, 5, '', '28/08/2017');
  130. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (2, 1, '', '27/08/2017');
  131. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (3, 1, '', '26/08/2017');
  132. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (4, 4, '', '25/08/2017');
  133. INSERT INTO `shop`.`the_order` (`id`, `client_id`, `time`, `date`) VALUES (5, 5, '', '24/08/2017');
  134.  
  135. COMMIT;
  136.  
  137.  
  138. -- -----------------------------------------------------
  139. -- Data for table `shop`.`category`
  140. -- -----------------------------------------------------
  141. START TRANSACTION;
  142. USE `shop`;
  143. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (1, 'Laptops', NULL);
  144. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (2, 'Phones', NULL);
  145. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (3, 'Household appliances', NULL);
  146. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (4, 'Goods for the home', NULL);
  147. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (5, 'Plumbing and repair', NULL);
  148. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (6, 'Asus', Laptops);
  149. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (7, 'Acer', Laptops);
  150. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (8, 'Nokia', Phones);
  151. INSERT INTO `shop`.`category` (`id`, `name`, `parent_cat`) VALUES (9, 'Samsung', Phones);
  152.  
  153. COMMIT;
  154.  
  155.  
  156. -- -----------------------------------------------------
  157. -- Data for table `shop`.`product`
  158. -- -----------------------------------------------------
  159. START TRANSACTION;
  160. USE `shop`;
  161. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (1, 'product-1', 320, 5.5, 5);
  162. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (2, 'product-2', 450, 2.8, 4);
  163. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (3, 'product-3', 1200, 3.3, 3);
  164. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (4, 'product-4', 280, 10.2, 4);
  165. INSERT INTO `shop`.`product` (`id`, `name`, `price`, `weight`, `cat_id`) VALUES (5, 'product-5', 785, 7.4, 1);
  166.  
  167. COMMIT;
  168.  
  169.  
  170. -- -----------------------------------------------------
  171. -- Data for table `shop`.`orderProduct`
  172. -- -----------------------------------------------------
  173. START TRANSACTION;
  174. USE `shop`;
  175. INSERT INTO `shop`.`orderProduct` (`order_id`, `product_id`) VALUES (1, 2);
  176. INSERT INTO `shop`.`orderProduct` (`order_id`, `product_id`) VALUES (2, 2);
  177. INSERT INTO `shop`.`orderProduct` (`order_id`, `product_id`) VALUES (3, 1);
  178.  
  179. COMMIT;

Объяснение кода листинга программы

  1. Создание базы данных для онлайн-магазина.
  2. Создание таблицы customer для хранения информации о клиентах.
  3. Создание таблицы the_order для хранения информации о заказах.
  4. Создание таблицы category для хранения информации о категориях товаров.
  5. Создание таблицы product для хранения информации о товарах.
  6. Создание таблицы orderProduct для связи заказов и товаров.
  7. Заполнение таблицы customer данными о клиентах.
  8. Заполнение таблицы the_order данными о заказах.
  9. Заполнение таблицы category данными о категориях товаров.
  10. Заполнение таблицы product данными о товарах.
  11. Заполнение таблицы orderProduct данными о связи заказов и товаров.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы