Tworzenie nadmiarowych rekordów w drugiej tabeli

1

Mam taki przypadek i potrzebuję porady. W mojej aplikacji są dwie encje/tabele w DB.
I potrzebuję zrobić coś takiego, że dodam metodą POST 1 rekord w pierwszej tabeli, wraz z polem (np. number_of_records_tab2) o wartości np. 5.
I chciałbym, żeby po dodaniu tego rekordu, od razu w drugiej tabeli utworzyło mi tyle rekordów ile zawiera powyższe pole -> 5. (jakieś tam ID, coś prostego)

Np.

TABELA 1

  • ID_tab1
  • Nazwa
  • Number_of_records_tab2

TABELA2

  • ID_tab2
  • tab1_Id

Między polami ID_tab1(TABELA1) i tab1_Id(TABELA2) będzie relacja jeden do wielu.
Czyli dodaje do TABELA1 pierwszy rekord, i od razu w drugiej tabeli tworzy mi się powiązana ilość rekordów w drugiej tabeli.

Jak się za to najłatwiej zabrać, jest jakiś dedykowany sposób do tego w springu?

0

Może utwórz trigger w bazie danych który będzie tworzył te 5 rekordów po utworzeniu rekordu w pierwszej tabeli?

2
Imperator109 napisał(a):

Jak się za to najłatwiej zabrać, jest jakiś dedykowany sposób do tego w springu?

w jednej transakcji w metodzie po zapisie do pierwszej tabeli zapisujesz rekordy do drugiej

0

Można Hackami/triggerami jak pisze @Lowkick
Można po ludzku w pętli jak pisze @Inari

Pytanie podstawowe co chcesz osiągnąć? Po co ci te wpisy? Bo na razie nie przechowują żadnej informacji

0

A po co w ogóle chcesz robić coś takiego?

Cokolwiek będzie w tej drugiej bazie tabeli mógłbyś tak czy tak wyciągnąć z pierwszej, więc podstawowe pytanie pojawia się: po co?

0
Riddle napisał(a):

A po co w ogóle chcesz robić coś takiego?

Cokolwiek będzie w tej drugiej bazie tabeli mógłbyś tak czy tak wyciągnąć z pierwszej, więc podstawowe pytanie pojawia się: po co?

Tak się bawię w pisanie apek i robię teraz związaną z rezerwacjami. Trochę postanowiłem zmienić model danych.
Tabela1 bedzie zawierala dane zwiazane z wydarzeniem, i chcialbym zeby w tabeli2 automatycznie generowaly sie miejsca wolne na wydarzenie z polem statusu wolne/zajete.
Potem dam jeszcze tabele3 gdzie beda rezerwacje, ktora bedzie powiazana z tabela2. Tak po krotce.

Bedzie wiecej danych, nie beda sie powielac w tabelach. Tutaj tak ogolnie zapytalem jak cos takiego najlatwiej zrobic, wiec nie wnikalem w szczegoly.

1
Imperator109 napisał(a):
Riddle napisał(a):

A po co w ogóle chcesz robić coś takiego?

Cokolwiek będzie w tej drugiej bazie tabeli mógłbyś tak czy tak wyciągnąć z pierwszej, więc podstawowe pytanie pojawia się: po co?

Tak się bawię w pisanie apek i robię teraz związaną z rezerwacjami. Trochę postanowiłem zmienić model danych.
Tabela1 bedzie zawierala dane zwiazane z wydarzeniem, i chcialbym zeby w tabeli2 automatycznie generowaly sie miejsca wolne na wydarzenie z polem statusu wolne/zajete.
Potem dam jeszcze tabele3 gdzie beda rezerwacje, ktora bedzie powiazana z tabela2. Tak po krotce.

Bedzie wiecej danych, nie beda sie powielac w tabelach. Tutaj tak ogolnie zapytalem jak cos takiego najlatwiej zrobic, wiec nie wnikalem w szczegoly.

No to moim zdaniem to jest słabe rozwiązanie szczerze mówiąc, żeby dodawać je do tej drugiej tabeli. Jak chcesz odczytać te wolne miejsca, to po prostu zwróć je do klienta na podstawie tych danych które masz w tabeli1.

Weź pod uwagę, że w momencie w którym masz takie dwie tabele (jedna z wolnymi miejscami druga z zajętymi) to istnieje szansa że w wyniku błędu będziesz miał jedno miejsce które jest w obu tabelach, i jest jednocześnie zajęte i wolne.

Chociażby z tego powodu powinieneś raczej odejść od tego pomysłu.

0
Riddle napisał(a):
Imperator109 napisał(a):
Riddle napisał(a):

A po co w ogóle chcesz robić coś takiego?

Cokolwiek będzie w tej drugiej bazie tabeli mógłbyś tak czy tak wyciągnąć z pierwszej, więc podstawowe pytanie pojawia się: po co?

Tak się bawię w pisanie apek i robię teraz związaną z rezerwacjami. Trochę postanowiłem zmienić model danych.
Tabela1 bedzie zawierala dane zwiazane z wydarzeniem, i chcialbym zeby w tabeli2 automatycznie generowaly sie miejsca wolne na wydarzenie z polem statusu wolne/zajete.
Potem dam jeszcze tabele3 gdzie beda rezerwacje, ktora bedzie powiazana z tabela2. Tak po krotce.

Bedzie wiecej danych, nie beda sie powielac w tabelach. Tutaj tak ogolnie zapytalem jak cos takiego najlatwiej zrobic, wiec nie wnikalem w szczegoly.

No to moim zdaniem to jest słabe rozwiązanie szczerze mówiąc, żeby dodawać je do tej drugiej tabeli. Jak chcesz odczytać te wolne miejsca, to po prostu zwróć je do klienta na podstawie tych danych które masz w tabeli1.

Weź pod uwagę, że w momencie w którym masz takie dwie tabele (jedna z wolnymi miejscami druga z zajętymi) to istnieje szansa że w wyniku błędu będziesz miał jedno miejsce które jest w obu tabelach, i jest jednocześnie zajęte i wolne.

Chociażby z tego powodu powinieneś raczej odejść od tego pomysłu.

Nie o to mi chodziło. :-)

Pierwsza tabela będzie dajmy na to Event(Id_eventu, nazwa, data, Lista miejsc przypisanych do eventu-tutaj relacja z tabela2 o nazwie Seats)
Druga tabela Seats będzie miał np. (Id, seat_number, event_id, status(wolne/zajete))
Trzecia tabela Reservation (bedzie miala relacje do drugiej tabeli (seats), bede wybieral miejsca z niej i metodą post bede zmienial status miejsca)

Całość rezerwacji - wolne/zajete miejsca bedzie sie opierala tylko i wylacznie o tabele Seats. Tylko z tej jednej tabeli będę pobierał info o wolnych/zajetych miejscach.
Miejsca by sie generowaly automatycznie jako wolne i przypisane do eventu (i o tego dotyczylo moje pytanie w pierwszym poscie).
Tak to sobie zaplanowałem, ale jak widzisz jakieś błędy w moim rozumowaniu, to chętnie przyjmę krytykę :-)

3
Imperator109 napisał(a):

Pierwsza tabela będzie dajmy na to Event(Id_eventu, nazwa, data, Lista miejsc przypisanych do eventu-tutaj relacja z tabela2 o nazwie Seats)
Druga tabela Seats będzie miał np. (Id, seat_number, event_id, status(wolne/zajete))
Trzecia tabela Reservation (bedzie miala relacje do drugiej tabeli (seats), bede wybieral miejsca z niej i metodą post bede zmienial status miejsca)

Całość rezerwacji - wolne/zajete miejsca bedzie sie opierala tylko i wylacznie o tabele Seats. Tylko z tej jednej tabeli będę pobierał info o wolnych/zajetych miejscach.
Miejsca by sie generowaly automatycznie jako wolne i przypisane do eventu (i o tego dotyczylo moje pytanie w pierwszym poscie).

Ale po co? Nie jest Ci to do niczego potrzebne, żeby dodawać takie rekordy do bazy danych.

Rozumiem, że Ty chcesz zrobić wpis w tabeli events na jakieś wydarzenie, na które jest powiedzmy 200 miejsc. I Ty chcesz od razu powiedzmy stworzyć 200 recordów w tabeli seats jako "wolne", i potem zmieniać status z wolne=true na wolne=false.

To jest średnie podejście, bo możesz po prostu zrobić tabelę events i nie dodawać żadnych recordów do seats, i to będzie oznaczać "miejsca wolne". Jak ktoś zajmie miejsce, to dodajesz jeden record w seats, i to oznacza "miejsce zajęte". Innymi słowy, możesz interpretować w aplikacji brak jakiejś relacji jako "wolne miejsce".

0

Jeżeli umiesz wstawić rekord do bazy, to również umiesz wstawić N rekordów. Wyczuwam fundamentalne pomieszanie pojęć, bo inaczej nie zadawałbyś takiego pytania.

  • Do bazy nie wstawiamy metodą POST, ani nawet metodą PUT. Najczęściej ta metoda nazywa się INSERT :)
  • Czy przypadkiem nie używasz klasy definiującej Encję jako typu dla parametru @RequestBody w Controllerze?
0
ArchitektSpaghetti napisał(a):

Jeżeli umiesz wstawić rekord do bazy, to również umiesz wstawić N rekordów. Wyczuwam fundamentalne pomieszanie pojęć, bo inaczej nie zadawałbyś takiego pytania.

  • Do bazy nie wstawiamy metodą POST, ani nawet metodą PUT. Najczęściej ta metoda nazywa się INSERT :)
  • Czy przypadkiem nie używasz klasy definiującej Encję jako typu dla parametru @RequestBody w Controllerze?
  1. Tak, wiem. Wyszedł mi skrót myślowy
  2. Raczej używam Dto i mapowania w tej warstwie jeżeli o to Ci chodzi

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