Skip to content

fatihemre/database-schema-diff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Schema Diff Tool

A modern, extensible web application for comparing database schemas between local and remote environments. Supports multiple database systems through an adapter architecture.

License PHP Version PostgreSQL MySQL

Features

  • πŸ” Schema Comparison - Compare database schemas between local and remote databases
  • πŸ”Œ Pluggable Adapters - Support for multiple database systems (PostgreSQL, MySQL, MSSQL, etc.)
  • πŸ“Š Visual Diff - Easy-to-read visual representation of differences
  • 🎯 Column Type Detection - Displays column names and their precise data types
  • πŸ”„ Synchronized Navigation - Expand a schema on one side, and the same schema opens on the other side
  • 🌐 Cross-Database Compare - Compare PostgreSQL to MySQL, or any supported combination!
  • 🌍 Multi-Language Support - Available in English and Turkish (easily extensible to other languages)
  • πŸ“± Responsive Design - Works on desktop, tablet, and mobile devices
  • 🎨 Modern UI - Clean interface built with UIKit framework
  • ⚑ Fast & Lightweight - No heavy dependencies, just vanilla PHP and JavaScript
  • πŸ”§ Extensible - Easy to add support for new database systems

Screenshots

Database Schema Comparison Tool

Schema comparison interface showing synchronized navigation and visual diff indicators

Quick Start

Prerequisites

  • PHP 7.4 or higher
  • A supported database system (PostgreSQL, MySQL, etc.)
  • Web server (Apache, Nginx, or PHP built-in server)
  • Corresponding PHP database extension:
    • PostgreSQL: php-pgsql
    • MySQL/MariaDB: php-mysqli or php-pdo_mysql
    • MSSQL: php-sqlsrv or php-pdo_sqlsrv

Installation

  1. Clone the repository

    git clone https://github.com/fatihemre/database-schema-diff.git
    cd database-schema-diff
  2. Create configuration file

    cp config.example.php config.php
  3. Edit configuration Open config.php and set your database credentials:

    return [
        'local' => [
            'adapter' => 'PostgreSQLAdapter',  // Choose your database adapter
            'host' => '127.0.0.1',
            'port' => '5432',
            'dbname' => 'your_local_db',
            'user' => 'your_user',
            'password' => 'your_password'
        ],
        'remote' => [
            'adapter' => 'PostgreSQLAdapter',  // Can be different from local!
            'host' => 'remote.server.com',
            'port' => '5432',
            'dbname' => 'your_remote_db',
            'user' => 'your_user',
            'password' => 'your_password'
        ]
    ];
  4. Start the application

    Option A: PHP Built-in Server

    php -S localhost:8000

    Option B: Docker Compose (recommended)

    docker-compose up
  5. Open in browser

    http://localhost:8000
    

Usage

  1. Configure Database Connections - Edit config.php with your database credentials
  2. Open the Application - Access via web browser
  3. View Comparison - The tool automatically compares schemas and displays differences
  4. Navigate Schemas - Click on schema headers to expand/collapse
  5. Identify Differences:
    • πŸ”΄ Red - Missing in remote (or different)
    • 🟒 Green - Extra in remote (or different)
    • 🟠 Orange - Column type mismatch

Database Support

Supported Databases

Database Status Adapter Notes
PostgreSQL βœ… Fully Supported PostgreSQLAdapter Tested with 9.6+
MySQL 🚧 Coming Soon MySQLAdapter Skeleton available
MariaDB πŸ“‹ Planned MariaDBAdapter Compatible with MySQLAdapter
MSSQL πŸ“‹ Planned MSSQLAdapter Community contributions welcome
Oracle πŸ“‹ Planned OracleAdapter Community contributions welcome
SQLite πŸ“‹ Planned SQLiteAdapter Community contributions welcome

Using Different Adapters

You can compare databases of different types! For example:

return [
    'local' => [
        'adapter' => 'PostgreSQLAdapter',
        'host' => 'localhost',
        'port' => '5432',
        // ...
    ],
    'remote' => [
        'adapter' => 'MySQLAdapter',  // Different database type!
        'host' => 'remote.example.com',
        'port' => '3306',
        // ...
    ]
];

Creating Your Own Adapter

Want to add support for a new database? It's easy! See Adapter Development Guide for step-by-step instructions.

Quick steps:

  1. Create a new class extending DatabaseAdapter
  2. Implement 6 required methods
  3. Return data in the standard format
  4. Test and submit a PR!

Architecture

Project Structure

schema-diff/
β”œβ”€β”€ adapters/                          # πŸ”Œ Database adapters
β”‚   β”œβ”€β”€ DatabaseAdapter.php            # Abstract base class
β”‚   β”œβ”€β”€ PostgreSQLAdapter.php          # PostgreSQL implementation
β”‚   β”œβ”€β”€ MySQLAdapter.php               # MySQL skeleton
β”‚   └── ADAPTER_DEVELOPMENT_GUIDE.md   # How to create adapters
β”œβ”€β”€ docker/                            # Docker configuration
β”‚   β”œβ”€β”€ init-local.sql
β”‚   β”œβ”€β”€ init-remote.sql
β”‚   β”œβ”€β”€ config.docker.php
β”‚   └── README.md
β”œβ”€β”€ lang/                              # 🌍 Language files
β”‚   β”œβ”€β”€ en.php                         # English translations
β”‚   └── tr.php                         # Turkish translations
β”œβ”€β”€ api.php                            # REST API endpoint
β”œβ”€β”€ lang.php                           # Language API endpoint
β”œβ”€β”€ config.php                         # Database configuration (gitignored)
β”œβ”€β”€ config.example.php                 # Example configuration
β”œβ”€β”€ index.html                         # Main HTML file
β”œβ”€β”€ script.js                          # Frontend JavaScript
β”œβ”€β”€ style.css                          # Custom styles
β”œβ”€β”€ README.md                          # This file
β”œβ”€β”€ LICENSE                            # GPL v3 License
β”œβ”€β”€ CONTRIBUTING.md                    # Contribution guidelines
β”œβ”€β”€ CHANGELOG.md                       # Version history
└── docker-compose.yml                 # Docker setup

Tech Stack

  • Backend: PHP (vanilla, no framework)
  • Frontend: HTML5, JavaScript (ES6+), UIKit 3
  • Database: PostgreSQL, MySQL (coming soon), and more via adapters
  • API: RESTful JSON API
  • Architecture: Adapter Pattern for database abstraction

API Endpoints

GET /api.php

Returns comparison data in JSON format.

Response:

{
  "success": true,
  "data": {
    "local": { ... },
    "remote": { ... },
    "schemaStatuses": { ... },
    "config": {
      "local": { "host": "...", "port": "..." },
      "remote": { "host": "...", "port": "..." }
    }
  }
}

GET /lang.php?lang=en

Returns translations for the specified language.

Parameters:

  • lang - Language code (e.g., en, tr)

Response:

{
  "success": true,
  "lang": "en",
  "translations": {
    "app_title": "Database Schema Comparison",
    "local_database": "Local Database",
    "remote_database": "Remote Database",
    ...
  }
}

Development

Running Locally

# Install dependencies (none required!)
# Just configure and run

php -S localhost:8000

Code Style

  • PHP: PSR-12 coding standard
  • JavaScript: ES6+ with consistent formatting
  • CSS: BEM-like naming convention

Contributing

We welcome contributions! Please see CONTRIBUTING.md for details.

Quick Contribution Guide

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Security

Reporting Vulnerabilities

If you discover a security vulnerability, please send an email to info@fatihemre.net. All security vulnerabilities will be promptly addressed.

Best Practices

  • Never commit config.php to version control
  • Use strong database passwords
  • Run the application over HTTPS in production
  • Restrict database user permissions to read-only if possible

License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

Acknowledgments

Support

Roadmap

Database Adapters (Community Contributions Welcome!)

  • PostgreSQL adapter (fully implemented)
  • MySQL/MariaDB adapter (skeleton available - needs implementation)
  • MSSQL adapter
  • Oracle adapter
  • SQLite adapter

Localization

  • Multi-language support infrastructure
  • English (default)
  • Turkish
  • Additional languages (community contributions welcome!)

Comparison Features

  • Table index comparison
  • Foreign key comparison
  • Trigger comparison
  • View comparison
  • Stored procedure comparison

Export & Reporting

  • Export comparison report (PDF/HTML)
  • Generate migration SQL scripts
  • CLI mode for CI/CD integration

Advanced Features

  • User authentication
  • Multiple database pair comparison
  • Automated schema migration suggestions
  • Historical comparison tracking
  • Diff annotations and comments

Authors

Changelog

See CHANGELOG.md for a list of changes.


Made with ❀️ by the community

About

A modern, extensible tool for comparing database schemas across PostgreSQL, MySQL, MSSQL, and more.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published