Проектирование базы данных книжного интернет-магазина

проектирование базы данных книжного интернет-магазина (для MySQL) С чего приступить к проектированию базы данных книжного интернет-магазина? Начать знакомство с сервером баз данных (смотрим MySQL). Познакомится с предметной областью (взяли в качестве пример - торговлю книгами через интернет-магазин). Почитать литературу посвященную проектированию БД.

Для начала выделяются сущности предметной области будущей БД:
isbn, автор, адрес, время заказа, год, день, жанр, заказ, издания, издатель, издательство, каталог, книги, количество, название, номер книги, покупатель, рождения, склад, статус заказа, телефон, фио, цена, электронка
Из них, надо выделить какие сущности станут таблицами, а какие столбцами. Жирным выделены кандидаты в таблицы:
isbn, автор, адрес, время заказа, год, день, жанр, заказ, издания, издатель, издательство, каталог, книги, количество, название, номер книги, покупатель, рождения, склад, статус заказа, телефон, фио, цена, электронка

Воспользовавшись прекрасным продуктом от Oracle - MySQL Workbench, можно (предварительно изучив типы данных) нарисовать модель базы данных в разделе Data Modeling.

Моделирование базы данных в MySQL Workbench

Создание новых столбцов базы данных и назначение им типов и дополнительных настроек (принадлежность первичному ключу, автоинкремент, обязательность введения данных - Not Null и др.) производится в нижней панели MW (появляется при двойном нажатии на таблицу в области модели)

Выбор типов данных для столбцов базы

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

После проектирования схемы базы данных, можно выполнить прямое проектирование (Forvard engineer...)
Отображние модели базы данных в базу
Скачать SQL-скрипт соответствующий схеме БД.

  1. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  2. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  3. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
  4.  
  5. CREATE SCHEMA IF NOT EXISTS `bookshop` DEFAULT CHARACTER SET utf8 ;
  6. USE `bookshop` ;
  7.  
  8. -- -----------------------------------------------------
  9. -- Table `bookshop`.`catalog`
  10. -- -----------------------------------------------------
  11. CREATE TABLE IF NOT EXISTS `bookshop`.`catalog` (
  12. `idcatalog` INT(11) NOT NULL AUTO_INCREMENT ,
  13. `title` VARCHAR(100) NOT NULL ,
  14. `pubyear` YEAR NOT NULL ,
  15. `genre` ENUM('фантастика','классика','детектив','проза') NULL DEFAULT NULL ,
  16. `author` VARCHAR(50) NOT NULL ,
  17. `isbn` CHAR(13) NOT NULL ,
  18. `catalogcol` VARCHAR(45) NULL ,
  19. PRIMARY KEY (`idcatalog`) )
  20. ENGINE = InnoDB
  21. DEFAULT CHARACTER SET = utf8;
  22.  
  23.  
  24. -- -----------------------------------------------------
  25. -- Table `bookshop`.`consumer`
  26. -- -----------------------------------------------------
  27. CREATE TABLE IF NOT EXISTS `bookshop`.`consumer` (
  28. `idconsumer` INT(11) NOT NULL ,
  29. `fio` VARCHAR(70) NOT NULL ,
  30. `db` DATE NULL DEFAULT NULL ,
  31. `email` VARCHAR(45) NULL DEFAULT NULL ,
  32. `phone` CHAR(10) NOT NULL ,
  33. `address` VARCHAR(100) NOT NULL ,
  34. PRIMARY KEY (`idconsumer`) ,
  35. UNIQUE INDEX `idconsumer_UNIQUE` (`idconsumer` ASC) )
  36. ENGINE = InnoDB
  37. DEFAULT CHARACTER SET = utf8;
  38.  
  39.  
  40. -- -----------------------------------------------------
  41. -- Table `bookshop`.`order`
  42. -- -----------------------------------------------------
  43. CREATE TABLE IF NOT EXISTS `bookshop`.`order` (
  44. `idorder` INT(11) NOT NULL ,
  45. `time` DATETIME NOT NULL ,
  46. `status` ENUM('выполнен','проверяется','отклонен','доставка') NOT NULL ,
  47. `catalog_idcatalog` INT(11) NOT NULL ,
  48. `price` FLOAT NULL DEFAULT NULL ,
  49. `consumer_idconsumer` INT(11) NOT NULL ,
  50. PRIMARY KEY (`idorder`) ,
  51. INDEX `fk_order_catalog1_idx` (`catalog_idcatalog` ASC) ,
  52. INDEX `fk_order_consumer1_idx` (`consumer_idconsumer` ASC) ,
  53. CONSTRAINT `fk_order_catalog1`
  54. FOREIGN KEY (`catalog_idcatalog` )
  55. REFERENCES `bookshop`.`catalog` (`idcatalog` )
  56. ON DELETE NO ACTION
  57. ON UPDATE NO ACTION,
  58. CONSTRAINT `fk_order_consumer1`
  59. FOREIGN KEY (`consumer_idconsumer` )
  60. REFERENCES `bookshop`.`consumer` (`idconsumer` )
  61. ON DELETE NO ACTION
  62. ON UPDATE NO ACTION)
  63. ENGINE = InnoDB
  64. DEFAULT CHARACTER SET = utf8;
  65.  
  66.  
  67. -- -----------------------------------------------------
  68. -- Table `bookshop`.`store`
  69. -- -----------------------------------------------------
  70. CREATE TABLE IF NOT EXISTS `bookshop`.`store` (
  71. `idstore` INT(11) NOT NULL ,
  72. `quantity` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' ,
  73. `price` FLOAT NOT NULL ,
  74. `catalog_idcatalog` INT(11) NOT NULL ,
  75. PRIMARY KEY (`idstore`) ,
  76. INDEX `fk_store_catalog_idx` (`catalog_idcatalog` ASC) ,
  77. CONSTRAINT `fk_store_catalog`
  78. FOREIGN KEY (`catalog_idcatalog` )
  79. REFERENCES `bookshop`.`catalog` (`idcatalog` )
  80. ON DELETE NO ACTION
  81. ON UPDATE NO ACTION)
  82. ENGINE = InnoDB
  83. DEFAULT CHARACTER SET = utf8;
  84.  
  85. USE `bookshop` ;
  86.  
  87.  
  88. SET SQL_MODE=@OLD_SQL_MODE;
  89. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  90. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;