Dissenyar les taules que ha de contenir la BBDD
By ajaimes / gener 16, 2026 / No hi ha comentaris
Objectiu de la tasca
Necessitava crear l’esquelet de la base de dades MySQL per a la nostra Intranet. Això vol dir dissenyar les taules que guardaran tota la informació: usuaris, tornejos, partides, xat, etc.
Per completar aquesta tasca, he utilitzat Claude (Anthropic) com a eina d’intel·ligència artificial. Claude m’ha ajudat a:
- Estructurar les taules de manera professional seguint les millors pràctiques
- Aplicar correctament la normalització fins a la Tercera Forma Normal (3FN)
- Generar documentació tècnica completa i visualitzacions
- Crear scripts SQL funcionals amb triggers i vistes
Les 10 taules que he creat
He organitzat la base de dades en 4 àrees funcionals:
1️⃣ Àrea d’usuaris
- rols: He creat aquesta taula per separar els tipus d’usuari (admin, jugador, espectador). Així, si en el futur volem afegir més rols o canviar permisos, no cal tocar la taula d’usuaris.
- usuaris: Aquí guardo tota la informació personal: nom, email, contrasenya (en hash bcrypt per seguretat), nick de joc, telèfon, etc. He posat l’email com a UNIQUE per evitar que algú es registri dues vegades.
2️⃣ Àrea de l’esdeveniment
- lan_party: Guarda les dades de cada LAN Party (nom, dates, localització, capacitat). He posat un control d’aforament amb els camps
capacitat_maximaiplaces_ocupades. - inscripcions: Aquesta és una taula intermèdia que relaciona usuaris amb LAN Parties. Cada fila representa una inscripció, i he afegit camps per controlar si han pagat i si han assistit realment.
3️⃣ Àrea de jocs i competicions
- jocs: Un catàleg de tots els jocs disponibles (League of Legends, CS2, Valorant…). He separat això en una taula independent per no repetir el nom del joc 50 vegades.
- tornejos: Cada torneig està vinculat a un joc i a una LAN Party. He inclòs camps com el format (eliminació directa, lliga, suís), màxim de participants i premis.
- participants_torneig: Taula intermèdia entre usuaris i tornejos. Aquí guardo la posició final de cada jugador i la seva puntuació.
- partides: Cada enfrontament dins d’un torneig. Guardo els 2 jugadors, el guanyador, les puntuacions i la ronda. Això em permet generar estadístiques i seguir el bracket.
4️⃣ Àrea de comunicació
- missatges_xat: Sistema de xat en temps real. Cada missatge té un autor, un contingut i un timestamp.
- notificacions: Avisos automàtics per informar els usuaris (per exemple: “La teva partida comença en 10 minuts”).
Decisions clau que he pres
- Per què INT AUTO_INCREMENT com a clau primària?
- És més eficient per fer JOINs
- Ocupa menys espai (4 bytes vs 150 bytes d’un email)
- Si algú canvia l’email, no afecta les relacions
- Per què separar jocs i tornejos?
- Evito repetir “League of Legends” 10 vegades
- Si el joc canvia de nom, només actualitzo 1 fila
- Evito errors de tipografia (“LoL”, “LOL”, “League of Legends”)
- Per què utilitzar ENUM per als estats?
- Evita errors de tipografia
- És més eficient que VARCHAR
- Les consultes són més segures
- Per què 3 foreign keys a usuaris des de partides?
- Cada partida necessita 2 jugadors (id_jugador1, id_jugador2)
- I 1 guanyador (id_guanyador)
- He afegit un CHECK per assegurar que el guanyador sigui un dels 2 jugadors

Conclusions
Aquest disseny em permetrà:
- Gestionar múltiples LAN Parties sense modificar l’estructura
- Escalar fàcilment (afegir nous jocs, rols, tornejos)
- Mantenir la integritat de les dades amb foreign keys
- Generar estadístiques i classificacions automàtiques
Resum del prompt utilitzat amb IA: “Dissenya una base de dades MySQL per a una Intranet de LAN Party que gestioni usuaris, tornejos, partides i xat. Necessito 10 taules normalitzades fins a 3FN amb documentació completa, justificacions, diagrama ER i script SQL executable.”
Fitxers entregats
He creat 3 fitxers:
- Document Word (35 pàgines): Documentació tècnica completa amb justificacions
- Diagrama HTML: Visualització interactiva de totes les taules i relacions
- Script SQL: Codi executable per crear tota la base de dades amb triggers i vistes
