IscanderChe
IscanderChe29 августа 2019 г. 5:02

Проект DBComponents. Часть 1. Требования к проекту и базе данных

Требования к проекту

Проект реализует базу данных IT-компонентов. Планируется пока три категории: мониторы, медицинские принтеры, системные блоки. Также в функционал базы входит возможность создавать новые категории.

Проект должен состоять из двух функциональных частей – панели администратора и панели пользователя.


Панель администратора должна содержать следующие представления и инструменты:

  • список категорий и кнопку команды «Новая категория»;
  • список параметров категории и кнопки команд «Новый параметр» и «Редактировать параметр»;
  • список компонентов категории и кнопки команд «Новый компонент» и «Редактировать компонент».

По нажатии на кнопку:

  • «Новая категория» должно вызываться диалоговое окно создания новой категории компонентов, содержащее строки ввода имени категории в представлении (видимое имя) и имя категории для базы данных (только латиница плюс символ подчёркивания);
  • «Новый параметр» должно вызываться диалоговое окно создания нового параметра, содержащее строки ввода имени параметра в представлении (видимое имя) и имя параметра для базы данных (только латиница плюс символ подчёркивания), флажок «Заголовок подсписка» для указания, что параметр фиктивный и заполнению в базе данных не подлежит, и выпадающий список «Позиция в списке» с номерами позиций. По умолчанию номер позиции в списке следующий за последним существующим параметром;
  • «Редактировать параметр» должно вызываться диалоговое окно редактирования параметра, содержащее строку ввода имени параметра в представлении с ранее введённым значением;
  • «Новый компонент» должно вызываться диалоговое окно создания нового компонента, содержащее строки ввода ранее созданных параметров компонента. Если параметр не заполняется, то в базе данных этот параметр должен быть записан как «н/д» (нет данных);
  • «Редактировать компонент» должно вызываться диалоговое окно редактирования компонента, содержащее строки ввода параметров компонента с ранее введёнными значениями. Если параметр записан в базе данных как «н/д», строка ввода параметра должна быть пустой.

Панель пользователя должна содержать следующие представления и инструменты:

  • список категорий;
  • блок фильтров для компонентов, состоящий из строк ввода и/или выпадающих списков основных параметров (должно определяться программно, на уровне кода);
  • список компонентов для выбранной категории, удовлетворяющий условиям фильтров;
  • список параметров для выбранного компонента;
  • кнопку команды «Экспортировать в Excel», по нажатию на которую список параметров и значений параметров для выбранного компонента экспортируется в таблицу Excel.

Требования к базе данных

В отношении этой части у меня есть сомнения в правильности решения, в связи с чем я прошу уважаемое сообщество подтвердить мой выбор или предложить другой вариант решения. Заранее спасибо.

База данных должна использовать СУБД SQLite и содержать следующие таблицы:

  • таблица категорий компонентов components_category с полями id , name , view_name ;
  • таблицы параметров компонентов по количеству категорий parameters_<name> (где name – содержимое соответствующего поля таблицы категорий компонентов components_category ), с полями id , name , view_position , view_name , header ;
  • таблицы значений параметров компонентов по количеству категорий values_<name> (где name – содержимое соответствующего поля таблицы категорий компонентов components_category ), с полями id , <name1> , <name2> , … <nameN> (где name1 , name2 , … nameN – содержимое соответствующего поля name таблицы параметров компонентов parameters_<name> ).
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

ИП
  • 30 августа 2019 г. 1:34

Я бы сделал базу в таком виде:

CREATE TABLE "components" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name" TEXT
);

CREATE UNIQUE INDEX "index"
ON "components" ("name" ASC);

CREATE TABLE "parameters" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"components_id" INTEGER,
"name" TEXT NOT NULL,
FOREIGN KEY ("components_id") REFERENCES "components" ("id") ON DELETE RESTRICT ON UPDATE RESTRICT
);

CREATE TABLE "values" (
"id" INTEGER NOT NULL,
"vparameter_id" INTEGER,
"name" TEXT,
PRIMARY KEY ("id" ASC),
FOREIGN KEY ("vparameter_id") REFERENCES "parameters" ("id") ON DELETE RESTRICT ON UPDATE RESTRICT
);
Не совсем понятно назначение поля view_position, но если сильно нужно, то его можно добавить в таблицу "parameters"
Если есть такая необходимость, то можно "ON DELETE RESTRICT" заменить на "ON DELETE CASCADE", тогда при удалении строки из "components" сразу удалятся соответствующие parameters и values

IscanderChe
  • 30 августа 2019 г. 2:41

CREATE UNIQUE INDEX "index"
ON "components" ("name" ASC);

Вот эти строки поясните, для чего они.

Не совсем понятно назначение поля view_position

Это поле нужно для хранения позиции параметра в представлении, поскольку может получиться так, что добавили ещё один параметр, но он должен располагаться выше ранее введённых параметров.

при удалении строки из "components"

Т.е. то, что написано после FOREIGN KEY, относится к удалению из "components"? На данный момент удаления из "components" как такового не предполагается.

ИП
  • 30 августа 2019 г. 3:12
  • (ред.)

CREATE UNIQUE INDEX "index"
ON "components" ("name" ASC);
индекс на поле name, дополнительно делает поле name уникальным

| Т.е. то, что написано после FOREIGN KEY, относится к удалению из "components"? На данный момент удаления из "components" как такового не предполагается.
Так и есть, помимо этого FOREIGN KEY не дает содать parameters со значением components_id если нет соответствующего значения id в components. FOREIGN KEY обеспечивает целостность данных между 2 таблицами при добавлении и удалении данных

parameters с полем view_position будет выглядеть так:
CREATE TABLE "parameters" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"components_id" INTEGER,
"name" TEXT NOT NULL,
"view_position" INTEGER,
CONSTRAINT "fkey0" FOREIGN KEY ("components_id") REFERENCES "components" ("id") ON DELETE RESTRICT ON UPDATE RESTRICT
);

IscanderChe
  • 30 августа 2019 г. 3:40

CONSTRAINT "fkey0"

А вот это для чего?

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
m
  • molni99
  • 26 октября 2024 г. 11:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80баллов,
  • Очки рейтинга4
m
  • molni99
  • 26 октября 2024 г. 11:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20баллов,
  • Очки рейтинга-10
Последние комментарии
i
innorwall14 ноября 2024 г. 22:42
Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
i
innorwall14 ноября 2024 г. 20:09
Qt/C++ - Урок 068. Hello World с использованием системы сборки CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
i
innorwall14 ноября 2024 г. 15:05
EVILEG-CORE. Использование Google reCAPTCHA 2001; 98 29 34 priligy buy
i
innorwall14 ноября 2024 г. 15:00
PyQt5 - Урок 007. Работаем с QML QtQuick (Сигналы и слоты) priligy 30mg Am J Obstet Gynecol 171 1488 505
Сейчас обсуждают на форуме
i
innorwall14 ноября 2024 г. 14:39
добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
i
innorwall11 ноября 2024 г. 21:55
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9Anonim25 октября 2024 г. 19:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Игорь Максимов3 октября 2024 г. 14:05
Реализация навигации по разделам Спасибо Евгений!

Следите за нами в социальных сетях