Notația Oracle (cerută de subiect): # = identificator unic (cheia primară), * = atribut obligatoriu, ° = atribut opțional. În tabele: Pk = cheie primară, Fk = cheie străină.
1. Entități și atribute
- TRADUCATOR:
# id_traducator, * nume, * prenume, * telefon, ° email, * limba, * nivel
- TRADUCERE:
# nr_ordine, * nr_pagini, * tarif_pagina, * data_inceput, * nr_zile
Limba stă la traducător, nu la traducere: enunțul spune că un angajat cunoaște o singură limbă, deci limba unei traduceri rezultă din traducătorul ei. Dacă ai pune-o în ambele tabele, ar putea ajunge să se contrazică (o traducere „din germană” făcută de cineva care știe doar engleză).
2. Relații (diagrama, în text)
- TRADUCATOR efectuează TRADUCERE — 1:N: un traducător efectuează zero sau mai multe traduceri; o traducere e efectuată de exact un traducător („la o traducere lucrează un singur traducător”). În diagramă: linie simplă la TRADUCATOR, „picior de cioară” la TRADUCERE.
- Relația 1:N devine cheie străină în tabela din partea „N”:
id_traducator intră în TRADUCERE.
3. Înregistrări
TRADUCATOR
| id_traducator (Pk) |
nume |
prenume |
telefon |
email |
limba |
nivel |
| 1 |
Ionescu |
Maria |
0721111111 |
maria.ionescu@mail.ro |
engleză |
C1 |
| 2 |
Popa |
Andrei |
0732222222 |
— |
germană |
B2 |
TRADUCERE
| nr_ordine (Pk) |
nr_pagini |
tarif_pagina |
data_inceput |
nr_zile |
id_traducator (Fk) |
| 101 |
12 |
25 |
02.03.2020 |
2 |
1 |
| 102 |
3 |
30 |
02.03.2020 |
1 |
2 |
4. Instrucțiunea SQL
Cum funcționează
Modelul pornește de la substantivele din enunț: traducător și traducere au atribute proprii, deci sunt entități. „Mai multe traduceri / un singur traducător” dă cardinalitatea 1:N. Traducerile 101 și 102 au aceeași dată — exact cazul „mai multe traduceri în aceeași zi”; o traducere de mai multe zile e acoperită de nr_zile.
INSERT adaugă traducerea 103 (20 de pagini, 25 lei/pagină, 3 zile), făcută de traducătorul 1, Maria Ionescu. Lista de coloane scrisă explicit face instrucțiunea independentă de ordinea coloanelor din tabel.
Greșeli frecvente
id_traducator inexistent (de ex. 7): Oracle respinge rândul dacă cheia străină e declarată; fără constrângere, traducerea rămâne „orfană” și nu apare în nicio interogare cu jonctiune.
nr_ordine repetat (101): eroare de cheie primară. Numărul de ordine trebuie să fie nou.
- Data scrisă ca text simplu (
'05.03.2020'): depinde de formatul implicit al serverului și poate da eroare sau o dată greșită. TO_DATE cu format explicit e sigur.
- Relația desenată M:N: enunțul spune clar „un singur traducător” pe traducere; o tabelă de legătură aici e o greșeală de modelare, chiar dacă SQL-ul ar merge.
- Lipsa cerinței de la pasul 3 (doar o înregistrare pe tabel): subiectul cere minimum două pentru fiecare entitate.