IscanderChe
IscanderCheAug. 29, 2019, 5:02 a.m.

DBComponents project. Part 1. Requirements for the project and database

Project requirements

The project implements a database of IT components. Three categories are planned so far: monitors, medical printers, system units. The functionality of the database also includes the ability to create new categories.

The project should consist of two functional parts - the admin panel and the user panel.


Admin panel should contain the following views and tools:

  • list of categories and the button of the command "New category";
  • list of category parameters and buttons of commands "New parameter" and "Edit parameter";
  • list of category components and buttons for commands "New component" and "Edit component".

On button click:

  • "New Category" dialog box for creating a new category of components should be called, containing the lines for entering the name of the category in the view (visible name) and the name of the category for the database (only Latin plus an underscore);
  • "New parameter" dialog box for creating a new parameter should be called, containing the lines for entering the name of the parameter in the view (visible name) and the name of the parameter for the database (only Latin plus underscore), the "Sublist Title" checkbox to indicate that the parameter is dummy and is not subject to filling in the database, and the drop-down list "Position in the list" with position numbers. By default, the position number in the list follows the last existing parameter;
  • "Edit parameter" dialog box for editing a parameter should be called, containing a line for entering the parameter name in the view with a previously entered value;
  • "New component" dialog box for creating a new component should be called, containing input lines for previously created component parameters. If the parameter is not filled in, then in the database this parameter should be recorded as "n / a" (no data);
  • "Edit component" dialog box for editing the component should be called, containing lines for entering the parameters of the component with previously entered values. If the parameter is recorded in the database as "n/a", the parameter entry string must be empty.

The User Panel should contain the following views and tools:

  • list of categories;
  • a block of filters for components, consisting of input lines and/or drop-down lists of the main parameters (should be defined programmatically, at the code level);
  • a list of components for the selected category that satisfies the filter conditions;
  • list of parameters for the selected component;
  • the button of the "Export to Excel" command, by clicking on which the list of parameters and parameter values for the selected component is exported to an Excel table.

Database requirements

Regarding this part, I have doubts about the correctness of the solution, and therefore I ask the respected community to confirm my choice or suggest another solution. Thank you in advance.

The database must use SQLite DBMS and contain the following tables:

  • table of component categories components_category with fields id , name , view_name ;
  • tables of component parameters by the number of categories parameters_<name> (where name is the content of the corresponding field of the table of component categories components_category ), with fields id , name , view_position , view_name , header ;
  • tables of values of component parameters by the number of categories values_<name> (where name is the content of the corresponding field of the table of component categories components_category ), with fields id , <name1> , <name2> , … <nameN> (where name1 , name2 , … nameN are the contents of the corresponding name field of the parameter table components parameters_<name> ).
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

ИП
  • Aug. 30, 2019, 1:34 a.m.

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

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
  • Aug. 30, 2019, 2:41 a.m.

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

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

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

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

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

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

ИП
  • Aug. 30, 2019, 3:12 a.m.
  • (edited)

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
  • Aug. 30, 2019, 3:40 a.m.

CONSTRAINT "fkey0"

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

Comments

Only authorized users can post comments.
Please, Log in or Sign up
OI

C++ - Test 001. The first program and data types

  • Result:40points,
  • Rating points-8
AD

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:80points,
  • Rating points4
Last comments
ИМ
Игорь МаксимовNov. 22, 2024, 11:51 a.m.
Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiOct. 31, 2024, 2:37 p.m.
Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEOct. 19, 2024, 8:19 a.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовOct. 5, 2024, 7:51 a.m.
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5July 5, 2024, 11:02 a.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Now discuss on the forum
Evgenii Legotckoi
Evgenii LegotckoiJune 24, 2024, 3:11 p.m.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Nov. 15, 2024, 6:04 a.m.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectJune 4, 2022, 3:49 a.m.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimOct. 25, 2024, 9:10 a.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Follow us in social networks