Sari la conținut
← Laravel + MySQL
Progres curs 0 / 6 lecții (0%)

Proiectarea schemei

O schemă de bază de date bine gândită îți economisește luni de suferință. Prost gândită, te obligă la workaround-uri la fiecare funcție nouă. Lecția asta e despre principiile de proiectare: ce e o entitate, cum alegi tipurile de coloane, ce înseamnă normalizare și când o încalci intenționat.

Entități și relații

Pornești de la substantivele din domeniu: „un magazin are produse, produsele aparțin unor categorii, clienții plasează comenzi, o comandă are mai multe produse". Fiecare substantiv „important" devine un tabel; verbele dintre ele devin relații.

Tipuri de coloane

  • Text scurt (nume, titlu, slug): `string` (VARCHAR, implicit 255).
  • Text lung (descriere, conținut): `text`.
  • Numere întregi: `integer`, `unsignedBigInteger` pentru chei străine.
  • Bani: `decimal(10, 2)` — niciodată `float` pentru sume.
  • Adevărat/fals: `boolean`.
  • Momente: `timestamp` sau `datetime`; `date` pentru doar dată.

Normalizare

Regula de bază: fiecare informație trăiește într-un singur loc. Nu pui numele categoriei în tabelul de produse — pui `category_id` și numele stă în tabelul de categorii. Așa, când redenumești o categorie, o faci o dată. Excepția (denormalizarea) e când performanța chiar cere să duplici ceva — dar o faci conștient, nu din lene.

Convenții Laravel

  • Nume de tabel la plural, snake_case: `produse`, `comenzi`.
  • Cheie primară `id`.
  • Cheie străină: `_id`, de ex. `categorie_id`.
  • Tabel pivot: numele celor două tabele la singular, alfabetic: `categorie_produs`.
  • Coloane `created_at` / `updated_at` (adăugate de `$table->timestamps()`).

Schema unui mini-blog

users:      id, name, email, password, timestamps
categorii:  id, nume, slug, timestamps
articole:   id, user_id (FK), categorie_id (FK), titlu, slug, continut, publicat, publicat_la, timestamps
comentarii: id, articol_id (FK), autor_nume, continut, timestamps

Exercițiu

Pentru un domeniu la alegere (o bibliotecă, un cabinet, un magazin), listează entitățile, relațiile dintre ele și, pentru fiecare entitate, coloanele cu tipul potrivit. Respectă convențiile de denumire Laravel.

Greșeli frecvente

  • Folosești float pentru bani și acumulezi erori de rotunjire.
  • Duplici informație (numele categoriei în fiecare produs) fără motiv.
  • Pui totul într-un singur tabel „date" gigant.
  • Ignori convențiile de denumire și apoi lupți cu Eloquent la fiecare relație.

De reținut

  • Entitățile = substantivele domeniului; relațiile = verbele.
  • Tipuri corecte: decimal pentru bani, text pentru conținut lung.
  • Normalizare: fiecare informație într-un singur loc.
  • Respectă convențiile Laravel de denumire.

Pe scurt

O schemă bună modelează domeniul curat: entități clare, tipuri corecte, informație nedublicată, denumiri convenționale.

Folosim cookie-uri esențiale pentru funcționarea site-ului și, cu acordul tău, cookie-uri de analiză și publicitate. Partenerii noștri, inclusiv Google, pot folosi cookie-uri pentru a afișa reclame relevante. Detalii în Politica de cookie-uri.