Sistemes basats en fitxers
Abans que existissin els sistemes gestors de bases de dades, les organitzacions emmagatzemaven la informació en fitxers. Entendre com funcionen aquests sistemes i quines eren les seves limitacions és essencial per comprendre per què es van crear els SGBD i quins problemes resolen.
Concepte de fitxer
Un fitxer és una seqüència de números binaris que organitza informació relacionada a un mateix aspecte, emmagatzemada en un suport físic (disc dur, cinta magnètica, memòria) i identificada per un nom.
Un fitxer conté registres (estructures lògiques que agrupen dades sobre una mateixa entitat) i cada registre conté camps (unitats elementals d'informació). Per exemple, un fitxer d'alumnes amb 10.000 registres té 10.000 entrades individuals.
FITXER CLIENTS.dat — Vista lògica
←─────────────────── camps ────────────────────────→
┌──────────────┬──────────────────┬─────────────────┬──────────┐
│ ID_CLIENT │ NOM │ TELEFON │ CIUTAT │
├──────────────┼──────────────────┼─────────────────┼──────────┤
Registre 1 │ 001 │ Maria Puig │ 972 123 456 │ Girona │
Registre 2 │ 002 │ Joan Mas │ 93 456 789 │ Barcelona│
Registre 3 │ 003 │ Anna Soler │ 977 654 321 │ Tarragona│
└──────────────┴──────────────────┴─────────────────┴──────────┘
flowchart TB
subgraph logic["CLIENTS.dat — Vista lògica"]
R1["Registre 1\n001 · Maria Puig · 972 123 456 · Girona"]
R2["Registre 2\n002 · Joan Mas · 93 456 789 · Barcelona"]
R3["Registre 3\n003 · Anna Soler · 977 654 321 · Tarragona"]
R1 --- R2 --- R3
end
subgraph disc["Disc dur — Vista física (Cilindre 3, Pista 1)"]
S1["Sector 1 · 512 bytes\n001 · Maria Puig · 972 123 456 · Girona"]
S2["Sector 2 · 512 bytes\n002 · Joan Mas · 93 456 789 · Barcelona"]
S3["Sector 3 · 512 bytes\n003 · Anna Soler · 977 654 321 · Tarragona"]
S1 --- S2 --- S3
end
R1 -->|"s'emmagatzema a"| S1
R2 --> S2
R3 --> S3
style logic fill:#1e3a5f,color:#e2e8f0,stroke:#3b82f6
style disc fill:#1a2e1a,color:#e2e8f0,stroke:#22c55e
style R1 fill:#1d4ed8,color:#ffffff,stroke:#3b82f6
style R2 fill:#1d4ed8,color:#ffffff,stroke:#3b82f6
style R3 fill:#1d4ed8,color:#ffffff,stroke:#3b82f6
style S1 fill:#166534,color:#ffffff,stroke:#22c55e
style S2 fill:#166534,color:#ffffff,stroke:#22c55e
style S3 fill:#166534,color:#ffffff,stroke:#22c55e
Tipus de fitxers per format
Una primera classificació dels fitxers es fa pel seu format intern:
Fitxers de text
El contingut és llegible directament per un ésser humà amb qualsevol editor. Els caràcters s'emmagatzemen en codificacions com ASCII o UTF-8.
Exemples: .txt, .ini, .html, .csv, .json, .xml
Avui en dia, formats com CSV, JSON i XML s'utilitzen massivament com a formats d'intercanvi de dades entre sistemes.
Fitxers binaris
El contingut no és llegible directament; requereix programari específic per interpretar-lo. La informació s'emmagatzema de manera compacta i eficient.
Exemples: .jpg, .mp3, .zip, .parquet, .avro
Formats com Parquet i Avro s'usen en pipelines de Big Data per emmagatzemar grans volums de dades estructurades de manera molt eficient.
Formats d'intercanvi moderns
CSV, JSON i XML han sobreviscut a l'era dels SGBD perquè resolen un problema diferent: transferir dades entre sistemes heterogenis. Quan exportes dades d'una base de dades a un full de càlcul o envies dades a una API externa, probablement usaràs un d'aquests formats.
Tipus de fitxers segons la funció
Fitxers mestres
Contenen informació permanent o semipermanent sobre les entitats principals del sistema. S'actualitzen periòdicament i representen l'estat actual.
Exemples: fitxer de clients, fitxer d'empleats, fitxer d'articles d'inventari.
Fitxers de moviments (transaccionals)
Contenen els canvis que s'han produït en un període determinat. Serveixen per actualitzar el fitxer mestre i solen tenir vida curta (un dia, una setmana).
Exemples: comandes del dia, factures del mes, moviments bancaris de la jornada.
Fitxers d'historial
Arxiven les dades antigues per a consulta posterior o auditoria. No s'actualitzen; creixen de manera acumulativa.
Exemples: historial de vendes dels darrers 5 anys, registre de canvis de preu.
Fitxers de taula o referència
Contenen dades de suport que s'utilitzen per a càlculs o validacions. Canvien rarament.
Exemples: taula de codis postals, taula de tipus d'IVA, taula de països.
Fitxers de treball (temporals)
Es creen durant el processament i s'eliminen un cop acabada l'operació. S'utilitzen com a suport intermedi.
Exemples: fitxer d'ordenació temporal, resultat parcial d'una fusió.
Operacions sobre fitxers
Independentment de l'organització, sobre qualsevol fitxer es poden realitzar les operacions bàsiques següents:
| Operació | Descripció |
|---|---|
| Obrir / tancar | Estableix i allibera el canal d'accés entre el programa i el fitxer |
| Llegir | Obté el valor d'un o més registres del fitxer |
| Escriure | Afegeix o modifica registres al fitxer |
| Posicionament | Mou el punter de lectura/escriptura a un registre concret |
| Fragmentació / compactació | Gestiona l'espai buit generat per les eliminacions |
| Compressió | Redueix la mida del fitxer per estalviar espai d'emmagatzematge |
| Xifratge | Protegeix el contingut del fitxer davant accessos no autoritzats |
Fragmentació
Quan s'eliminen registres d'un fitxer, l'espai que ocupaven queda buit però no és reutilitza automàticament. Amb el temps, el fitxer es fragmenta i el rendiment es degrada. La compactació és el procés de reorganitzar el fitxer per eliminar aquests forats. En els SGBD moderns, aquest procés es gestiona automàticament (VACUUM a PostgreSQL, OPTIMIZE TABLE a MySQL).
Organitzacions de fitxers
L'organització d'un fitxer determina com s'emmagatzemen físicament els registres al suport i, per tant, com s'hi pot accedir.
Organització seqüencial
Els registres s'emmagatzemen en ordre d'arribada, un darrere l'altre. Per trobar un registre concret cal recórrer tots els anteriors. Històricament era l'única opció amb cintes magnètiques.
Existeixen dues variants de fitxers seqüencials:
Seqüencial encadenat: cada registre conté un punter a l'adreça del registre següent. Permet una certa flexibilitat en l'ordenació lògica sense moure físicament els registres.
Seqüencial indexat: estructura de doble zona — una zona de dades seqüencial i una zona d'índex separada que funciona com un índex de continguts, permetent localitzar registres sense recórrer tot el fitxer.
ZONA D'ÍNDEX ZONA DE DADES
┌─────────────┐ ┌──────────────────────────┐
│ Clau | Pos │ │ [R1] [R2] [R3] ... [RN] │
│ 001 | 0 │──────▶│ │
│ 050 | 49 │ └──────────────────────────┘
│ 100 | 99 │
└─────────────┘
| Avantatge | Inconvenient |
|---|---|
| Simple d'implementar | Accés lent (cal llegir des del principi) |
| Aprofita bé la cinta magnètica | Inserció i eliminació costoses |
| Adequat per a processament per lots | No permet accés directe pur |
Quan s'usa: processament per lots (batch), còpies de seguretat, generació d'informes.
Organització directa o aleatòria (hash)
La posició física del registre es calcula a partir d'una funció de dispersió (hash) aplicada a la clau del registre. Permet accedir directament a qualsevol registre sense recórrer els anteriors.
| Avantatge | Inconvenient |
|---|---|
| Accés molt ràpid per clau | Pot haver col·lisions (dues claus → mateixa posició) |
| Adequat per a consultes puntuals | No permet accés seqüencial ordenat |
| Inserció ràpida | La funció hash s'ha de dissenyar bé |
Quan s'usa: taules de cerca, fitxers d'índex, operacions de consulta puntual per clau.
Organització indexada (ISAM)
Combina l'accés seqüencial i el directe. El fitxer conté les dades en ordre seqüencial i un índex separat que mapeja les claus a les posicions físiques.
ÍNDEX FITXER DE DADES
┌────┬─────────┐ ┌────────────────────────────────┐
│Clau│ Posició │ │ Pos 0: [001, Maria, Girona] │
├────┼─────────┤ │ Pos 1: [002, Joan, Barcelona] │
│ 001│ 0 │───────▶ │ Pos 2: [003, Anna, Tarragona] │
│ 002│ 1 │ │ ... │
│ 003│ 2 │ └─────────────────────────────────┘
└────┴─────────┘
| Avantatge | Inconvenient |
|---|---|
| Accés ràpid per clau (via índex) | L'índex ocupa espai addicional |
| Accés seqüencial possible | L'índex s'ha de mantenir actualitzat |
| Adequat per a grans volums | rendiment degradat amb moltes insercions/esborrats |
Quan s'usa: aplicacions de gestió clàssiques (comptabilitat, nòmines), arxius grans amb consultes variades.
Organització seqüencial indexada (VSAM)
Evolució de l'ISAM, molt usada en sistemes IBM mainframe. Utilitza una estructura d'índex en arbre (B-tree) que és manté equilibrat automàticament, evitant la degradació del rendiment en fitxers amb moltes modificacions.
Mètodes d'accés
L'organització del fitxer condiciona els mètodes d'accés disponibles:
| Organització | Accés seqüencial | Accés directe | Accés per índex |
|---|---|---|---|
| Seqüencial | Sí | No | No |
| Directa (hash) | Possible (ineficient) | Sí | No |
| Indexada (ISAM/VSAM) | Sí | Sí | Sí |
Limitacions dels sistemes basats en fitxers
Els sistemes de fitxers van ser adequats durant dècades, però presentaven problemes greus que van motivar la creació dels SGBD.
1. Acoblament físic-lògic (dependència dades-programes)
Cada aplicació estava íntimament lligada a l'estructura física dels fitxers que feia servir. Si es canviava el format d'un fitxer (per exemple, s'afegía un camp nou), calia modificar tots els programes que hi accedien. Això feia que compartir dades entre aplicacions fos pràcticament impossible i que qualsevol canvi fos costosíssim.
Aplicació A ──── fitxer_clients_A.dat (format propi)
Aplicació B ──── fitxer_clients_B.dat (format diferent!)
Aplicació C ──── fitxer_clients_C.dat (format diferent!)
↑ Cap de les tres pot llegir les dades de les altres
2. Redundància i inconsistència de dades
Cada aplicació tenia els seus propis fitxers. La mateixa informació (p. ex., l'adreça d'un client) apareixia duplicada en múltiples fitxers, amb el risc que s'actualitzés en un lloc però no en un altre.
fitxer_vendes.dat → client 001: "Carrer Major 5, Blanes"
fitxer_factures.dat → client 001: "Carrer Major 7, Blanes" ← inconsistent!
3. Dificultat per accedir a les dades
Cada nova consulta requeria escriure un nou programa. No existia un llenguatge de consulta estàndard; calia codi específic per a cada accés. Obtenir una llista de clients de Girona que haguessin comprat el mes passat implicava dies de programació.
4. Aïllament de dades
Les dades estaven disperses en formats heterogenis. Relacionar informació de fitxers diferents era complex i propens a errors.
5. Problemes d'integritat
Era difícil garantir restriccions com "l'edat d'un empleat ha de ser entre 16 i 70 anys". Calia escriure codi de validació en cada programa que hi accedís, sense garantia que tots els programes ho fessin.
6. Problemes d'atomicitat
Si una operació fallava a mig fer (p. ex., transferència bancària: s'ha deduït l'import del compte origen però no s'ha afegit al compte destí), no hi havia mecanisme automàtic per tornar enrere els canvis parcialment aplicats.
7. Anomalies d'accés concurrent
Quan dos programes llegien i escrivien el mateix fitxer simultàniament, les dades podien corrompre's sense mecanismes de control d'accés concurrent.
8. Problemes de seguretat
Els sistemes de fitxers oferien control d'accés molt bàsic (lectura/escriptura a nivell de fitxer sencer). No era possible restringir l'accés a camps o registres concrets (p. ex., que un empleat pugui veure el nom dels col·legues però no el salari).
De fitxers a bases de dades
flowchart LR
A["Sistemes de<br/>fitxers tradicionals<br/>(anys 50-60)"]
B["SGBD jeràrquics<br/>i en xarxa<br/>(anys 60-70)"]
C["SGBD relacionals<br/>(anys 70-90)"]
D["SGBD actuals<br/>+ NoSQL<br/>(anys 2000-)"]
A -->|"Redundancia,<br/>acoblament"| B
B -->|"Complexitat,<br/>rigidesa"| C
C -->|"Escalabilitat,<br/>Big Data"| D
style A fill:#6b7280,color:#fff,stroke:#4b5563
style B fill:#3b82f6,color:#fff,stroke:#2563eb
style C fill:#1d4ed8,color:#fff,stroke:#1e40af
style D fill:#312e81,color:#fff,stroke:#1e1b4b
Els Sistemes Gestors de Bases de Dades (SGBD) van néixer precisament per resoldre totes aquestes limitacions. Una base de dades es pot definir com un conjunt de dades interrelacionades, amb característiques d'integritat i redundància mínima, accessibles per diversos usuaris i aplicacions.
Avantatges del SGBD respecte als fitxers
| Problema del fitxer | Solució del SGBD |
|---|---|
| Acoblament físic-lògic | Independència dades-programes (3 nivells ANSI/SPARC) |
| Redundància | Disseny normalitzat (una sola font de veritat) |
| Inconsistència | Restriccions d'integritat referencial |
| Accés complex | Llenguatge SQL estàndard |
| Atomicitat | Transaccions (propietats ACID) |
| Concurrència | Gestió de bloquejos i MVCC |
| Seguretat | Control d'accés granular (usuari, taula, columna, fila) |
| Documentació | Catàleg del sistema (metadades) |
Desavantatges del SGBD
L'adopció d'un SGBD també té costos que cal considerar:
- Cost d'instal·lació i llicències elevat per a productes comercials (Oracle, SQL Server)
- Requereix personal qualificat (DBA) per a la instal·lació, configuració i manteniment
- Implementació llarga i costosa: migrar dades de fitxers a un SGBD és un projecte complex
- Manca d'estàndards universals: tot i que SQL és estàndard, cada SGBD té extensions i comportaments propis
AC0372/01/01 — Miniactivitat
RA1 · CA1.1, CA1.4
Pensa en una empresa de comerç electrònic que gestiona les comandes amb fitxers separats per a clients, productes i comandes. Identifica almenys 3 problemes concrets que podrien sorgir amb aquest enfocament i com els resoldria un SGBD.
Protecció de dades personals
Quan les bases de dades emmagatzemen informació sobre persones físiques, entren en joc les regulacions de protecció de dades. Com a futurs professionals que treballarem amb dades, és imprescindible conèixer el marc legal.
RGPD — Reglament General de Protecció de Dades
El Reglament (UE) 2016/679 (RGPD o GDPR en anglès) és el marc europeu de protecció de dades personals. S'aplica a qualsevol organització que tracti dades de residents de la UE.
Dades especialment sensibles que requereixen consentiment explícit:
- Origen racial o ètnic
- Ideologia política o creences religioses
- Afiliació sindical
- Orientació sexual
- Informació sobre salut
LOPDGDD — Llei Orgànica espanyola
La Llei Orgànica 3/2018 adapta el RGPD al context espanyol i incorpora drets digitals específics.
Obligacions principals per als professionals de dades
| Obligació | Descripció |
|---|---|
| Consentiment | Obtenir consentiment explícit i informat abans de recollir dades |
| Política de privacitat | Informar els usuaris de com s'usaran i protegiran les seves dades |
| Drets dels interessats | Garantir l'accés, rectificació, supressió i portabilitat de les dades |
| Seguretat | Implementar mesures adequades (xifratge, anonimització) |
| EIPD | Avaluació d'Impacte en Protecció de Dades per a tractaments d'alt risc |
| DPO | Designar Delegat de Protecció de Dades quan sigui obligatori |
| Registre | Documentar totes les activitats de tractament |
| Notificació de bretxes | Comunicar incidents a l'AEPD en un màxim de 72 hores |
Sancions
Les infraccions del RGPD poden comportar multes de fins a 20 milions d'euros o el 4% de la facturació anual global (el que sigui més alt). L'Agència Espanyola de Protecció de Dades (AEPD) és l'organisme supervisor a Espanya.
Responsabilitat professional
Com a administradors de bases de dades, teniu accés directe a dades potencialment sensibles de milers o milions de persones. L'ús indegut d'aquestes dades no és només una infracció legal sinó també una responsabilitat ètica i, en casos greus, pot constituir un delicte penal. El secret professional s'aplica durant i després de la relació laboral.
Avui en dia
Tot i que els SGBD han substituït els sistemes de fitxers per a la gestió de dades estructurades, els fitxers segueixen presents: CSV, JSON, XML i Parquet s'usen com a formats d'intercanvi i en pipelines de dades (ETL). La diferència és que ara els gestiona un SGBD o un motor analític, no programes ad-hoc.
Confusió habitual
El sistema de fitxers del sistema operatiu (NTFS, ext4, APFS) no és el que estem descrivint aquí. Els SGBD també usen el sistema de fitxers del SO per emmagatzemar físicament les dades, però ofereixen una capa d'abstracció molt superior per damunt.