Tabelă Persoane (Juridice + Fizice)

Salutare dragilor.

Cred că e prima dată când mă lovesc de problema asta așa că apelez la experiența voastră.

Cum ați stoca în sql informațiile legate de persoane care pot fi atât persoane juridice cât și prsoane fizice?

Eu simt că orice variantă aș alege este cumva greșită.

Varianta 1
Folosește o coloană booleană pentru tipul de persoană și apoi câmpurile comune gen CIF==CNP. Pentru câmpurile diferite, coloane noi.
Varianta 2
Coloana booleană plus câmpuri pentru fiecare tip de persoană. Ex: PJ_Denumire, PJ_Cif, PF_Nume, PF_Prenume.
Varianta 3
O tabelă pentru persoane juridice, o tabelă pentru persoane fizice și o tabelă de legătură.

Oricare din variante mi se par trase de păr și mă gândesc că dacă ai lăsa natura câteva milioane de ani să lucreze la problema asta, parcă văd că ar găsi alt răspuns. (exclus nosql).

Legat de asta, daca stochezi informatiile respective pentru facturare, CNP-ul nu este obligatoriu. Eu nu il cer persoanelor fizice in nici un proiect care genereaza facturi (SaaS, eshops, etc).

Codul Fiscal, Art. 155, alin. 19:

Factura cuprinde în mod obligatoriu următoarele informații:
[…]
f) denumirea/numele şi adresa beneficiarului bunurilor sau serviciilor, precum şi codul de înregistrare în scopuri de TVA sau codul de identificare fiscală al beneficiarului, dacă acesta este o persoană impozabilă ori o persoană juridică neimpozabilă;

Deci pentru persoane fizice este de ajuns numele si adresa.

1 Like

Este un proiect pentru o instituție cu cerințe clare, bazate pe niște formulare tipărite. Câmpurile care le am și trebuie să le salvez ar fi astea:

Persoane Juridice

  • Denumire
  • Localitatea
  • Strada
  • Nr.
  • Bl
  • Sc
  • Et
  • Ap
  • Judet
  • Telefon
  • Fax
  • NrRegistruComertului
  • CodFiscal
  • Iban
  • Banca
  • Filiala
  • ReprezentantLegal
  • ReprezentantLegal_Functia
  • ReprezentantLegal2
  • ReprezentantLegal2_Functia

Persoane Fizice

  • Nume
  • Prenume
  • Localitatea
  • Strada
  • Nr.
  • Bl
  • Sc
  • Et
  • Ap
  • Judet
  • Telefon
  • Fax
  • TipBuletin
  • Seria
  • Numarul
  • EliberatDePolitia
  • CNP

De obicei merg pe varianta 2, campuri pentru fiecare ± boolean pentru identificare tip.

2 Likes

Cred că aș prefera ceva mai aproape de varianta 1 cu mențiunile următoare:

  • cred că aș prefera să folosesc un câmp comun pentru nume/denumire (simplifică foarte mult codul de listare/search)
  • câte o coloană pentru fiecare din câmpurile comune salvate o singură dată (adresa, telefon etc)
  • restul câmpurilor diferite salvate ca și coloane diferite (altfel numele coloanelor nu vor fi sugestive deloc dacă amesteci CNP-uri și CIF-ul în aceiași coloană, să nu mai zic if-urile pe care o să le ai în codul de validare)
  • aș muta reprezentații legali în tabelă separată (unde sunt doi pot să apară mai mulți)
  • aș întreba și dacă pentru contul bancar la PJ nu e la fel (unele firme au mai mult conturi deschise la bănci diferite)
3 Likes

Mi s-a mai recomandat că acolo unde am nevoie de Nume sau Prenume să merg pe regula că primul introdus este Prenumele iar după ultimul spațiu este Numele dar totuși lucrurile devin puțin complicate plus că poate apărea o eroare umană așa că Denumire, Nume, Prenume ar fi bine să fie coloane diferite. La momentul acesta un search după nume în toate cele 3 coloane mi se pare mai ok decât regex în coloana denumire.

Cât despre reprezentanți și conturi bancare, ai absolută dreptate. Cu siguranță vor fi în tabele separate. În exemplul de mai sus apar așa dintr-o oareșice comoditate. :smiley:

Nu aș uni numele cu prenumele în aceiași coloană, aș folosi în schimb aceiași coloană pentru denumire și nume. Prenumele e separat și o să fie gol pentru firmă (eventual îl poți folosi să salvezi tipul firmei - srl/sa).

Faza cu regex pentru nume e aiurea (mai ales cu persoane care au mai multe prenume ca mine).

2 Likes

Ai dreptate. Merci.