{"id":20079509,"url":"https://github.com/nezorinegor/bookstore-db","last_synced_at":"2025-08-02T22:05:20.743Z","repository":{"id":163512913,"uuid":"638994995","full_name":"neZorinEgor/Bookstore-DB","owner":"neZorinEgor","description":"📖 База данных для книжного магазина","archived":false,"fork":false,"pushed_at":"2024-04-06T11:59:06.000Z","size":596,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T13:17:04.224Z","etag":null,"topics":["database","design-patterns","sql"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neZorinEgor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-10T14:34:24.000Z","updated_at":"2024-09-04T09:55:49.000Z","dependencies_parsed_at":"2024-11-13T15:35:16.454Z","dependency_job_id":null,"html_url":"https://github.com/neZorinEgor/Bookstore-DB","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/neZorinEgor/Bookstore-DB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neZorinEgor%2FBookstore-DB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neZorinEgor%2FBookstore-DB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neZorinEgor%2FBookstore-DB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neZorinEgor%2FBookstore-DB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neZorinEgor","download_url":"https://codeload.github.com/neZorinEgor/Bookstore-DB/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neZorinEgor%2FBookstore-DB/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268464791,"owners_count":24254196,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","design-patterns","sql"],"created_at":"2024-11-13T15:23:08.469Z","updated_at":"2025-08-02T22:05:20.687Z","avatar_url":"https://github.com/neZorinEgor.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Проектирование базы данных для книжного магазина\r\n\r\n![MySQL](https://img.shields.io/badge/MySQL-%2307405e.svg?style=for-the-badge\u0026logo=MySQL\u0026logoColor=E6882E)\r\n\r\n## Описание\r\n\r\nДля системы автоматизации деятельности книжного магазина необходимо спроектировать базу данных, которая будет содержать информацию о книгах, авторах, заказах, клиентах, сотрудниках и других сущностях, необходимых для управления бизнесом.\r\n\r\n\r\n\r\nБаза данных будет состоять из следующих таблиц:\r\n\r\n## Таблица \"Books\"\r\n\r\nСодержит информацию о книгах, которые доступны для продажи. Она содержит уникальный идентификатор книги (BookID), название книги (Title), идентификатор автора (AuthorID), издательство (Publisher), год публикации (PublicationYear), цену (Price) и количество экземпляров на складе (StockQuantity).\r\n\r\n| Поле      | Тип данных | Описание                               |\r\n|-----------|------------|----------------------------------------|\r\n|BookID\t|int\t|Идентификатор книги|\r\n|Title\t|varchar\t|Название книги|\r\n|AuthorID\t|int\t|Идентификатор автора книги|\r\n|Publisher\t|varchar\t|Название издательства|\r\n|PublicationYear\t|int\t|Год издания книги|\r\n|Price\t|decimal\t|Цена книги|\r\n|StockQuantity\t|int\t|Количество книг в наличии на складе магазина|\r\n\r\n## Таблица \"Authors\"\r\n\r\nCодержит информацию об авторах книг. Она содержит уникальный идентификатор автора (AuthorID), имя (FirstName), фамилию (LastName) и отчество (MiddleName).\r\n\r\n| Поле      | Тип данных | Описание                               |\r\n|-----------|------------|----------------------------------------|\r\n|AuthorID\t|int\t|Идентификатор автора\r\n|FirstName\t|varchar\t|Имя автора\r\n|LastName\t|varchar\t|Фамилия автора\r\n|MiddleName\t|varchar\t|Отчество автора\r\n\r\n## Таблица \"Employees\"\r\n\r\nCодержит информацию о сотрудниках магазина книг. Она содержит уникальный идентификатор сотрудника (EmployeeID), имя (FirstName), фамилию (LastName), отчество (MiddleName), должность (Position), зарплату (Salary), адрес (Address) и номер телефона (PhoneNumber).\r\n\r\n| Поле      | Тип данных | Описание                               |\r\n|-----------|------------|----------------------------------------|\r\n|EmployeeID\t|int\t|Идентификатор сотрудника\r\n|FirstName\t|varchar\t|Имя сотрудника\r\n|LastName\t|varchar\t|Фамилия сотрудника\r\n|MiddleName\t|varchar\t|Отчество сотрудника\r\n|Position\t|varchar\t|Должность сотрудника\r\n|Salary\t|decimal\t|Зарплата сотрудника\r\n|Address\t|varchar\t|Адрес проживания сотрудника\r\n|PhoneNumber\t|varchar\t|Номер телефона сотрудника\r\n\r\n## Таблица \"Orders\"\r\n\r\nCодержит информацию о заказах на книги. Она содержит уникальный идентификатор заказа (OrderID), дату заказа (Date), идентификатор клиента (CustomerID) и идентификатор сотрудника (EmployeeID), который обрабатывает заказ.\r\n\r\n| Поле      | Тип данных | Описание                               |\r\n|-----------|------------|----------------------------------------|\r\n|OrderID\t|int\t|Идентификатор заказа\r\n|Date\t|date\t|Дата заказа\r\n|CustomerID\t|int\t|Идентификатор заказчика\r\n|EmployeeID\t|int\t|Идентификатор сотрудника, оформившего заказ\r\n\r\n## Таблица \"Customers\"\r\n\r\nCодержит информацию о клиентах, которые делают заказы на книги. Она содержит уникальный идентификатор клиента (CustomerID), имя (FirstName), фамилию (LastName), отчество (MiddleName), адрес (Address) и номер телефона (PhoneNumber).\r\n\r\n| Поле      | Тип данных | Описание                               |\r\n|-----------|------------|----------------------------------------|\r\n|CustomerID\t|int\t|Идентификатор заказчика\r\n|FirstName\t|varchar\t|Имя заказчика\r\n|LastName\t|varchar\t|Фамилия заказчика\r\n|MiddleName\t|varchar\t|Отчество заказчика\r\n|Address\t|varchar\t|Адрес заказчика\r\n|PhoneNumber\t|varchar\t|Номер телефона заказчика\r\n\r\n## Таблица \"OrderDetails\"\r\n\r\nCодержит информацию о деталях заказа на книги. Она содержит идентификатор заказа (OrderID), идентификатор книги (BookID), количество экземпляров (Quantity) и цену (Price) каждого экземпляра.\r\n\r\n| Поле      | Тип данных | Описание                               |\r\n|-----------|------------|----------------------------------------|\r\n|OrderID\t|int\t|Идентификатор заказа\r\n|BookID\t|int\t|Идентификатор книги\r\n|Quantity\t|int\t|Количество заказанных\r\n|Price   |decimal   |Цена\r\n\r\n\r\n\r\n\r\n## Взаимосвязи:\r\n\r\n![image](https://github.com/NeZorinEgor/Bookstore-DB/assets/92092053/ebb78708-5952-4b83-9bd7-8ac9fee2718d)\r\n\r\n\r\n* Каждая книга имеет своего автора.\r\n* Каждый заказ связан с клиентом и сотрудником, который обработал заказ.\r\n* Каждый клиент может иметь несколько заказов.\r\n* Каждый сотрудник может обрабатывать несколько заказов.\r\n* Детали заказа связаны с заказом и книгой.\r\n\r\n## Представления:\r\n\r\n1. Список книг (BooksList):\r\n\r\nПредставление позволяет получить информацию о книгах в магазине, включая название, автора, издательство, год издания, цену и количество экземпляров на складе.\r\n\r\n```sql\r\nCREATE VIEW BooksList AS\r\nSELECT b.Title, CONCAT(a.FirstName, ' ', a.LastName, ' ', a.MiddleName) AS AuthorFullName, b.Publisher, b.PublicationYear, b.Price, b.StockQuantity\r\nFROM Books b\r\nJOIN Authors a ON b.AuthorID = a.AuthorID;\r\n```\r\n\r\n2. Список заказов (OrdersList):\r\n\r\nПредставление позволяет получить информацию о всех заказах, сделанных в магазине, включая дату, имена и отчества клиентов и сотрудников, которые осуществляли заказ, а также сумму заказа.\r\n\r\n```sql\r\nCREATE VIEW OrdersList AS\r\nSELECT o.OrderID, o.Date, CONCAT(c.FirstName, ' ', c.LastName, ' ', c.MiddleName) AS CustomerFullName, CONCAT(e.FirstName, ' ', e.LastName, ' ', e.MiddleName) AS EmployeeFullName, SUM(od.Quantity * od.Price) AS TotalAmount\r\nFROM Orders o\r\nJOIN Customers c ON o.CustomerID = c.CustomerID\r\nJOIN Employees e ON o.EmployeeID = e.EmployeeID\r\nJOIN OrderDetails od ON o.OrderID = od.OrderID\r\nGROUP BY o.OrderID;\r\n```\r\n\r\n3. Детальный список заказа (OrderDetailsList):\r\n\r\nПредставление позволяет получить информацию о каждом конкретном заказе, включая название книги, количество заказанных книг, цену за каждую книгу и общую стоимость заказа.\r\n\r\n```sql\r\nCREATE VIEW OrderDetailsList AS\r\nSELECT od.OrderID, b.Title, od.Quantity, od.Price, od.Quantity * od.Price AS Amount\r\nFROM OrderDetails od\r\nJOIN Books b ON od.BookID = b.BookID;\r\n```\r\n\r\n\r\n## Код SQL для создания таблиц:\r\n\r\n```sql\r\nCREATE TABLE Books (\r\nBookID int NOT NULL PRIMARY KEY,\r\nTitle varchar(255) NOT NULL,\r\nAuthorID int NOT NULL,\r\nPublisher varchar(255) NOT NULL,\r\nPublicationYear int NOT NULL,\r\nPrice decimal(10,2) NOT NULL,\r\nStockQuantity int NOT NULL\r\n);\r\n\r\nCREATE TABLE Authors (\r\nAuthorID int NOT NULL PRIMARY KEY,\r\nFirstName varchar(50) NOT NULL,\r\nLastName varchar(50) NOT NULL,\r\nMiddleName varchar(50) NOT NULL\r\n);\r\n\r\nCREATE TABLE Employees (\r\nEmployeeID int NOT NULL PRIMARY KEY,\r\nFirstName varchar(50) NOT NULL,\r\nLastName varchar(50) NOT NULL,\r\nMiddleName varchar(50) NOT NULL,\r\nPosition varchar(255) NOT NULL,\r\nSalary decimal(10,2) NOT NULL,\r\nAddress varchar(255) NOT NULL,\r\nPhoneNumber varchar(20) NOT NULL\r\n);\r\n\r\nCREATE TABLE Orders (\r\nOrderID int NOT NULL PRIMARY KEY,\r\nDate date NOT NULL,\r\nCustomerID int NOT NULL,\r\nEmployeeID int NOT NULL\r\n);\r\n\r\nCREATE TABLE Customers (\r\nCustomerID int NOT NULL PRIMARY KEY,\r\nFirstName varchar(50) NOT NULL,\r\nLastName varchar(50) NOT NULL,\r\nMiddleName varchar(50) NOT NULL,\r\nAddress varchar(255) NOT NULL,\r\nPhoneNumber varchar(20) NOT NULL\r\n);\r\n\r\nCREATE TABLE OrderDetails (\r\nOrderID int NOT NULL,\r\nBookID int NOT NULL,\r\nQuantity int NOT NULL,\r\nPrice decimal(10,2) NOT NULL\r\n);\r\n```\r\n\r\n## Код SQL для создания связей между таблицами:\r\n\r\n```sql\r\nALTER TABLE Books ADD FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID);\r\nALTER TABLE Orders ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);\r\nALTER TABLE Orders ADD FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID);\r\nALTER TABLE OrderDetails ADD FOREIGN KEY (OrderID) REFERENCES Orders(OrderID);\r\nALTER TABLE OrderDetails ADD FOREIGN KEY (BookID) REFERENCES Books(BookID);\r\n```\r\n\r\n\r\n# Примеры запросов SQL для типовых операций:\r\n\r\n###  Создание записи в таблице Books\r\n\r\n```sql\r\nINSERT INTO Books (BookID, Title, AuthorID, Publisher, PublicationYear, Price, StockQuantity)\r\nVALUES (1, 'The Great Gatsby', 1, 'Scribner', 1925, 10.99, 100);\r\n```\r\nЭтот запрос создает запись с информацией о книге 'The Great Gatsby', автором которой является автор с идентификатором 1, издательством Scribner, годом публикации 1925, ценой 10.99 и количеством на складе 100. \r\n\r\n### Изменение записи в таблице Books\r\n\r\n```sql\r\nUPDATE Books\r\nSET Publisher = 'Penguin',\r\n    PublicationYear = 2021,\r\n    Price = 12.99,\r\n    StockQuantity = 50\r\nWHERE BookID = 1;\r\n```\r\n\r\nЭтот запрос изменяет издательство, год публикации, цену и количество на складе для книги с идентификатором 1.\r\n\r\n### Удаление записи из таблицы Books\r\n\r\n```sql\r\nDELETE FROM Books\r\nWHERE BookID = 1;\r\n```\r\n\r\nЭтот запрос удаляет запись для книги с идентификатором 1.\r\n\r\n### Создание записи в таблице Authors\r\n\r\n```sql\r\nINSERT INTO Authors (AuthorID, FirstName, LastName, MiddleName)\r\nVALUES (1, 'F. Scott', 'Fitzgerald', 'Francis');\r\n```\r\n\r\nЭтот запрос создает запись с информацией об авторе 'F. Scott Fitzgerald', у которого идентификатор 1, имя Scott, фамилия Fitzgerald и отчество Francis.\r\n\r\n### Изменение записи в таблице Authors\r\n\r\n```sql\r\nUPDATE Authors\r\nSET FirstName = 'Francis Scott'\r\nWHERE AuthorID = 1;\r\n```\r\n\r\nЭтот запрос изменяет имя автора с идентификатором 1 на Francis Scott.\r\n\r\n\r\n\r\n### Удаление записи из таблицы Authors\r\n\r\n```sql\r\nDELETE FROM Authors\r\nWHERE AuthorID = 1;\r\n```\r\n\r\nЭтот запрос удаляет запись для автора с идентификатором 1.\r\n\r\n### Создание записи в таблице Employees\r\n\r\n```sql\r\nINSERT INTO Employees (EmployeeID, FirstName, LastName, MiddleName, Position, Salary, Address, PhoneNumber)\r\nVALUES (1, 'John', 'Doe', 'Smith', 'Sales Manager', 50000.00, '123 Main St', '555-1234');\r\n```\r\n\r\n### Изменение записи в таблице Employees\r\n\r\n```sql\r\nUPDATE Employees\r\nSET Position = 'Senior Sales Manager',\r\n    Salary = 60000.00,\r\n    Address = '456 Main St',\r\n    PhoneNumber = '555-5678'\r\nWHERE EmployeeID = 1;\r\n```\r\n\r\nЭтот запрос изменяет должность, зарплату, адрес и номер телефона для сотрудника с идентификатором 1.\r\n\r\n### Удаление записи из таблицы Employees\r\n\r\n```sql\r\nDELETE FROM Employees\r\nWHERE EmployeeID = 1;\r\n```\r\n\r\nЭтот запрос удаляет запись для сотрудника с идентификатором 1.\r\n\r\n\r\n### Создание записи в таблице Orders\r\n\r\n```sql\r\nINSERT INTO Orders (OrderID, Date, CustomerID, EmployeeID)\r\nVALUES (1, '2023-05-10', 1, 1);\r\n```\r\n\r\n### Изменение записи в таблице Orders\r\n\r\n```sql\r\nUPDATE Orders\r\nSET Date = '2023-05-11',\r\n    CustomerID = 2,\r\n    EmployeeID = 2\r\nWHERE OrderID = 1;\r\n```\r\n\r\n### Удаление записи из таблицы Orders\r\n\r\n```sql\r\nDELETE FROM Orders\r\nWHERE OrderID = 1;\r\n```\r\n\r\nЭтот запрос удаляет запись для заказа с идентификатором 1.\r\n\r\nЭтот запрос создает запись с информацией о заказе с идентификатором 1, датой 2023-05-10, идентификатором заказчика 1 и идентификатором сотрудника 1.\r\n\r\n### Создание записи в таблице Customers\r\n\r\n```sql\r\nINSERT INTO Customers (CustomerID, FirstName, LastName, MiddleName, Address, PhoneNumber)\r\nVALUES (1, 'Jane', 'Doe', 'Smith', '456 Elm St', '555-4321');\r\n```\r\n\r\n### Изменение записи в таблице Customers\r\n\r\n```sql\r\nUPDATE Customers\r\nSET Address = '789 Oak St',\r\n    PhoneNumber = '555-8765'\r\nWHERE CustomerID = 1;\r\n```\r\n\r\n### Удаление записи из таблицы Customers\r\n\r\n```sql\r\nDELETE FROM Customers\r\nWHERE CustomerID = 1;\r\n```\r\n\r\n### Создание записи в таблице OrderDetails\r\n\r\n```sql\r\nINSERT INTO OrderDetails (OrderID, BookID, Quantity, Price)\r\nVALUES (1, 1, 2, 14.99);\r\n```\r\n\r\n### Удаление записи из таблицы OrderDetails\r\n\r\n```sql\r\nDELETE FROM OrderDetails\r\nWHERE OrderID = 1 AND BookID = 2;\r\n``` \r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnezorinegor%2Fbookstore-db","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnezorinegor%2Fbookstore-db","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnezorinegor%2Fbookstore-db/lists"}