Dynamiczna struktura drzewiasta bazy danych.

0

Cześć, wszystkim czytającym ten wątek!
Przychodzę do was z problemem i proszę o poradę, jakieś nakierowanie na pomysł, który będę mógł wykorzystać do rozwiązania tego problemu, za wszystkie odpowiedzi z góry dziękuje.

Problem: Na projekt musimy zrealizować aplikację webową, która będzie służyła tworzeniu formularzy, które będą miały kategorie, kategorie mogą mieć podkategorie a podkategorie inne podkategorie i tak to może się zagłębiać, a przynajmniej powinno.
Przykładowy przypadek: Klient otwiera aplikacje -> wybiera opcje "dodaj kategorie" i dodaje kategorie -> następnie wchodzi do kategorii i tam dodaje kategorie -> wchodzi do kategorii i w niej dodaje formularz.
Czym jest formularz: Jest zbiorem dowolnej liczby pytań przygotowanych przez osobę korzystającą z serwisu. Pytania mogą być rożne, otwarte i zamknięte. Każdy formularz może mieć inna liczbę pytań.

a) Na chwilę obecną nie mamy pomysłu jak to rozgryźć. Nie wiemy czy powinniśmy dla każdej kategorii tworzyć tabele jej kategorii pochodnych? Czy może stworzyć tabele która przechowuje id_kategorii + id_rodzica.
b) Jak poradzić sobie ze zmienną liczbą pytań?

c) Czy logicznym byłoby określenie maksymalnej głębokości? Tj. że maksymalnie mogą być powiązane np. 4 kategorie?

b) Czy logicznym byłoby nie pozwolić dodawać formularzy jeśli kategoria ma swoje podkategorie?
chodzi tu o wykluczenie przypadków tego typu:
screenshot-20191114210210.png

2

a. jedna tabela - id, parent_id, reszta. Dla kategorii "głównych" parent_id = null
b. nie rozumiem pytania - standardowy układ dwóch tabel - formularz z danymi dotyczącymi formularza oraz tabela pytania z id_formularz a potem jeszcze tabela odpowiedź z id_pytania. Pytania i Odpowiedź może mieć dodatkowo pole kolejność
c. nie
d. zależy od definicji problemu. To nie ma nic wspólnego z samą bazą a z modelem biznesowym. Wg mnie jeśli nie masz tego zdefiniowanego w zadaniu to możesz przyjąć dowolnie ale musisz się tego trzymać

1 użytkowników online, w tym zalogowanych: 0, gości: 1