Modelador de bases de datos para PostgreSQL, MySQL, MariaDB y SQL Server

Modelos de bases de datos
guardados como JSON en Git.

Schevo importa un esquema desde un script SQL o desde la base de datos, lo muestra como un diagrama ER editable y lo guarda como una carpeta con un fichero JSON por tabla, lista para el control de versiones con Git. Al guardar, regenera el script de creación.

  • 30 días de prueba, sin registro
  • Funciona sin conexión
  • Windows y Linux
  • Español, inglés, alemán y francés

Del script SQL al repositorio

  1. 1

    Importa

    Abre un script de CREATE TABLE o conéctate a la base de datos. Se importan tablas, columnas, claves, índices y relaciones, y el diagrama se coloca automáticamente.

  2. 2

    Modela

    Edita tablas, columnas y relaciones en el diagrama o en el editor de tablas. Cualquier cambio se deshace con Ctrl+Z.

  3. 3

    Haz commit

    Al guardar se escribe un fichero JSON por tabla y se regenera el script SQL asociado. Los dos van en el mismo commit.

Funciones

Los vídeos muestran la aplicación con la tienda online de ejemplo que incluye.

Importar

Importa desde un script SQL o desde la base de datos

Schevo lee scripts de creación y volcados de esquema, o consulta el catálogo de una base de datos en ejecución. Importa tablas, columnas, claves primarias y foráneas, restricciones UNIQUE y CHECK, índices y comentarios. El diagrama se coloca automáticamente: tablas agrupadas por prefijo, tablas padre a la izquierda de sus hijas y un color por grupo.

  • Las sentencias que el diagrama no representa (vistas, funciones, triggers, secuencias, tipos) se guardan en extra.sql y se escriben de nuevo en el SQL generado.
  • Las sentencias que no se pueden interpretar se listan con su número de línea y se conservan en el SQL.
  • La conexión a la base de datos solo hace consultas de lectura al catálogo. Se recuerdan servidor, puerto, base de datos y usuario; la contraseña no se guarda.

Motores

Motores: PostgreSQL, MySQL, MariaDB y SQL Server

Cada modelo tiene un motor, guardado en project.json. Con todos ellos, Schevo importa scripts y bases de datos, genera el SQL de creación con la sintaxis del motor, compara versiones y genera migraciones. El diagrama, el formato JSON y la línea de comandos son los mismos.

  • Bases de datos en ejecución: PostgreSQL 10 o superior, MySQL 8.0 o superior, MariaDB 10.6 o superior, SQL Server 2017 o superior y Azure SQL Database.
  • MySQL y MariaDB, también desde volcados de esquema: AUTO_INCREMENT, UNSIGNED, ENUM/SET, columnas generadas, ON UPDATE, índices FULLTEXT y SPATIAL y opciones de tabla.
  • El editor de tablas muestra los atributos del motor del modelo; en MySQL y MariaDB, motor de almacenamiento, juego de caracteres, colación, ON UPDATE, columnas generadas y tipo de índice.
  • Los ENUM y SET largos se abrevian en el diagrama; el tipo completo aparece en el tooltip y en el editor.
  • Las migraciones de MySQL y MariaDB usan MODIFY COLUMN con la definición completa, y su cabecera indica que el DDL de estos motores no es transaccional.
  • SQL Server: scripts T-SQL con lotes GO e identificadores entre corchetes, IDENTITY, columnas calculadas PERSISTED, índices agrupados y no agrupados con INCLUDE y filtro, DEFAULT con nombre, colaciones y comentarios como propiedades extendidas (MS_Description).
  • Las migraciones de SQL Server se ejecutan en una sola transacción con SET XACT_ABORT ON: si falla una sentencia, no se aplica ninguna. Los renombrados usan sp_rename.
Script MySQL / MariaDB
CREATE TABLE ord_cart (
                cart_id BIGINT UNSIGNED NOT NULL,
                customer_id BIGINT UNSIGNED,
                session_id CHAR(36) NOT NULL COMMENT 'Browser session, for guest carts.',
                coupon_id BIGINT UNSIGNED,
                created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
                updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
                PRIMARY KEY (cart_id),
                UNIQUE KEY ord_cart_session_idx (session_id)
) COMMENT='Open carts, from registered customers or guests.';
Script SQL Server
CREATE TABLE dbo.ord_order_line (
                order_id BIGINT NOT NULL,
                line_no SMALLINT NOT NULL,
                variant_id BIGINT NOT NULL,
                description NVARCHAR(200) NOT NULL,
                quantity SMALLINT NOT NULL,
                unit_price DECIMAL(12,2) NOT NULL,
                discount DECIMAL(12,2) NOT NULL CONSTRAINT ord_order_line_discount_df DEFAULT 0,
                tax_code VARCHAR(10) NOT NULL,
                amount AS (quantity * unit_price - discount) PERSISTED NOT NULL,
                CONSTRAINT ord_order_line_pk PRIMARY KEY (order_id, line_no),
                CONSTRAINT ord_order_line_quantity_check CHECK (quantity > 0)
);
GO

Editar

Edición con teclado en el diagrama

T crea una tabla en la posición del cursor. C añade columnas a la tabla seleccionada con una línea como importe numeric(10,2) not null. Alt + arrastrar de la tabla hija a la padre crea la relación. Un clic en una columna resalta las relaciones que la usan, y cualquier cambio se deshace con Ctrl+Z.

  • Al renombrar una tabla se actualizan las claves foráneas que la referencian y los nombres de PK y FK que siguen la convención.
  • Un cambio de tipo en una columna referenciada se propaga a las columnas FK de las tablas hijas, en cadena.
  • Zonas, notas, minimapa, modo compacto (solo columnas PK y FK) y tema oscuro.

Formato en disco

Un modelo versionable: un fichero JSON por tabla

Un modelo es una carpeta: project.json, una carpeta tables/ con un fichero por tabla y, cuando tienen contenido, extra.sql y diagram.json. La salida es determinista: orden fijo de propiedades, fin de línea LF y una propiedad por línea. Solo se reescriben los ficheros que cambian.

  • Son ficheros de texto: se leen y se editan sin Schevo.
  • Sin ficheros binarios, sin bloqueos y sin base de datos local.
Carpeta del modelo
db-model/
  project.json
  extra.sql
  tables/
    public.cat_attribute.json
    public.cat_brand.json
    public.cat_category.json
    public.cat_image.json
    public.cat_price_history.json
    … (62 files)
tables/public.ord_cart.json
{
  "name" : "ord_cart",
  "schema" : "public",
  "comment" : "Open carts, from registered customers or guests.",
  "columns" : [
    {
      "name" : "cart_id",
      "type" : "BIGINT",
      "nullable" : false
    },
    {
      "name" : "customer_id",
      "type" : "BIGINT",
      "nullable" : true
    },
    {
      "name" : "session_id",
      "type" : "UUID",
      "nullable" : false,
      "comment" : "Browser session, for guest carts."
    },
    {
      "name" : "coupon_id",
      "type" : "BIGINT",
      "nullable" : true
    },
  …

Git

Control de versiones con Git: diffs legibles y merges por tabla

Cada tabla está en su propio fichero y el formato no varía entre guardados, así que un diff muestra solo las líneas modificadas. Dos personas que editan tablas distintas modifican ficheros distintos, así que el merge de esquemas es un merge normal de Git. Mover una tabla solo cambia sus valores x e y.

  • Tras un git pull o un cambio de rama, el modelo abierto se recarga si no hay cambios sin guardar; si los hay, se ofrece recargar.
  • Al abrir el modelo, los marcadores de conflicto sin resolver se indican con fichero y línea.
  • schevo-cli check en CI falla si el SQL no está sincronizado con el modelo.
Añadir una columna y mover una tabla
$ git diff
--- a/db-model/tables/public.cus_customer.json
+++ b/db-model/tables/public.cus_customer.json
@@ -10,2 +10,8 @@
     },
+    {
+      "name" : "loyalty_points",
+      "type" : "INTEGER",
+      "nullable" : false,
+      "default" : "0"
+    },
     {
@@ -140,3 +146,3 @@
   "layout" : {
-    "x" : 1671,
+    "x" : 1911,
     "y" : 40,

SQL

SQL de creación con vista previa de cambios

El script de creación tiene un formato fijo: tablas en orden alfabético, claves primarias, UNIQUE y CHECK dentro de cada tabla, índices a continuación y claves foráneas al final como ALTER TABLE. Ctrl+G abre una vista previa con las líneas añadidas y eliminadas respecto al fichero en disco.

  • Copiar, guardar en el fichero asociado o guardar en otro fichero.
  • Al guardar el modelo se regenera el script asociado, con fin de línea LF o CRLF según el proyecto.
SQL generado
CREATE TABLE public.ord_cart (
                cart_id BIGINT NOT NULL,
                customer_id BIGINT,
                session_id UUID NOT NULL,
                coupon_id BIGINT,
                created_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
                updated_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
                CONSTRAINT ord_cart_pk PRIMARY KEY (cart_id)
);

ALTER TABLE public.ord_cart ADD CONSTRAINT cus_customer_ord_cart_fk
FOREIGN KEY (customer_id)
REFERENCES public.cus_customer (customer_id)
ON DELETE CASCADE
ON UPDATE NO ACTION
NOT DEFERRABLE;

Migraciones

Migraciones a partir de Git, de otro modelo o de la base de datos

Elige la versión de partida (una revisión de Git, lo último guardado, otro modelo, un script SQL o una base de datos en ejecución) y Schevo genera el script ALTER que la lleva al modelo actual. Las claves foráneas afectadas se quitan antes de los cambios y se vuelven a crear al final. En PostgreSQL y SQL Server, el script va dentro de una transacción.

  • Los posibles renombrados de tablas y columnas se proponen en casillas y se escriben como RENAME (sp_rename en SQL Server), no como borrar y crear.
  • Una clave foránea solo se recrea cuando cambian sus columnas o la clave de la tabla padre.
  • Desde la línea de comandos: schevo-cli migrate con --git, --from o --from-db, y --rename o --detect-renames.

Comparar

Comparación entre versiones en el diagrama

Compara el modelo abierto con una revisión de Git, lo último guardado, otro modelo, un script SQL o una base de datos. Las tablas nuevas se marcan en verde; las modificadas, en ámbar, con las columnas cambiadas resaltadas; las eliminadas se dibujan como fantasmas en su posición anterior. La lista de cambios lleva a cada tabla. También se pueden comparar modelos de motores distintos.

Validación

Validación mientras editas

El panel de validación se actualiza con cada cambio y distingue errores y avisos. Errores: claves foráneas a columnas que no existen, claves primarias que admiten NULL, nombres repetidos, SET NULL sobre columnas NOT NULL. Avisos: tipos distintos a cada lado de una relación, ciclos de CASCADE, palabras reservadas y nombres que no siguen las reglas del proyecto. Cada motor añade sus reglas: longitud máxima de los identificadores, columnas AUTO_INCREMENT, juego de caracteres y colación en las claves foráneas de MySQL, índices agrupados y caminos de cascada en SQL Server. schevo-cli validate aplica las mismas reglas.

Validación mientras editas

Exportar

Exportación a PNG, SVG y PDF, y diccionario de datos

El diagrama se exporta a PNG, SVG o PDF, siempre con el tema claro. El diccionario de datos es un fichero HTML autocontenido con el diagrama, un índice con buscador y una ficha por tabla con sus columnas, claves, índices y comentarios.

Abrir el diccionario de datos de ejemplo

Exportación a PNG, SVG y PDF, y diccionario de datos

Línea de comandos

Línea de comandos para CI

schevo-cli se instala con la aplicación. validate termina con 0 si no hay errores, 1 si los hay y 2 si no puede leer el modelo; check además comprueba que el SQL está sincronizado. Los dos son gratuitos, con o sin licencia. import, generate, migrate y doc requieren licencia y terminan con 3 sin ella.

Job de CI
# CI job — fail the merge request if the model
# has errors or the SQL was not regenerated
schema-check:
  image: eclipse-temurin:17-jre
  script:
    - java -jar tools/schevo.jar check db-model

$ java -jar tools/schevo.jar check db-model
OK: valid model and SQL in sync

Otras funciones

Búsqueda

Ctrl+F busca en tablas, columnas, relaciones, índices, restricciones y comentarios.

Zonas y notas

Zonas de color que se mueven con sus tablas, y notas de texto en el diagrama.

Varias ventanas

Un modelo por ventana. Las tablas se copian y pegan entre ventanas.

Copia de recuperación

Cada 2 minutos si hay cambios sin guardar. Tras un cierre inesperado, se ofrece recuperarla.

Reglas de nombres

Plantillas para PK, FK, UNIQUE e índices. Se usan al proponer nombres y al validar.

Tema claro y oscuro

Ctrl+Mayús+D cambia de tema. Las exportaciones usan siempre el claro.

Cuatro idiomas

Interfaz, manual y ayuda de la línea de comandos en español, inglés, alemán y francés.

Sin conexión

Sin cuenta y sin servicios en la nube. Los modelos no salen de tu equipo.

Modelos grandes

El diagrama está optimizado y medido con modelos de 500 a 1.000 tablas.

Ajustar a la ventana

Al abrir, importar o comparar, el diagrama se ajusta a la ventana. Ctrl+9 lo vuelve a ajustar.

Avisos de actualización

Comprobación diaria de versiones nuevas, desactivable, con «Omitir esta versión».

Windows y Linux

Instalador para Windows; .deb, .rpm y .tar.gz para Linux x64. Todos incluyen Java.

Prueba gratuita

Schevo está en fase de prueba gratuita: descárgalo y úsalo con todas sus funciones durante 30 días. Las licencias de pago llegarán más adelante.

Al terminar la prueba, Schevo sigue abriendo modelos en solo lectura: se pueden recorrer, buscar, comparar versiones y exportar a PNG, SVG y PDF. schevo-cli validate y check funcionan siempre.

¿Te interesa? Escríbenos a contact@schevo-db.com y te avisaremos cuando las licencias estén disponibles.

Pedir la beta

Preguntas frecuentes

¿Qué bases de datos admite?

PostgreSQL, MySQL, MariaDB y SQL Server. Con todos ellos: importación desde un script o desde la base de datos, generación del SQL, comparación y migraciones. Bases de datos en ejecución: PostgreSQL 10 o superior, MySQL 8.0 o superior, MariaDB 10.6 o superior, SQL Server 2017 o superior y Azure SQL Database, las dos últimas con autenticación de SQL Server (usuario y contraseña).

¿Necesito conexión a internet o una cuenta?

No. Schevo funciona sin conexión, no tiene cuentas y la clave de licencia se comprueba en el equipo. La única petición de red es la comprobación de actualizaciones: descarga un fichero público como mucho una vez al día, sin enviar datos. Se desactiva en el menú Ayuda.

¿Puedo probar la beta?

Sí. La beta para Windows es gratuita y abierta a cualquiera: pídela con el formulario de la beta y te enviamos el enlace de descarga por correo. Tienes 30 días con todas las funciones; después, Schevo sigue en modo de solo lectura sin coste. No hace falta tarjeta.

¿Qué pasa cuando acaba la prueba?

Schevo pasa a solo lectura: se puede abrir, recorrer, buscar, comparar y exportar imágenes, pero no editar, guardar ni generar SQL, migraciones ni el diccionario de datos. Las licencias de pago, que permitirán seguir editando, llegarán más adelante.

¿Funciona con mi alojamiento de Git?

Sí. Schevo lee y escribe ficheros en la carpeta del repositorio y usa el git instalado en el equipo para comparar con revisiones. Funciona con cualquier servidor Git.

¿En qué sistemas operativos?

Windows 10 y 11 de 64 bits y Linux x64 (.deb, .rpm o .tar.gz portable). Los paquetes llevan su propio Java; no hace falta instalarlo.

Prueba Schevo con tu propio esquema

Descarga el instalador, importa tu script con Archivo › Importar SQL y guarda el modelo en tu repositorio. 30 días con todas las funciones.

Descargar la prueba