{"id":1424,"date":"2026-01-29T08:17:25","date_gmt":"2026-01-29T07:17:25","guid":{"rendered":"https:\/\/ahassan.inscastellbisbal.net\/?page_id=1424"},"modified":"2026-01-29T10:37:02","modified_gmt":"2026-01-29T09:37:02","slug":"definir-les-claus-primaries-per-vincular-tasques","status":"publish","type":"page","link":"https:\/\/ahassan.inscastellbisbal.net\/?page_id=1424","title":{"rendered":"Definir les claus prim\u00e1ries per vincular tasques"},"content":{"rendered":"\n<p>Dissenyar una base de dades per a la gesti\u00f3 de tasques no \u00e9s nom\u00e9s crear taules; \u00e9s construir el teixit que mantindr\u00e0 la coher\u00e8ncia de la teva informaci\u00f3. Una estructura mal definida \u00e9s una recepta per a dades duplicades o, pitjor, tasques &#8220;\u00f2rfenes&#8221; que ning\u00fa sap d&#8217;on han sortit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Definici\u00f3 del Model Relacional<\/h2>\n\n\n\n<p>Per vincular tasques de manera efica\u00e7, necessitem tres pilars: <strong>Usuaris<\/strong>, <strong>Projectes<\/strong> i <strong>Tasques<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Taula: <code>Usuaris<\/code><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PK: <\/strong><code>id_usuari<\/code><strong> (INT, Auto-increment)<\/strong>: Un identificador num\u00e8ric \u00fanic.\n<ul class=\"wp-block-list\">\n<li><em>Justificaci\u00f3:<\/em> Utilitzem una clau subrogada (id) en lloc del correu electr\u00f2nic com a PK perqu\u00e8 els indexs num\u00e8rics s\u00f3n m\u00e9s r\u00e0pids i els correus poden canviar, cosa que trencaria les relacions si fossin PK.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Taula: <code>Projectes<\/code><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PK: <code>id_projecte<\/code> (INT, Auto-increment): Identificador \u00fanic del projecte.<\/li>\n\n\n\n<li><strong>FK: <\/strong><code>id_creador<\/code><strong> (<\/strong>References <code>Usuaris.id_usuari<\/code><strong>)<\/strong>: Qui ha creat el projecte.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Taula: <code>Tasques<\/code><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PK: <\/strong><code>id_tasca<\/code> <strong>(INT, Auto-increment)<\/strong>: Identificador \u00fanic de la tasca.<\/li>\n\n\n\n<li><strong>FK: <\/strong><code>id_projecte<\/code> <strong>(References <code>Projectes.<\/code><\/strong><code>id_projecte<\/code><strong>)<\/strong>: Vincula la tasca a un context.<\/li>\n\n\n\n<li><strong>FK: <\/strong><code>id_assignat<\/code><strong> (References <code>Usuaris.<\/code><\/strong><code>id_usuari<\/code><strong>)<\/strong>: L&#8217;usuari responsable de l&#8217;execuci\u00f3.<\/li>\n\n\n\n<li><strong>FK: <\/strong><code>id_pare<\/code> <strong>(References <code>Tasques.<\/code><\/strong><code>id_tasca<\/code>, Nullable<strong>)<\/strong>: Per permetre sub-tasques (relaci\u00f3 recursiva).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. Justificaci\u00f3 t\u00e8cnica: Per qu\u00e8 aquestes claus?<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td>Criteri<\/td><td>Descripci\u00f3<\/td><\/tr><\/thead><tbody><tr><td><strong>Integritat Referencial<\/strong><\/td><td>Les <strong>FK<\/strong> impedeixen que assignis una tasca a un projecte que no existeix o a un usuari que ha estat esborrat.<\/td><\/tr><tr><td><strong>Unicitat<\/strong><\/td><td>Les <strong>PK<\/strong> garanteixen que cada tasca sigui una entitat at\u00f2mica. Encara que dues tasques es diguin &#8220;Revisar pressupost&#8221;, el seu ID les diferencia sense error possible.<\/td><\/tr><tr><td><strong>Funcionalitat Real<\/strong><\/td><td>La relaci\u00f3 <strong>FK <\/strong><code>id_pare<\/code> dins de la mateixa taula de tasques permet jerarquies infinites, essencial en metodologies com Agile o GTD.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">3. Restriccions (Constraints) i \u00cdndexs<\/h2>\n\n\n\n<p>Perqu\u00e8 el sistema no es degradi amb el temps, hem d&#8217;aplicar regles estrictes:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Restricci\u00f3 <\/strong><code>ON DELETE CASCADE<\/code>: En la FK de <code>id_projecte<\/code> dins de <code>Tasques<\/code>. Si s&#8217;esborra un projecte, totes les seves tasques han de desapar\u00e8ixer. No volem dades escombraria.<\/li>\n\n\n\n<li><strong>Restricci\u00f3 <\/strong><code>NOT NULL<\/code>: Tant <code>id_projecte<\/code> com el t\u00edtol de la tasca han de ser obligatoris. Una tasca &#8220;al buit&#8221; no \u00e9s operativa.<\/li>\n\n\n\n<li><strong>\u00cdndexs (Indexes)<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Crear un \u00edndex a <code>Tasques.id_assignat<\/code>.<\/li>\n\n\n\n<li>Crear un \u00edndex a <code>Tasques.estat<\/code>.<\/li>\n\n\n\n<li><em>Per qu\u00e8?<\/em> Les consultes m\u00e9s habituals seran &#8220;Quines tasques tinc jo?&#8221; o &#8220;Quines tasques estan pendents?&#8221;. Sense \u00edndexs, la base de dades hauria de llegir tota la taula cada vegada.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">4. Casos d&#8217;\u00fas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Vincular tasques a una fita (Milestone):<\/strong> Si afegeixes una taula de <code>Fites<\/code>, la FK aniria a la taula <code>Tasques<\/code>. Aix\u00f2 permet agrupar tasques cronol\u00f2gicament.<\/li>\n\n\n\n<li><strong>Tra\u00e7abilitat de responsabilitat:<\/strong> Gr\u00e0cies a la FK <code>id_assignat<\/code>, el sistema pot enviar notificacions autom\u00e0tiques nom\u00e9s a l&#8217;usuari implicat quan la tasca canvia d&#8217;estat.<\/li>\n\n\n\n<li><strong>Subtasques:<\/strong> En definir la FK <code>id_pare<\/code>, pots crear una estructura d&#8217;arbre. Una tasca &#8220;Preparar esdeveniment&#8221; (ID 10) pot tenir subtasques amb <code>id_pare = 10<\/code> (Llogar sala, Contractar c\u00e0tering, etc.).<\/li>\n<\/ul>\n\n\n\n<p>Aqu\u00ed teniu la <strong>taula<\/strong> de <strong>claus<\/strong> <strong>prim\u00e0ries<\/strong> per vincular <strong>tasques<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"465\" src=\"https:\/\/ahassan.inscastellbisbal.net\/wp-content\/uploads\/2026\/01\/Sin-titulo-1024x465.jpg\" alt=\"\" class=\"wp-image-1430\" srcset=\"https:\/\/ahassan.inscastellbisbal.net\/wp-content\/uploads\/2026\/01\/Sin-titulo-1024x465.jpg 1024w, https:\/\/ahassan.inscastellbisbal.net\/wp-content\/uploads\/2026\/01\/Sin-titulo-300x136.jpg 300w, https:\/\/ahassan.inscastellbisbal.net\/wp-content\/uploads\/2026\/01\/Sin-titulo-768x349.jpg 768w, https:\/\/ahassan.inscastellbisbal.net\/wp-content\/uploads\/2026\/01\/Sin-titulo.jpg 1483w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<div class=\"wpforms-container wpforms-container-full wpforms-block wpforms-block-32a7088d-8e12-4c8e-9c5e-f84a0cb0a3dd\" id=\"wpforms-764\"><form id=\"wpforms-form-764\" class=\"wpforms-validate wpforms-form\" data-formid=\"764\" method=\"post\" enctype=\"multipart\/form-data\" action=\"\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F1424\" data-token=\"0bed34a744a676e1df5823f5038439b0\" data-token-time=\"1778161466\"><noscript class=\"wpforms-error-noscript\">Activeu el JavaScript al navegador per a poder completar el formulari.<\/noscript><div class=\"wpforms-field-container\"><div id=\"wpforms-764-field_0-container\" class=\"wpforms-field wpforms-field-name wpforms-one-half wpforms-first\" data-field-id=\"0\"><label class=\"wpforms-field-label wpforms-label-hide\" for=\"wpforms-764-field_0\">Name <span class=\"wpforms-required-label\">*<\/span><\/label><input type=\"text\" id=\"wpforms-764-field_0\" class=\"wpforms-field-large wpforms-field-required\" name=\"wpforms[fields][0]\" placeholder=\"Your Name\" required><\/div><div id=\"wpforms-764-field_3-container\" class=\"wpforms-field wpforms-field-email wpforms-one-half\" data-field-id=\"3\"><label class=\"wpforms-field-label wpforms-label-hide\" for=\"wpforms-764-field_3\">Email <span class=\"wpforms-required-label\">*<\/span><\/label><input type=\"email\" id=\"wpforms-764-field_3\" class=\"wpforms-field-large wpforms-field-required\" name=\"wpforms[fields][3]\" placeholder=\"Your Email\" spellcheck=\"false\" required><\/div><div id=\"wpforms-764-field_4-container\" class=\"wpforms-field wpforms-field-text\" data-field-id=\"4\"><label class=\"wpforms-field-label wpforms-label-hide\" for=\"wpforms-764-field_4\">Subject<\/label><input type=\"text\" id=\"wpforms-764-field_4\" class=\"wpforms-field-large\" name=\"wpforms[fields][4]\" placeholder=\"Subject\" ><\/div><div id=\"wpforms-764-field_2-container\" class=\"wpforms-field wpforms-field-textarea\" data-field-id=\"2\"><label class=\"wpforms-field-label wpforms-label-hide\" for=\"wpforms-764-field_2\">Message <span class=\"wpforms-required-label\">*<\/span><\/label><textarea id=\"wpforms-764-field_2\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][2]\" placeholder=\"Your Message\" required><\/textarea><\/div><\/div><!-- .wpforms-field-container --><div class=\"wpforms-submit-container\" ><input type=\"hidden\" name=\"wpforms[id]\" value=\"764\"><input type=\"hidden\" name=\"page_title\" value=\"\"><input type=\"hidden\" name=\"page_url\" value=\"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages\/1424\"><input type=\"hidden\" name=\"url_referer\" value=\"\"><button type=\"submit\" name=\"wpforms[submit]\" id=\"wpforms-submit-764\" class=\"wpforms-submit\" data-alt-text=\"Sending...\" data-submit-text=\"Send message\" aria-live=\"assertive\" value=\"wpforms-submit\">Send message<\/button><\/div><\/form><\/div>  <!-- .wpforms-container -->\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dissenyar una base de dades per a la gesti\u00f3 de tasques no \u00e9s nom\u00e9s crear taules; \u00e9s construir el teixit que mantindr\u00e0 la coher\u00e8ncia de la teva informaci\u00f3. Una estructura mal definida \u00e9s una recepta per a dades duplicades o, pitjor, tasques &#8220;\u00f2rfenes&#8221; que ning\u00fa sap d&#8217;on han sortit. 1. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1381,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1424","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages\/1424","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1424"}],"version-history":[{"count":10,"href":"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages\/1424\/revisions"}],"predecessor-version":[{"id":1471,"href":"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages\/1424\/revisions\/1471"}],"up":[{"embeddable":true,"href":"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=\/wp\/v2\/pages\/1381"}],"wp:attachment":[{"href":"https:\/\/ahassan.inscastellbisbal.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}