Autor: Aiko Taniguchi Cliente: Ignacio Versión: 1.0
Tres bibliotecas independientes, cada una con su propia base de datos. Cuando introduces un ISBN, el sistema consulta las tres bases a la vez y te dice:
- En qué bibliotecas está ese libro.
- Si en cada una está LIBRE o RESERVADO.
Además permite:
- Cambiar el estado de un libro (LIBRE ↔ RESERVADO) dejando huella en una tabla de historial.
- Insertar libros nuevos.
- Simular que una biblioteca se cae (su red falla, su base se apaga) y comprobar que el sistema sigue funcionando con las otras dos.
Todo está hecho con SQL puro + Python básico, sin frameworks que escondan lo que pasa por debajo. La idea es que puedas leer, entender y mantener el sistema tú mismo.
Esta entrega incluye cuatro guías paso a paso en la carpeta docs/. Léelas en orden. Cada una sigue donde termina la anterior.
| # | Guía | Tiempo | Qué cubre |
|---|---|---|---|
| 1 | docs/01_instalacion_y_bases.md | 60–90 min | Instalación de SQL Server, SSMS, Python y dependencias. Creación de las 3 bases con sus datos |
| 2 | docs/02_cruzamiento_python.md | 25–35 min | El script Python que cruza las 3 bases. Cuatro escenarios de prueba |
| 3 | docs/03_mantenimiento_y_fallos.md | 25–30 min | Cambiar estados, insertar libros, simular caída de una biblioteca |
| 4 | docs/04_resumen_y_extensiones.md | 15 min | Recapitulación, comandos del día a día, cómo extender |
Cada guía está en tres formatos: Markdown (.md), Word (.docx) y PDF (.pdf). Usa el que prefieras — el contenido es idéntico.
| Pieza | Tecnología | Para qué |
|---|---|---|
| Base de datos | Microsoft SQL Server Express | Guardar los libros y el historial |
| Herramienta gráfica | SQL Server Management Studio (SSMS) | Ver y administrar las bases |
| Driver ODBC | ODBC Driver 18 for SQL Server | Conectar Python con SQL Server |
| Lenguaje de scripting | Python 3.11+ | Scripts de consulta y mantenimiento |
| Librería Python | pyodbc |
Hablar con SQL Server desde Python |
| Librería Python | tabulate |
Imprimir tablas bonitas en la terminal |
| Documentación | Markdown + DOCX + PDF | Esta misma carpeta |
20260507_Library_DB/
├── README.md / README.docx / README.pdf ← este archivo
├── sql/
│ ├── 01_create_databases.sql ← crea las 3 bases
│ ├── 02_schema_central.sql ← tablas de Biblioteca Central
│ ├── 03_schema_norte.sql ← tablas de Biblioteca Norte
│ ├── 04_schema_sur.sql ← tablas de Biblioteca Sur
│ ├── 05_seed_central.sql ← 5 libros de ejemplo en Central
│ ├── 06_seed_norte.sql ← 5 libros de ejemplo en Norte
│ ├── 07_seed_sur.sql ← 5 libros de ejemplo en Sur
│ ├── 90_simular_caida.sql ← apaga Biblioteca Norte (demo)
│ ├── 91_restaurar.sql ← vuelve a encender Biblioteca Norte
│ └── 99_drop_all.sql ← borra todo para empezar de cero
├── scripts/
│ ├── config.py ← configuración (servidor, driver, lista de bibliotecas)
│ ├── consultar_isbn.py ← consulta ISBN en las 3 bibliotecas
│ ├── cambiar_estado.py ← cambia LIBRE <-> RESERVADO + historial
│ ├── insertar_libro.py ← inserta un libro nuevo
│ ├── run_sql_file.py ← ejecuta archivos .sql desde PowerShell
│ ├── verify_all.py ← comprueba que todo el sistema funciona
│ ├── build_docs.ps1 ← regenera .docx y .pdf desde los .md
│ └── requirements.txt ← dependencias Python
└── docs/
├── 01_instalacion_y_bases.md/.docx/.pdf
├── 02_cruzamiento_python.md/.docx/.pdf
├── 03_mantenimiento_y_fallos.md/.docx/.pdf
└── 04_resumen_y_extensiones.md/.docx/.pdf
Para la primera vez sigue la Guía 1 entera. Lo que viene abajo es solo recordatorio para cuando ya esté instalado.
python scripts\consultar_isbn.py 978-84-001Salida esperada:
Buscando ISBN 978-84-001 en 3 bibliotecas...
+--------------------+----------------------------+---------------------+-----------+
| Biblioteca | Título | Autor | Estado |
+====================+============================+=====================+===========+
| Biblioteca Central | Don Quijote de la Mancha | Miguel de Cervantes | LIBRE |
+--------------------+----------------------------+---------------------+-----------+
| Biblioteca Norte | Don Quijote de la Mancha | Miguel de Cervantes | RESERVADO |
+--------------------+----------------------------+---------------------+-----------+
| Biblioteca Sur | Don Quijote de la Mancha | Miguel de Cervantes | LIBRE |
+--------------------+----------------------------+---------------------+-----------+
Resumen: 2 ejemplar(es) disponible(s), 1 reservado(s), 0 sin ejemplar, 0 biblioteca(s) no respondieron.
python scripts\cambiar_estado.py --biblioteca central --isbn 978-84-001 --nuevo RESERVADOCada cambio queda registrado en historial_estados. Más detalles en la Guía 3.
python scripts\insertar_libro.py --biblioteca sur --isbn 978-84-100 --titulo "El Aleph" --autor "Jorge Luis Borges" --estado LIBREO sin argumentos para modo interactivo.
python scripts\run_sql_file.py sql\90_simular_caida.sql
python scripts\consultar_isbn.py 978-84-001Verás cómo el sistema sigue funcionando con Central y Sur, y marca Norte como NO DISPONIBLE. Para restaurar:
python scripts\run_sql_file.py sql\91_restaurar.sqlpython scripts\verify_all.pyDebe terminar con 131/131 pruebas pasaron. Si dice otra cosa, la salida te indica exactamente qué falló.
python scripts\run_sql_file.py sql\99_drop_all.sqlY volver a ejecutar los pasos 01 → 07 (ver Guía 1, sección 4).
| ISBN | Título | Central | Norte | Sur |
|---|---|---|---|---|
| 978-84-001 | Don Quijote de la Mancha | LIBRE | RESERVADO | LIBRE |
| 978-84-002 | La Colmena | RESERVADO | — | LIBRE |
| 978-84-003 | Rayuela | LIBRE | — | — |
| 978-84-004 | Cien Años de Soledad | LIBRE | LIBRE | — |
| 978-84-005 | El Túnel | — | LIBRE | — |
| 978-84-006 | Ficciones | — | — | RESERVADO |
| 978-84-007 | Pedro Páramo | LIBRE | LIBRE | LIBRE |
| 978-84-008 | La Casa de los Espíritus | — | RESERVADO | LIBRE |
El ISBN 978-84-001 aparece en las tres a propósito — es el ejemplo perfecto para ver el cruzamiento funcionando.
Cada Guía tiene su propia sección de "Errores comunes" con casos más específicos. Lo de abajo es lo más típico.
"Login failed for user ..." → Tu usuario Windows no tiene permisos. Ver Guía 1, sección 7.
pyodbc.InterfaceError: Data source name not found
→ Falta el ODBC Driver 18. Reinstalar (ver Guía 1, paso 3.5).
SSL Provider: The certificate chain ... is not trusted
→ Ya está cubierto: scripts\config.py incluye TrustServerCertificate=yes. Asegúrate de no haber editado ese archivo.
Una biblioteca aparece como NO DISPONIBLE cuando no debería
→ Comprueba en SSMS que la base esté online. Si la apagaste con 90_simular_caida.sql, ejecuta 91_restaurar.sql.
Acentos salen como ? en la terminal
→ La consola no está en UTF-8. En PowerShell, antes de ejecutar:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8Si encuentras algún problema o quieres ampliar el sistema, escríbeme. Mantengo el código y la documentación para que cualquier cosa que falle podamos arreglarla rápido.
Un saludo, Aiko Taniguchi