-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
#8 - Описание реляционная модели данных для аналога neo4j #8
Comments
Реляционная СУБДОписание назначений коллекций, типов данных и сущностейPatient – коллекция, которая хранит в себе данные о всех зарегистрированных на сайте пользователях:
Необязательные поля указываются для сбора статистики для симптомов. Appeal – обращение пользователя, которое нужно для сохранения истории поиска болезней пользователя:
Diaseas – список всех существующих в базе данных болезней, которые могут быть спрогнозированы системой :
Analysis – анализы, которые необходимо сдать, чтобы подтвердить наличие симптома и, соответственно, для подтверждения болезни:
Анализы вынесены в отдельную коллекцию, т. к. у одного симптома может быть сразу несколько анализов для его подтверждения. Appeal's symptoms – список симптомов, которые ввёл пользователей в рамках одного обращения, использующиеся для поиска возможных заболеваний:
У обращения должен быть хотя бы один симптом в данной таблице. Symptoms – список всех существующих в базе данных симптомов:
Analysis for symptom – список анализов, которые надо провести для определения симптома:
Каждый анализ направлен на выявление какого-то симптома, но не у каждого симптома обязан быть анализ для выявления. Disease's symptoms – у каждой болезни есть свой набор симптомов, которые в совокупности дают 100% вероятность наличия у пользователя болезни:
У каждой болезни обязан быть набор симптомов, также как и укаждого симптома должна быть хотя бы одна болезнь, в которую он входит. Predicted diseases – результат выполнения алгоритма, в котором хранятся болезни, вероятность наличия которых у пользователя ненулевая:
Оценка объема информации, хранимой в моделиАналогично нереляционной модели предположим, что
Будем считать, что каждый символ у нас занимает 2 байта в связи с использованием русского языка. Рассмотрим объём информации для каждого объекта сущности: Patien
Всего: 855 Байт Appeal
Всего: 16 Байт Diaseas
Всего: 2100 Байт Analysis
Всего: 100 Байт Appeal's symptoms
Всего: 104 Байта Symptoms
Всего: 1104 Байта Analysis for symptom
Всего: 200 Байт Disease's symptoms
Всего: 200 Байт Predicted diseases
Всего: 106 Байт Таблица 2
Таким образом, общий объём в зависимости от количества пользователей будет выглядеть следующим образом: Избыточность моделиВ качестве альтернативы neo4j в СУБД возьмём PostgreSQL. В данной БД каждая таблица хранится в отдельном файле, которые называют страницей. Объём одной такой страницы равен 8192 Байта. Таким образом, необходимо прибавить это значение для каждой таблицы (всего их 9). Также каждая строка в таблице имеет свои метаданные:
Следовательно, для каждой строки мы также прибавляем 29 Байтов. Формула оценки избыточности будет выглядеть так: $$ По графику видно, что с ростом количества пользователей, разница между чистыми данными и полным объёмом будет уменьшаться. Это связано с тем, что трата на размер листа остаётся постоянной, а объём метаданных строки становится мал по сравнению с весом чистых данных. Направление роста модели при увеличении количества объектов каждой сущностиPatient Увеличение количества строк приводит к линейному росту, равному собственному размеру данной сущности. f(n) = 855*n Байт Appeal Увеличение количества строк приводит к созданию новых связей в таблицах Appeal's symptoms и Predicted diseases. В худшем случае, пользователь введёт все симптомы, которые будут характеризовать все заболевания. f(n) = (16 + 133104 + 41106 ) * n = 18194*n Байт Symptoms Увеличение количества строк приводит к созданию новых связей в таблице Disease's symptoms. В худшем случае, симптом будет у всех болезней. f(n) = (1104 + 41200) * n = 9304n Байт Analysis Увеличение количества строк приводит к созданию новых связей в таблице Analysis for symptom. В худшем случае, анализ будет необходим для выявления всех симптомов. f(n) = (100 + 133200) * n = 26700n Байт При это метаданные будут расти согласно этой функции для каждой из таблиц: f(n) = 29*n Байт Примеры хранения данных в БД для моделиПример хранения данных в БД INSERT INTO Patient (mail, password, full_name, sex, weight, height) VALUES
('user1@example.com', 'password1', 'John Doe', TRUE, 70, 180),
('user2@example.com', 'password2', 'Jane Smith', FALSE, 60, 170);
INSERT INTO Appeal (date, patient_id) VALUES
(NOW(), 11),
(NOW(), 12);
INSERT INTO Disease (title, description, recommendation) VALUES
('Flu', 'Common cold symptoms', 'Rest and hydration'),
('Covid-19', 'Fever, cough, shortness of breath', 'Isolation and medical attention');
-- Вставка тестовых данных в таблицу Analysis
INSERT INTO Analysis (title) VALUES
('Blood Test'),
('X-Ray');
-- Вставка тестовых данных в таблицу Symptom
INSERT INTO Symptom (symp_title, description, weight) VALUES
('Fever', 'High body temperature', 50),
('Cough', 'Persistent cough', 30);
select * from symptom
select * from patient Вывод данных из таблицы Symptom
Вывод данных из таблицы Patient
Примеры запросовРегистриция пользователя INSERT INTO Patient (mail, password, full_name, sex, weight, height) VALUES
('user1@example.com', 'password1', 'John Doe', TRUE, 70, 180); Количество запросов для совершения UseCase: 1 Количество задействованных коллекций: 1 Создание обращения INSERT INTO Appeal (id, date, patient_id) VALUES
(17, NOW(), 11);
insert into appealsymptom (symp_title, app_id) values
('Fever', 17),
('Cough', 17); Количество запросов для совершения UseCase: 2 Количество задействованных коллекций: 2 Получение статистики распространённости симптома среди пациентов SELECT a.*
FROM Appeal a
JOIN Patient p ON a.patient_id = p.id
WHERE a.date > '2023-05-20' AND a.date < '2023-05-27' AND p.sex = TRUE; Количество запросов для совершения UseCase: 1 Количество задействованных коллекций: 2 |
Необходимо расписать модель данных в соответствие со следующими пунктами:
A. Графическое представление модели (ER-диаграмма)
B. Описание назначений коллекций, типов данных и сущностей
C. Оценка объема информации, хранимой в модели (сколько потребуется памяти, чтобы сохранить объекты, как объем зависит от количества объектов - нужно выразить через переменную (количество одного из видов объектов вашей БД)). У вас должна получится формула - зависимость объема от одной переменной.
D. Избыточность модели (отношение между фактическим объемом модели и «чистым» объемом данных).. У вас должна получится формула - зависимость избыточности от одной переменной.
E. Направление роста модели при увеличении количества объектов каждой сущности.
F. Примеры хранения данных в БД для модели (два подраздела «Примеры данных»).
G. «Примеры запросов» - запросы к модели, с помощью которых реализуются сценарии использования
i. Текст запросов
ii. Количество запросов для совершения юзкейсов в зависимости от числа объектов в БД и прочих параметров
iii. Количество задействованных коллекций (если есть)
Готовое задание прикрепить в файле с разметкой markdown (,md) к данному тикету.
Дедлайн: 28 октября 2024
The text was updated successfully, but these errors were encountered: