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"
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:
- Catálogos: tipos de elección, territorios, partidos y agrupaciones.
- Resultados territoriales: resúmenes de participación y censo por territorio y elección.
- Votos: desglose de votos y representantes por partido, territorio y elección.
Diagrama entidad-relación
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) |