Esquema de la base de datos

Visión general

La base de datos EleccionesDB utiliza PostgreSQL y contiene 9 tablas y 1 tipo ENUM que almacenan datos electorales españoles desde 1977.

La estructura se organiza en tres capas:

  1. Catálogos: tipos de elección, territorios, partidos y agrupaciones.
  2. Resultados territoriales: resúmenes de participación y censo por territorio y elección.
  3. Votos: desglose de votos y representantes por partido, territorio y elección.

Diagrama entidad-relación

erDiagram
    tipos_eleccion {
        VARCHAR codigo PK
        VARCHAR descripcion
    }

    elecciones {
        INT id PK
        VARCHAR tipo_eleccion FK
        CHAR year
        CHAR mes
        CHAR dia
        DATE fecha
        CHAR codigo_ccaa
        SMALLINT numero_vuelta
        VARCHAR descripcion
        VARCHAR ambito
        VARCHAR slug
    }

    territorios {
        INT id PK
        territorio_tipo tipo
        CHAR codigo_ccaa
        CHAR codigo_provincia
        CHAR codigo_municipio
        CHAR codigo_distrito
        CHAR codigo_seccion
        CHAR codigo_circunscripcion
        VARCHAR nombre
        VARCHAR codigo_completo
        INT parent_id FK
    }

    partidos_recode {
        INT id PK
        VARCHAR partido_recode
        VARCHAR agrupacion
        VARCHAR color
    }

    partidos {
        INT id PK
        INT partido_recode_id FK
        VARCHAR siglas
        VARCHAR denominacion
    }

    resumen_territorial {
        INT id PK
        INT eleccion_id FK
        INT territorio_id FK
        INT censo_ine
        INT participacion_1
        INT participacion_2
        INT participacion_3
        INT votos_validos
        INT abstenciones
        INT votos_blancos
        INT votos_nulos
        INT nrepresentantes
    }

    votos_territoriales {
        INT id PK
        INT eleccion_id FK
        INT territorio_id FK
        INT partido_id FK
        INT votos
        INT representantes
    }

    resumen_cera {
        INT id PK
        INT eleccion_id FK
        INT territorio_id FK
        INT censo_ine
        INT votos_validos
        INT abstenciones
        INT votos_blancos
        INT votos_nulos
    }

    votos_cera {
        INT id PK
        INT eleccion_id FK
        INT territorio_id FK
        INT partido_id FK
        INT votos
    }

    tipos_eleccion ||--o{ elecciones : "codigo"
    elecciones ||--o{ resumen_territorial : "eleccion_id"
    elecciones ||--o{ votos_territoriales : "eleccion_id"
    elecciones ||--o{ resumen_cera : "eleccion_id"
    elecciones ||--o{ votos_cera : "eleccion_id"
    territorios ||--o{ resumen_territorial : "territorio_id"
    territorios ||--o{ votos_territoriales : "territorio_id"
    territorios ||--o{ resumen_cera : "territorio_id"
    territorios ||--o{ votos_cera : "territorio_id"
    territorios ||--o{ territorios : "parent_id"
    partidos_recode ||--o{ partidos : "partido_recode_id"
    partidos ||--o{ votos_territoriales : "partido_id"
    partidos ||--o{ votos_cera : "partido_id"

Descripción de las tablas

tipos_eleccion — Catálogo de tipos de elección

Columna Tipo Descripción
codigo VARCHAR(1) PK Código identificador (G, A, L, E, S)
descripcion VARCHAR(100) Nombre del tipo (Congreso, Autonómicas, Locales, Europeas, Senado)

elecciones — Convocatorias electorales

Columna Tipo Descripción
id INT PK Identificador único
tipo_eleccion VARCHAR(1) FK Código del tipo de elección
year CHAR(4) Año
mes CHAR(2) Mes (con cero a la izquierda)
dia CHAR(2) Día
fecha DATE Fecha completa (puede ser null)
codigo_ccaa CHAR(2) Código CCAA (para autonómicas; 99 = nacional)
numero_vuelta SMALLINT Número de vuelta (defecto: 1)
descripcion VARCHAR(255) Descripción legible
ambito VARCHAR(50) Ámbito: Nacional, Autonómico, Municipal…
slug VARCHAR(50) Slug para URLs

Restricción única: (tipo_eleccion, year, mes, codigo_ccaa, numero_vuelta)

territorios — Estructura territorial jerárquica

Columna Tipo Descripción
id INT PK Identificador único
tipo territorio_tipo ENUM Tipo: ccaa, provincia, municipio, distrito, seccion, circunscripcion, cera
codigo_ccaa CHAR(2) Código de comunidad autónoma
codigo_provincia CHAR(2) Código de provincia
codigo_municipio CHAR(3) Código de municipio
codigo_distrito CHAR(2) Código de distrito
codigo_seccion CHAR(4) Código de sección censal
codigo_circunscripcion CHAR(3) Código de circunscripción
nombre VARCHAR(255) Nombre del territorio
codigo_completo VARCHAR(13) Código compuesto completo
parent_id INT FK Referencia al territorio padre (auto-referencial)

La jerarquía es: CCAA → Provincia → Municipio → Distrito → Sección censal.

partidos_recode — Agrupaciones lógicas de partidos

Columna Tipo Descripción
id INT PK Identificador único
partido_recode VARCHAR(50) Nombre de la agrupación (único)
agrupacion VARCHAR(50) Familia política (ej: AP/PP, PCE/IU)
color VARCHAR(7) Color hexadecimal para visualización

partidos — Partidos políticos

Columna Tipo Descripción
id INT PK Identificador único
partido_recode_id INT FK Referencia a la agrupación (puede ser null)
siglas VARCHAR(255) Siglas del partido
denominacion VARCHAR(255) Nombre completo

Restricción única: (siglas, denominacion)

resumen_territorial — Resúmenes de participación y censo

Columna Tipo Descripción
id INT PK Identificador único
eleccion_id INT FK Referencia a la elección
territorio_id INT FK Referencia al territorio
censo_ine INT Censo electoral (INE)
participacion_1 INT Avance de participación 1
participacion_2 INT Avance de participación 2
participacion_3 INT Avance de participación 3 (puede ser null)
votos_validos INT Total de votos válidos
abstenciones INT Abstenciones
votos_blancos INT Votos en blanco
votos_nulos INT Votos nulos
nrepresentantes INT Representantes a elegir

Restricción única: (eleccion_id, territorio_id)

votos_territoriales — Votos por partido y territorio

Columna Tipo Descripción
id INT PK Identificador único
eleccion_id INT FK Referencia a la elección
territorio_id INT FK Referencia al territorio
partido_id INT FK Referencia al partido
votos INT Número de votos
representantes INT Representantes obtenidos

Restricción única: (eleccion_id, territorio_id, partido_id)

resumen_cera — Resúmenes CERA (votantes en el extranjero)

Columna Tipo Descripción
id INT PK Identificador único
eleccion_id INT FK Referencia a la elección
territorio_id INT FK Referencia a la circunscripción/provincia CERA
censo_ine INT Censo electoral CERA
votos_validos INT Votos válidos
abstenciones INT Abstenciones
votos_blancos INT Votos en blanco
votos_nulos INT Votos nulos

Restricción única: (eleccion_id, territorio_id)

votos_cera — Votos CERA por partido

Columna Tipo Descripción
id INT PK Identificador único
eleccion_id INT FK Referencia a la elección
territorio_id INT FK Referencia al territorio CERA
partido_id INT FK Referencia al partido
votos INT Número de votos

Restricción única: (eleccion_id, territorio_id, partido_id)

Tipo ENUM: territorio_tipo

Define los niveles de la jerarquía territorial:

Valor Descripción
ccaa Comunidad autónoma
provincia Provincia
municipio Municipio
distrito Distrito
seccion Sección censal
circunscripcion Circunscripción electoral
cera CERA (Censo de Españoles Residentes Ausentes)