Dynamiczne dodawanie tabel

0

Potrzebuje pomocy z waszej strony. Jaki będzie najbardziej wydajny i rozsądny sposób podejścia do następującego tematu. Otóż jest sobie aplikacja która będzie pozwalała użytkownikowi utworzyć za pomocą dynamicznego formularza tworzenie szablonu z określonymi danymi. Czyli pan X loguje się i potrzebuje przechowywać w DB takie dane jak imie, nazwisko, email, nip, natomiast pan Y potrzebuje imie, nazwisko, data urodzenia, pesel, nip, regon. Nazwy tych pól i zakres danych które przechowują zależeć będą tylko od osoby która za pomocą formularza tworzy strukturę takiego dokumentu.

Wpadłem na pomysł, żeby tworzyć osobne tabele w DB dla każdego takiego formularza, ale czy to jest wydajne i bezpieczne? Czy może w inny sposób przechowywać takie dane? Proszę o sugestie i nakierowanie.

0

Ja bym nie tworzył osobnych tabeli. Wydajne może być, ale bezpieczne trochę mniej (choć to zależy), jednak -- co ważniejsze -- skomplikowane do dalszej obsługi, naprawdę...

Lepiej może stworzyć tabelę, w której takie pseudotabele opisujemy przez wyliczeni ich pól i typów tych pól, a w jeszcze innej tabeli trzymamy wartości tych pseudopól...?

1

Ogólnie temat moim zdaniem mocny gruby - obejrzyj sobie to ->
Teraz nie masz może takiej potrzeby - ale zaraz dojdą Ci dodatkowe walidatory (oprócz tych ktore juz masz np pesel/nip/regon) i pojawia Ci się takie sytuacje:

  1. "jeśli wiek uzytkownika jest mniejszy niz 18 lat - to zablokuj dwa pola z pytaniami o alkohol"
  2. grupy checkboxów - czyli "zaznacz przynajmniej 6 zwierząt, które mają futro i pazury"
  3. uzaleznienie walidatorów np od kraju - ew całkowite zrezygnowanie z nich w niektorych przypadkach (w innych krajach zapis nipu/peselu może być inny)
  4. walidatory dat start/koniec - np "Podaj datę odjazdu / Podaj datę przyjazdu"
0

A może nie używać bazy relacyjnej jak są takie wymagania?

0

Dynamiczne tworzenie tabel to tylko czubek góry lodowej. Potem mas masę innych problemów.
To co proponuje @koszalek-opalek jest znane jako EAV, i ogólnie się sprawdza choć też nie jest polecane. To antywzorce.

Obecnie dobrym rozwiązaniem są bazy dokumentowe lub kolumny typu json w np. Postresql.

1

@Slepiec: od kiedy EAV jest antywzorcem?

0

Ja bym przeanalizował jak będą te dane potem wykorzystywane. Jeśli to do jakiś prostych operacji i wierszy w tych tabelach "dynamicznych" nie będzie dużo to może być EAV.
jeśli danych będzie bardzo dużo (BARDZO DUŻO) to można by rozważyć generowanie specyficznych tabel.
Albo jakaś baza NoSQL czy kolumny typu JSON, XML.

0

Tworzenie do tego relacyjnej bazy danych wydaje sie byc blednym zalozeniem. Zdecydowanie bardziej pasuje mi tu jakas baza NoSQL

0
shagrin napisał(a):

Tworzenie do tego relacyjnej bazy danych wydaje sie byc blednym zalozeniem. Zdecydowanie bardziej pasuje mi tu jakas baza NoSQL

Gdyby tak się zawsze dalo...

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