Tabele Mysql cu arhivarea datelor pt. administrator bloc

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
valy
Mesaje: 2

Tabele Mysql cu arhivarea datelor pt. administrator bloc

Salutare,
Vreau sa fac pentru mine o aplicatie web + mysql care sa ma ajute in administrarea unui bloc la care sunt administrator. Am cunostiinte la nivel de incepator cu php si mysql dar cu putin ajutor de la voi spre sa reusesc.
Prima problema de care m-am lovit este la crearea bazei de date . Deci pe scurt: la un bloc evidenta administrativ-contabila se tine pe luna calendaristica de la data cand a fost inchisa luna anterioara pana la data cand se inchide urmatoarea luna.
De exemplu luna aprilie 2018 poate sa fie intre 17.04.2018-20.05.2018, iar luna mai 2018 intre 21.05.2018-15.06.2018 si tot asa.
In fiecare luna cuprinsa intre intervalul respectiv pot exista mai multe tabele de ex: proprietari, furnizori, plati, incasari, contoare apa etc.
Problema mea este ca aceste tabele contin date care difera de la un interval la altul. Astfel intr-un an ar trebui sa fac de ex. 10 tabele x 12 luni = 120 tabele si mai departe.
Alta problema este ca datele dintr-o luna anterioara pot sa fie doar vizualizate , fara posibilitate de modificare. Ceva idei legate de moduk cum as putea construi baza de date cu aceste tabele?

MarPlo
Salut,
Nu am idee de cerintele unei aplicatii pt. administrator de bloc, dar daca iti e de folos:
1. Salvezi data in mysql in format timestamp, iar in php te poti folosi de functia strtotime() ca sa obtii timestamp-ul dupa sau minus o luna (sau cat vrei) de la ce data vrei.
Exemlu:

Cod: Selectaţi tot

$data_tms = strtotime('15.04.2018'); //timestamp-ul datei de inceput
$data2_tms = strtotime('+1 month 1 days', $data_tms); //timestamp-ul datei dupa o luna si o zi de la $data_tms

//test - data lui $data2_tms
echo date('d.m.Y', $data2_tms); // 16.05.2018
- Apoi, in php faci Select la ce interval vrei.
De exeplu:

Cod: Selectaţi tot

$sql ='SELECT * FROM tabel WHERE col_data >=$data_tms AND col_data < $data2_tms';
Sau faci doua coloane pt. data in tabele mysql, una "data_start" si a doua "data_end" (cu Timestam dupa o luna), iar cu functia strtotime() obtii si adaugi pt. fiecare Timestamp-ul potrivit.

2. Pentru editarea datelor in tabele mysql te poti folosi de aplicatia PhpMyAdmin.

- Daca altcineva are experienta in acest domeniu si vrea sa te ajute, sper sa posteze aici.

andras
Prima data construiesti baza de date. Eu as pleca de la principiul trasabilitatii, adica orice operatie pe care o faci in baxa de date, ea sa poata fi ulterior vizualizata la nevoie, deci baza de date trebuie construita tinind cont de acest principiu (chiar cu riscul unor redundante asumate, ex. o tabela de modificari). Variante de tabele pot fi mai multe, spre exemplu tabela de useri (daca e aplicatie web), tabela de persoane, tabela de apartamente (cu Foreign key catre tabela de persoane), tabela de incasari, tabela de furnizori, tabela cu rolurile persoanelor (proprietar, chirias, eligibil la cheltuieli etc), toate cu Foreign key-uri catre tabelele corespunzatoare. Fiecare tabela trebuie sa aiba cimp ID autoincrement, de asemenea cimpurile de Timestamp sint importante si ar trebui sa le pui peste tot unde este nevoie, de asemenea cimp id-ul userului care a efectuat operatia in baza de date, iar baza de date ar trebui sa fie de tip relational. Ar trebui ca in prima faza sa folosesti creionul si hirtia pentru desenarea bazei de date si a tabelelor. Vizualizarea datelor pe lunile anterioare este simpla, folosesti doar SELECT.
In rest, depinde de tine cum vrei s-o construiesti si ce informatii sa stocheze. Succes!

valy
Multumesc MarPlo si Andras pentru raspunsurile voastre. Incerc sa fiu mai clar. Baza de date am pus-o pe hartie, cu tabele aferente, primary key si foreign key dupa caz. Ideea de functionare ar fi asa: definesc prima luna cand fac tabelul de cheltuieli, sa zicem luna mai 2018. Incep sa introduc date, fac calculele, se genereaza tabelul de cheltuieli si trebuie sa dau " inchidere luna" , cand se arhiveaza toate tabele existente si se trece la luna urmatoare, iunie 2018 in cazul nostru , cu toate tabelele anterioare copiate in altele pe care se poate lucra in continuare. Dintr-o casuta select se poate alege o luna si in functie de luna aleasa avem acces la tabele cu date din lunile respective . Asta inseamna sa am de ex. tabela furnizori_ianuarie, furnizori_februarie, deci la un moment dat foarte multe tabele ( poate 150-200 pe an), cu cat foloseti aplicatia mai multi ani creste numarul tabelelor si nu stiu daca va fi o problema cu atatea tabele intr-o singura baza de date. Apoi iar nu stiu cum "impachetez" aceste tabele cu luna aferenta.

andras
Nu este nevoie sa folosesti 150-200 tabele de furnizori, folosesti una singura si asa cum a spus MarPlo, fiecare tranzactie are un Timestamp cu anul, luna si ziua tranzactiei. Fiecare inchidere de luna o inregistrezi intr-o tabela de inchideri astfel incit aplicatia sa stie care este luna curenta, iar in toate SELECT-urile faci filtru pe cimpurile Timestamp din luna pe care ai ales-o in casuta select.
Exista si varianta in care toate tranzactiile dintr-o luna sa fie tranferate in alte tabele la inchiderea lunii, dar asta se face la aplicatiile complexe (banci, institutii), nu e cazul aici, plus ca la banci datele arhivate se tin pe alte servere, nu pe cel de lucru.

Subiecte similare