From b628b153fd754d9e274764d453a28d408b0b102d Mon Sep 17 00:00:00 2001 From: esoe Date: Thu, 4 Apr 2024 21:05:32 +0300 Subject: [PATCH] erd-starts --- docker-compose.yaml | 9 + .../src/main/docs/erd/erd-sample.puml | 160 ++++++++++++++++++ .../src/main/docs/erd/erd.puml | 23 +++ .../main/resources/static/content/md/hello.md | 8 +- 4 files changed, 198 insertions(+), 2 deletions(-) create mode 100644 resource-service-api/src/main/docs/erd/erd-sample.puml create mode 100644 resource-service-api/src/main/docs/erd/erd.puml diff --git a/docker-compose.yaml b/docker-compose.yaml index b2a5574..768c213 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -5,6 +5,15 @@ services: command: ["java","-jar","/app/resource-service-api-0.1.jar"] ports: - 80:8181 + +# перед сборкой контенера необходимо пересобрать каждый сервис: +# mvn clean package + +# Сборка образа: # docker-compose build + +# Запуск контейнеров платформы: # docker-compose up -d + +# Остановка всех контейнеров платформы: # docker-compose down \ No newline at end of file diff --git a/resource-service-api/src/main/docs/erd/erd-sample.puml b/resource-service-api/src/main/docs/erd/erd-sample.puml new file mode 100644 index 0000000..6001f36 --- /dev/null +++ b/resource-service-api/src/main/docs/erd/erd-sample.puml @@ -0,0 +1,160 @@ +@startuml ERD +!define primary_key(x) <&key> x +!define foreign_key(x) <&key> x +!define column(x) <&media-record> x +!define table(x) entity x << (T, white) >> + +title "Entity Relationship Diagram (ERD): LIBRARY (Библиотека)" +' left to right direction +entity "Библиотечный фонд" as repository +entity "Вид переплета" as bindings +entity "Авторы" as authors +entity "Штрихкоды" as barcodes +entity "Библиография" as bibliography +entity "Жанры" as genres +entity "Издательства" as publishers +entity "Карточка читателя" as accounts +entity "Паспорт" as pasports +entity "Свидетельство о рождении" as certificates +entity "Выдача книг" as allocation +entity "Бронирование" as booking + +' Сведения о приобретенных библиотекой книгах +' одна строчка - одно издание +' - которая может быть приобретена в нескольких экземплярах +table(repository) { + primary_key(id): SERIAL >>"Идентификатор" + column(title): VARCHAR[300] >>"Наименование" + column(instances): INTEGER >>"Количество экземпляров" + column(isbn): INTEGER >>"isbn" + column(year): DATE >>"Год издания" + foreign_key(bindings_id): INTEGER >>"Вид переплета" + foreign_key(publishers_id): INTEGER >>"Издательство" + foreign_key(genres_id): INTEGER >>"Жанр" +} + +' Типы переплетов +' Для автоподстановки при заполнении поля переплеты +' -также возможно типы переплетов поменяются в будущем (жесткий, мягкий, глянцевый, матовый, электронная книга) +table(bindings){ + primary_key(id): SERIAL >>"Идентификатор" + column(type): VARCHAR[10] >>"Тип переплета" +} + +' сведения об авторах +table(authors){ + primary_key(id): SERIAL >>"Идентификатор" + column(fio): VARCHAR[50] >>"ФИО" + column(country): VARCHAR[30] >>"Страна рождения" +} + +' Таблица экземпляров книг +' Одна строка - один физический экземпляр +table(barcodes){ + primary_key(id): SERIAL >>"Идентификатор" + column(value): INTEGER >>"Штрихкод" + foreign_key(repository_id) >>"Публикация" +} + +' сведения о соавторах +' таблица для определения: +' - перечня авторов книги +' - перечня книг в написании которых участвовал автор +table(bibliography){ + foreign_key(repository_id): INTEGER >>"Идентификатор издания" + foreign_key(authors_id): INTEGER >>"Идентификатор автора" +} + +' Жанры +table(genres){ + primary_key(id): SERIAL >>"Идентификатор" + column(value): VARCHAR[30] >>"Жанр" +} + +table(publishers) { + primary_key( id ): SERIAL >>"Идентификатор" + column(name): VARCHAR[50] >>"Наименование" + column(address): VARCHAR[300] >>"Адрес" + column(phone): INTEGER >>"Телефон" + column(contactname): VARCHAR[150] >>"Контакты-имя" +} + +' Карточки читателей +table(accounts) { + primary_key( id ): SERIAL >>"Идентификатор" + column(fname): VARCHAR[50] >>"Имя" + column(sname): VARCHAR[50] >>"Отчество" + column(lname): VARCHAR[50] >>"Фамилия" + column(address): VARCHAR[300] >>"Адрес" + column(phone): INTEGER >>"Телефон" + foreign_key(pasport_id): INTEGER >>"Паспорт" + foreign_key(sertificate_id): INTEGER >>"Свидетельство о рождении" + foreign_key(account_id) >>"Карточка родителя" +} + +' Паспорта +table(pasports){ + primary_key( id ): SERIAL >>"Идентификатор" + column(serial): INTEGER >>"Серия" + column(number): INTEGER >>"Номер" +} + +' Свидетельства о рождении +table(certificates){ + primary_key( id ): SERIAL >>"Идентификатор" + column(serial): VARCHAR[10] >>"Серия" + column(number): INTEGER >>"Номер" +} + +' Выдача книг +table(allocation) { + primary_key( id ): SERIAL >>"Идентификатор" + foreign_key(account_id): INTEGER >>"Карточка читателя" + column(book_out): DATE >>"Дата выдачи" + column(book_in): DATE >>"Планируемая дата возврата" + column(book_in_fact): DATE >>"Фактическая дата возврата" + column(penalty): MONEY >>"Штраф" + column(late):INTEGER >>"Период задержки возврата книги" + foreign_key(barcode_id): INTEGER >>"Идентификатор штрихкода" +} + +' Бронирование книг +' происходит по изданиям, чаще всего читателю не важно, какой переплет ему дадут +table(booking){ + primary_key(id) : SERIAL >>"Идентификатор" + foreign_key(accounts_id): INTEGER >>"Карточка читателя" + foreign_key(repository_id) : INTEGER >>"Издание" + column(date) : DATE >>"Дата бронирования" +} + +repository }|--|| publishers : "publisher_id" +repository }|--|| genres : "genre_id" +repository }|--|| bindings : "binding_id" + +barcodes }|--|| repository : "repository_id" + +bibliography }|--|| repository : "repository_id" +bibliography }|--|| authors : "author_id" + +accounts ||--|| certificates : "sertificate_id" +accounts ||--|| pasports : "pasport_id" +accounts ||--|{ accounts : "account_id" + +booking }|--|| repository : "repository_id" +booking }|--|| accounts : "account_id" + +allocation }|--|| barcodes : "barcode_id" +allocation }|--|| accounts : "account_id" + +' - в таблице бронирования забыто поле для читателя, который забронировал книгу; +' 1. Добавил в отношение "Бронирование" поле account_id +' 2. Добавил связь "Бронирование" --> "Карточка читателя" + +' - не понятно, как реализуется связь читателя младше 14 лет с одним из взрослых родственников; +' 3. Добавил в "Карточку читателя" поле account_id +' 4. Добавил связь "Карточка читателя" --> "Карточка читателя" + +' - в таблице "Выдача книг" потерялась колонка account_id, хотя ею подписана связь с таблицей "Карточка читателя". +' 5. Добавил поле account_id в отношение "Выдача книг" + +@enduml \ No newline at end of file diff --git a/resource-service-api/src/main/docs/erd/erd.puml b/resource-service-api/src/main/docs/erd/erd.puml new file mode 100644 index 0000000..6b6d88b --- /dev/null +++ b/resource-service-api/src/main/docs/erd/erd.puml @@ -0,0 +1,23 @@ +@startuml ERD +!define primary_key(x) <&key> x +!define foreign_key(x) <&key> x +!define column(x) <&media-record> x +!define table(x) entity x << (T, white) >> + +title "Entity Relationship Diagram (ERD): education-records (учет обучений)" +' left to right direction + +entity "Реестр обученных" as repository +entity "Заявка на обучение" as task +entity "Списочный состав" as list + +' Списочный состав обученных +table(list){} + +' Заявка на обучение +table(task){} + +' Реестр обученных +table(repository){} + +@enduml \ No newline at end of file diff --git a/resource-service-api/src/main/resources/static/content/md/hello.md b/resource-service-api/src/main/resources/static/content/md/hello.md index 9213b5a..853a52b 100644 --- a/resource-service-api/src/main/resources/static/content/md/hello.md +++ b/resource-service-api/src/main/resources/static/content/md/hello.md @@ -1,5 +1,9 @@ -# HELLO.MD +# RESOURCE-SERVICE-API : HELLO.MD +# Структура базы данных сервиса : SCHEME +## TABLE N1: + +# Описание api ## /hello - Возвращает страницу описания сервиса + Возвращает текущую страницу описания сервиса ## /api/content Возвращает данные таблиц в *.xml формате \ No newline at end of file