diff --git a/docs/modelo-de-datos.md b/docs/modelo-de-datos.md index afccc4f..27c51a0 100644 --- a/docs/modelo-de-datos.md +++ b/docs/modelo-de-datos.md @@ -36,7 +36,7 @@ A eso se suma que nada se valida —`estilo: bolreo` no falla, la canción desaparece de su sección—, nada se consulta sin cargar el catálogo entero en memoria, y cambiar una coma exige reconstruir y desplegar. -Alcance: **41 tablas** (13 ya existen), **48 archivos** que migrar, **22 rutas** +Alcance: **49 tablas** (13 ya existen), **48 archivos** que migrar, **22 rutas** que hoy leen `$lib/content`. ## Decisiones transversales @@ -63,13 +63,43 @@ que hoy leen `$lib/content`. - **`cancion`** _(cambia)_ — album_id nulo en los singles; **el álbum «Singles» deja de existir como registro**, era un invento para pintar y se resuelve al consultar. letra, nota, inspiracion y traducción salen del YAML. +- **`cancion.version_de_id`** _(decidido)_ — **una versión es una fila de + `cancion`, no una tabla aparte.** Nulo en las principales. Se llegó aquí + descartando partir en `obra` y `grabacion`: en ese reparto el estilo y las + etiquetas colgarían de la obra, y una versión no podría tener los suyos —una + balada con arreglo de bolero no cabría—. Con una fila por versión, cualquier + campo puede cambiar. + + De regalo se arregla algo que estaba mal: **el disco pasa a ser de la fila**. + Hoy `album_id` y `numero` cuelgan del tema, así que la «Maqueta 2018» es el + corte 1 del álbum igual que la versión de estudio, y es falso. + + Cuatro cabos que hay que atar, o se vuelve en contra: + + 1. **Vista `cancion_principal`.** Cuatro funciones devuelven listas de + canciones y siete rutas las pintan, más los recuentos por estilo y por + etiqueta. Si a una se le olvida `version_de_id IS NULL`, el catálogo dice + veinticinco temas donde hay dieciocho y nadie lo nota. Lo normal es + consultar la vista; pedir versiones es lo que hay que escribir a propósito. + 2. **Un solo nivel, comprobado en la base.** Una autorreferencia admite ciclos + —A apunta a B y B a A— y una consulta recursiva sobre eso se cuelga. Se + ataja con una clave foránea compuesta contra una columna generada + `es_version`, sin triggers. + 3. **`ala_venta` solo en las principales**, y comprar la principal entrega + todas sus versiones. Es la regla que ya estaba escrita, ahora literal. + 4. **Los campos se copian al crear, no se heredan al leer.** Un nulo heredado + nunca se sabe si es «no lo sé» o «lo mismo de arriba». Y aquí copiar es + además lo correcto: la maqueta de 2018 no tiene la misma letra, le falta el + puente. + - **`persona`** _(nueva)_ — nombre, nombre_legal, ipi. Hoy autores e intérpretes son cadenas sueltas repetidas en cada archivo. - **`cancion_persona`** _(nueva)_ — rol (letra · musica · interprete · arreglos · produccion), orden. -- **`version`** _(cambia)_ — **el `isrc` se mueve aquí desde la canción**: el - ISRC identifica una grabación y cada arreglo es una grabación distinta. Que - esté en la canción es un fallo del modelo actual. +- ~~**`version`**~~ — **desaparece como tabla**: cada versión es una fila de + `cancion` con `version_de_id`. El `isrc` va en esa fila, no en la principal: + identifica una grabación, y cada arreglo es una grabación distinta. El `iswc` + es de la composición y se repite en la familia. - **`registro_obra`** _(cambia)_ — iswc, entidad, numero, editorial. 1:1 con la canción. - **`autoria`** _(cambia)_ — porcentaje `numeric(5,2)`, no entero: los repartos @@ -81,16 +111,55 @@ que hoy leen `$lib/content`. **dos tablas de enlaces y no una polimórfica**: una clave foránea de verdad vale más que ahorrarse una tabla. -### 2 · Taller y glosario +### 2 · Taller, géneros y glosario + +**Decidido: el catálogo de géneros aspira a ser completo** y se llena poco a +poco. Eso cambia el peso de esta área: la ficha de género deja de ser una +tarjeta y pasa a ser la pieza más rica del sitio, con su historia, sus +instrumentos, sus letristas y sus obras de referencia. - **`pais`** _(nueva)_ — código ISO 3166-1, nombre, gentilicio, region. -- **`genero`** _(nueva)_ — bolero, tango, cumbia. origen_lugar, origen_ano - (ordenable, hoy no lo es), compas, tempo, metrica, estructura, rima, - `temas text[]`, `rasgos text[]`, y **`padre_id` para la jerarquía**: sin ella, - «todas las variantes» es una lista plana de cien nombres sin relación. +- **`genero`** _(nueva)_ — bolero, tango, cumbia. **Solo lo corto y comparable + va en columnas**: compas, tempo, metrica, rima, origen_lugar, origen_ano + (ordenable, hoy no lo es). Eso es lo que se pone en una tabla para comparar + géneros. Y **`padre_id` para la jerarquía**: los subgéneros son sus hijos y el + género del que deriva es su padre, sin nada más. Sin jerarquía, «todas las + variantes» es una lista plana de cien nombres sin relación. +- **`genero_seccion`** _(nueva)_ — clave, titulo, cuerpo, orden. **Toda la prosa + de la ficha**: introducción, historia, estructura de las canciones, motivación + y temática. Y lo que surja mañana. Con una columna por bloque, en un mes hay + quince columnas y la mitad vacías; siendo secciones ordenadas, un apartado + nuevo no cuesta una migración. Es la respuesta a «y otros campos que puedan + surgir». - **`genero_pais`** _(nueva)_ — relacion: cuna · adoptado. La cumbia nace colombiana y se hace mexicana, peruana y argentina; el tango es de las dos orillas. Un solo país sería mentira. +- **`instrumento`** _(nueva)_ — slug, nombre, **familia** (cuerda · viento · + percusión · teclado · electrófono · voz) y subfamilia libre, pais_codigo, + descripcion, **afinacion**, `imagen_id` y `muestra_id` contra `medio` —el + sonido de muestra es un archivo como cualquier otro—, estado. +- **`genero_instrumento`** _(nueva)_ — con **importancia** (esencial · habitual · + ocasional) y **papel** («marca la clave», «lleva el bajo»). Sin eso, el tres + cubano y una trompeta ocasional pesarían igual en la ficha, y no es verdad. +- **`genero_persona`** _(nueva)_ — papel: letrista · compositor · interprete · + fundador. **No hay tabla `letrista`**: un letrista es una persona, y con dos + tablas la misma acabaría existiendo dos veces con distinta grafía el día que + colabore con alguien que además es figura de un género. `persona` gana los + campos biográficos: nacimiento, defuncion, pais_codigo, retrato_id, semblanza. +- **`obra_referencia`** + **`obra_referencia_persona`** _(nueva)_ — titulo, ano, + genero_id, nota, enlace, `cita`. **«Letras de referencia de un letrista» y + «canciones del género» son la misma entidad**, mirada desde un lado o desde el + otro. + + ⚠️ **No se alojan letras completas de terceros.** «Bésame mucho» tiene dueño y + lo tendrá durante décadas. Se cita título, autor, año y un fragmento breve al + amparo del derecho de cita —el mismo que invoca nuestro propio aviso legal— y + se enlaza a dónde escucharla. Por eso el campo se llama `cita` y es corto, no + `letra`. + +- **`cancion_genero`** _(nueva)_ — un tema propio escrito en ese género, aunque + en el catálogo viva bajo «baladas románticas». Es lo que permite que una ficha + enseñe obra propia además de la ajena. - **`capitulo`** _(cambia)_ — tipo (principio · ficha), genero_id solo en las fichas, cuerpo, estado. - **`termino`** _(nueva)_ — el glosario. termino único, categoria, `definicion` @@ -178,8 +247,9 @@ ya cargado. Seis decisiones de negocio. Cambiarlas después de cargar el contenido cuesta mucho más que ahora. -1. ¿Los géneros del taller aspiran a ser un catálogo completo? Hay ocho fichas; - «todas las variantes hispanoamericanas» son más de cien contando subvariantes. +1. ~~¿Los géneros del taller aspiran a ser un catálogo completo?~~ **Respondido: + sí, y se irá llenando poco a poco.** De ahí la jerarquía, las secciones y la + ficha ampliada. 2. ¿Quién escribe las fichas que faltan? Es musicología: un compás equivocado sale publicado con su nombre. 3. ¿El glosario se marca solo o a mano? «Clave» es un término del son y también