IscanderChe
IscanderChe29. August 2019 05:02

DBComponents-Projekt. Teil 1. Anforderungen an das Projekt und die Datenbank

Projektanforderungen

Das Projekt implementiert eine Datenbank von IT-Komponenten. Bisher sind drei Kategorien geplant: Monitore, medizinische Drucker, Systemeinheiten. Die Funktionalität der Datenbank umfasst auch die Möglichkeit, neue Kategorien zu erstellen.

Das Projekt sollte aus zwei funktionalen Teilen bestehen - dem Admin-Panel und dem Benutzer-Panel.


Admin-Panel sollte die folgenden Ansichten und Tools enthalten:

  • Liste der Kategorien und die Schaltfläche des Befehls "Neue Kategorie";
  • Liste der Kategorieparameter und Schaltflächen der Befehle "Neuer Parameter" und "Parameter bearbeiten";
  • Liste der Kategoriekomponenten und Schaltflächen für die Befehle "Neue Komponente" und "Komponente bearbeiten".

Beim Klicken auf die Schaltfläche:

  • Das Dialogfeld "Neue Kategorie" zum Erstellen einer neuen Kategorie von Komponenten sollte aufgerufen werden und enthält die Zeilen zum Eingeben des Namens der Kategorie in der Ansicht (sichtbarer Name) und des Namens der Kategorie für die Datenbank (nur lateinisch plus Unterstrich );
  • Dialog "Neuer Parameter" zum Anlegen eines neuen Parameters soll aufgerufen werden, der die Zeilen zur Eingabe des Namens des Parameters in der Ansicht (sichtbarer Name) und des Namens des Parameters für die Datenbank (nur lateinisch plus Unterstrich) enthält Kontrollkästchen "Unterlistentitel", um anzuzeigen, dass der Parameter ein Dummy ist und nicht in die Datenbank eingetragen werden muss, und die Dropdown-Liste "Position in der Liste" mit Positionsnummern. Standardmäßig folgt die Positionsnummer in der Liste dem letzten vorhandenen Parameter;
  • Dialogfeld "Parameter bearbeiten" zum Bearbeiten eines Parameters sollte aufgerufen werden, das eine Zeile zum Eingeben des Parameternamens in der Ansicht mit einem zuvor eingegebenen Wert enthält;
  • Dialog "Neue Komponente" zum Erstellen einer neuen Komponente sollte aufgerufen werden, der Eingabezeilen für zuvor erstellte Komponentenparameter enthält. Wenn der Parameter nicht ausgefüllt ist, sollte dieser Parameter in der Datenbank als "n / a" (keine Daten) aufgezeichnet werden;
  • Das Dialogfenster „Komponente bearbeiten“ zum Bearbeiten der Komponente sollte aufgerufen werden und enthält Zeilen zum Eingeben der Parameter der Komponente mit zuvor eingegebenen Werten. Wenn der Parameter in der Datenbank als "n/a" aufgezeichnet ist, muss die Parametereingabezeichenfolge leer sein.

Das Benutzerpanel sollte die folgenden Ansichten und Tools enthalten:

  • Liste der Kategorien;
  • ein Filterblock für Komponenten, bestehend aus Eingabezeilen und/oder Dropdown-Listen der Hauptparameter (sollte programmgesteuert auf Codeebene definiert werden);
  • eine Liste von Komponenten für die ausgewählte Kategorie, die die Filterbedingungen erfüllt;
  • Liste der Parameter für die ausgewählte Komponente;
  • die Schaltfläche des Befehls "Nach Excel exportieren", durch deren Anklicken die Liste der Parameter und Parameterwerte für die ausgewählte Komponente in eine Excel-Tabelle exportiert wird.

Datenbankanforderungen

In Bezug auf diesen Teil habe ich Zweifel an der Richtigkeit der Lösung und bitte daher die respektierte Community, meine Wahl zu bestätigen oder eine andere Lösung vorzuschlagen. Vielen Dank im Voraus.

Die Datenbank muss SQLite DBMS verwenden und die folgenden Tabellen enthalten:

  • Tabelle der Komponentenkategorien components_category mit Feldern id , name , view_name ;
  • Tabellen der Komponentenparameter nach Anzahl der Kategorien parameters_<name> (wobei name der Inhalt des entsprechenden Feldes der Tabelle der Komponentenkategorien components_category ist), mit den Feldern id , Name , Ansichtsposition , Ansichtsname , Kopfzeile ;
  • Wertetabellen der Komponentenparameter nach Anzahl der Kategorien values_<name> (wobei name der Inhalt des entsprechenden Feldes der Tabelle der Komponentenkategorien components_category ist), mit Felder id , <name1> , <name2> , … <nameN> (wobei name1 , name2 , … nameN* * sind die Inhalte des entsprechenden Feldes name der Parametertabellenkomponenten parameters_<name>**).
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

ИП
  • 30. August 2019 01: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. August 2019 02:41

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

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

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

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

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

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

ИП
  • 30. August 2019 03:12
  • (bearbeitet)

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. August 2019 03:40

CONSTRAINT "fkey0"

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

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken