Una taula és una manera ordenada de presentar unes dades que estan relacionades.
Introducció
Una relació és una taula on l’ordre de les files i les columnes no importa.
Pots canviar l’ordre de les files i les columnes de la taula i segueixen representant el mateix conjunt de dades.
El que apareguin sempre en el mateix ordre és anecdòtic.
Entorn de treball
Per treballar amb Sqlite utilitzarem l’aplicació DB Browser for SQLite.
Si tens permisos d’administrador pots descarregar l’aplicació directament des de la web: https://sqlitebrowser.org/dl/
En altre cas pots utilitzar Scoop per instal·lar l’aplicació
scoop bucket add extrasscoop install extras/sqlitebrowserArrenca l’aplicació:

Taula
Crea la base de dades pets.db.
A SQLite una base de dades és un fitxer 😺

create table
A continuació crea la taula dog amb les columnes name, age i breed.

Pots veure que a més del nom de la columna també has de definir el tipus de dada que contindrà cada columna.
Els tipus més habituals són:
| Storage class | |
|---|---|
integer | El valor és un número enter, i es guarda amb 0, 1, 2, 3, 4, 6, o 8 bytes en funció del tamany del número. |
real | El valor és un número real, i es guarda com un “8-byte IEEE floating point number”. |
text | El valor és un string, i es guarda utilitzant la codificació de la base de dades (UTF-8, UTF-16BE o UTF-16LE). |
blob | El valor és una seqüència de bytes, i es guarda tal qual. |
Pots veure que la taula dog ja forma part de la base de dades pets.db:

update table
A continuació tens una taula de gossos:
| name | age | breed |
|---|---|---|
| Trufa | 12 | Rough Collie |
| Pujol | 6 | Bulldog |
| Ketzu | 2 | Shiba Inu |
Afegeix aquestes dades a la base de dades (Browse Data):

En finalitzar, escriu els canvis al fitxer pets.db (Write Changes)
Tanca i torna a obrir l’aplicació.
Obre el fitxer pets.db.

Verifica que les dades s’han guardat correctament.
alter table
A continuació afegeix una columna owner a la taula dog:


Com que la base de dades no pots saber quins són els noms dels propietaris dels gossos que estan a la taula dog, els valors de la columna owner seran null.

Actualitza les dades de la taula dog amb els propietari dels gossos.
No està bé tenir gossos sense propietari 😾.
null
Un valor null vol dir que la dada no existeix o que no es coneix.
Per exemple, en aquesta taula dog, “Milou” no té propietari:
| name | age | breed | owner |
|---|---|---|---|
| Trufa | 12 | Rough Collie | David |
| Pujol | 6 | Bulldog | Nuria |
| Ketzu | 2 | Shiba Inu | Eva |
| Milou | 7 | Fox Terrier | null |
Això vol dir que Milou no té propietari? O potser serà en Tintín?

not null
Per defecte, una columna permet valors null.
Verifica que ara mateix pots afegir un gos sense nom 😾

Però en una taula, hi ha columnes que per disseny no poden tenir valors null.
Per exemple, pots decidir que no pots haver-hi gossos sense noms.
Modifica la taula dog per que la columna name no pugui tenir valors null (NN o not null):

Com que ara la fila 5 té un valor nul per la columna name, no pots modificar la condició de la columna name a not null.
Posa un nom al gos de raça “Retriever” i modifica la taula per no permetre gossos amb valor null per la columna name.
Com que la columna name és not null, per defecte el browser et posa un string buit per aquesta columna.
Si vols que el valor sigui null (prem el botó dret del ratolí 🐁):

L’aplicació no et deixa:

unique
En la nostra taula podem tenir gossos amb el mateix nom.
També pot passar que podem tindre gossos amb el mateix nom i el mateix propietari.
El més habitual és utilitzar un identificador extern per poder identificar un gos de manera única.
Modifica la taula dog afegint la columna reiac de tipus text, i guarda els canvis.
A continuació afegeix la restricció U (unique) a la columna reiac:

Un número REIAC (Registre d’Identificació d’Animals de Companyia) és un codi únic de 15 dígits numèrics que identifica cada gos a Espanya.
Per tant, és pot guardar en una columna de tipus integer o en un de tipus text.
El motiu d’utilitzar un tipus integer és:
- Ocupa menys espai en memòria
- És més eficient quan has de fer consultes.
El motiu d’utilitzar un tipus text és:
- Alguns números REIAC poden començar amb zeros (com 041000012345602), que es perdrien si s’emmagatzemen com a enter.
- El REIAC és un identificador, no un número amb el qual facis operacions matemàtiques
- És una pràctica estàndard emmagatzemar IDs/codis com a text
Escull el que creguis més adient 😺!
Ara, si intentes afegir un reiac duplicat, la base de dades no et deixa:

SQL
Les bases de dades SQL es diuen SQL perquè estan dissenyades per treballar amb SQL (Structured Query Language).
Al principi et pot semblar una mica molest, però tan aviat com descobreixes que pots copiar i enganxar, i demanar a una IA que t’escrigui el SQL que pertoca, segur que la teva opinió canvia a l’instant.
create table
Crea una taula owner amb una sentència SQL tal com es mostra al diagrama.

Tal com diu l’ajuda, pots executar la sentència SQL amb la combinació de tecles Ctrl + ⏎, o …
Un cop has executat la sentència SQL, pots veure que la taula owner ja forma part de la base de dades pets.db:

Però hem dit que ara tocava SQL 😾!
Pots veure el contingut de la taula amb un select:

insert into
A continuació afegeix dos propietaris a la taula owner:

Visualment el resultat són files, però en llenguatge natural són tuples:
('david', 'de mingo', '600112233', 'ddemingo@xtec.cat')('maria', 'dalmau', '630345623', 'maria.dalmau@gmail.com')Primer demana a SQLite que et mostri la descripció de la taula owner:

A continuació pregunta a una IA que t’escrigui el SQL que pertoca per afegir a la taula owner les dades que has demanat.
Ep! Si pots utilitzar IA et fan més gràcia les tuples! 😸
Activitat: Pets
La Llei de Benestar Animal estableix que “Seran obligatòriament objecte d’identificació, mitjançant microxip, els gossos, gats, furons, conills i èquids”.
Modifica el nom de la taula dog a pet, i afegeix una columna type per saber quin tipus de mascota és.

Afegeix uns quants gats 😺 i algun conill 🐇.
Afegeix una columna photo amb tipus blob per afegir una foto de la mascota.
Afegeix una foto a algunes mascotes.

Crea la taula visit per registrar les visites al veterinari (de les mascotes 😸).
Activitat: Store
Crea la base de dades store.db amb les taules client, product i order.
Afegeix unes quantes dades a cada taula.