← Назад к вопросам

Какие знаешь виды реляционных БД?

1.0 Junior🔥 201 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды реляционных БД

Как Java Developer с 10+ лет опыта, я работал с множеством реляционных баз данных. Рассмотрю основные виды и их особенности.

1. PostgreSQL - мощная open-source БД

Одна из лучших открытых реляционных БД:

// Подключение к PostgreSQL
public class PostgreSQLConnection {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:postgresql://localhost:5432/mydb";
        String user = "postgres";
        String password = "password";
        
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            String query = "SELECT * FROM users WHERE age > ?";
            try (PreparedStatement stmt = conn.prepareStatement(query)) {
                stmt.setInt(1, 18);
                try (ResultSet rs = stmt.executeQuery()) {
                    while (rs.next()) {
                        System.out.println("Name: " + rs.getString("name"));
                        System.out.println("Age: " + rs.getInt("age"));
                    }
                }
            }
        }
    }
}

Характеристики:

  • Очень мощная и надёжная
  • Поддержка сложных типов данных (JSON, arrays, custom types)
  • ACID транзакции
  • Бесплатная и open-source
  • Отличная масштабируемость
  • Требует больше памяти и CPU чем MySQL

Когда использовать: сложные приложения, когда нужна мощь и надёжность, data analytics.

2. MySQL - быстрая и легковесная БД

Самая популярная реляционная БД в веб-приложениях:

public class MySQLConnection {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
        String user = "root";
        String password = "password";
        
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            // Использование connection pooling
            String insertQuery = "INSERT INTO users (name, email) VALUES (?, ?)";
            try (PreparedStatement stmt = conn.prepareStatement(insertQuery)) {
                stmt.setString(1, "John Doe");
                stmt.setString(2, "john@example.com");
                int rowsInserted = stmt.executeUpdate();
                System.out.println("Rows inserted: " + rowsInserted);
            }
        }
    }
}

Характеристики:

  • Легковесная и быстрая
  • Очень популярна (WordPress, Drupal и т.д.)
  • Простая в установке и конфигурации
  • Хорошая производительность для стандартных приложений
  • Ограничена в сложных операциях
  • Есть различные storage engines (InnoDB, MyISAM)

Когда использовать: веб-приложения, стартапы, когда нужна быстрота.

3. Oracle Database - enterprise решение

Большие enterprise системы используют Oracle:

public class OracleConnection {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
        String user = "system";
        String password = "oracle";
        
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            // Oracle имеет встроенные PL/SQL процедуры
            String query = "{call process_user(?, ?)}";
            try (CallableStatement stmt = conn.prepareCall(query)) {
                stmt.setInt(1, 100);
                stmt.registerOutParameter(2, Types.VARCHAR);
                stmt.execute();
                String result = stmt.getString(2);
                System.out.println("Result: " + result);
            }
        }
    }
}

Характеристики:

  • Очень дорогая (лицензирование по CPU cores)
  • Огромные возможности и производительность
  • Поддержка сложных операций и analytics
  • PL/SQL для хранимых процедур
  • Требует опытных DBA
  • Используется в крупных корпорациях

Когда использовать: крупные корпорации, когда нужны максимальные возможности, legacy системы.

4. Microsoft SQL Server - Windows решение

Основная БД для Windows систем:

public class SQLServerConnection {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:sqlserver://localhost:1433;databaseName=mydb";
        String user = "sa";
        String password = "YourPassword123";
        
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            // SQL Server имеет T-SQL
            String query = "SELECT * FROM users WHERE status = ? ORDER BY created_date DESC";
            try (PreparedStatement stmt = conn.prepareStatement(query)) {
                stmt.setString(1, "ACTIVE");
                try (ResultSet rs = stmt.executeQuery()) {
                    while (rs.next()) {
                        System.out.println("User: " + rs.getString("name"));
                    }
                }
            }
        }
    }
}

Характеристики:

  • Лучшая интеграция с Windows и .NET
  • Хорошая производительность
  • Дорогая лицензия
  • Поддержка T-SQL (диалект SQL)
  • Хорошие инструменты для управления
  • Azure cloud integration

Когда использовать: Windows enterprise среды, когда используется .NET stack.

5. MariaDB - MySQL fork с улучшениями

Открытый fork MySQL с дополнительными возможностями:

public class MariaDBConnection {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:mariadb://localhost:3306/mydb";
        String user = "root";
        String password = "password";
        
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            // MariaDB имеет лучшую оптимизацию чем MySQL
            String query = "SELECT id, name FROM users LIMIT ?";
            try (PreparedStatement stmt = conn.prepareStatement(query)) {
                stmt.setInt(1, 100);
                try (ResultSet rs = stmt.executeQuery()) {
                    while (rs.next()) {
                        System.out.println(rs.getInt("id") + ": " + rs.getString("name"));
                    }
                }
            }
        }
    }
}

Характеристики:

  • Drop-in замена для MySQL
  • Улучшенная производительность
  • Лучшая оптимизация запросов
  • Все бесплатное и open-source
  • Совместима с MySQL драйверами
  • Используется в больших компаниях (Google, Alibaba)

Когда использовать: когда хочется MySQL с улучшениями.

6. H2 Database - встроенная БД для разработки

Легкая БД для тестирования и разработки:

public class H2Connection {
    public static void main(String[] args) throws SQLException {
        // H2 может работать в памяти или на диске
        String url = "jdbc:h2:mem:testdb"; // В памяти
        // String url = "jdbc:h2:./testdb"; // На диске
        
        try (Connection conn = DriverManager.getConnection(url, "sa", "")) {
            // Создание таблицы
            try (Statement stmt = conn.createStatement()) {
                stmt.execute("CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255))");
            }
            
            // Вставка данных
            String insertQuery = "INSERT INTO users VALUES (1, 'John')";
            try (Statement stmt = conn.createStatement()) {
                stmt.execute(insertQuery);
            }
            
            // Чтение данных
            String selectQuery = "SELECT * FROM users";
            try (Statement stmt = conn.createStatement();
                 ResultSet rs = stmt.executeQuery(selectQuery)) {
                while (rs.next()) {
                    System.out.println(rs.getInt("id") + ": " + rs.getString("name"));
                }
            }
        }
    }
}

Характеристики:

  • Очень легкая (можно встроить в приложение)
  • Может работать в памяти или на диске
  • Идеальна для unit тестов
  • Не требует установки
  • Достаточно быстрая для разработки
  • Используется в Spring Boot для тестирования

Когда использовать: разработка, unit тесты, прототипирование.

7. Derby (Apache Derby) - встроенная Java БД

Полностью Java реализация реляционной БД:

public class DerbyConnection {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:derby:mydb;create=true";
        
        try (Connection conn = DriverManager.getConnection(url)) {
            // Derby работает только из Java
            String createTable = "CREATE TABLE employees (" +
                "id INT PRIMARY KEY, " +
                "name VARCHAR(50), " +
                "salary DECIMAL(10,2))";
            
            try (Statement stmt = conn.createStatement()) {
                stmt.execute(createTable);
            }
            
            String insertQuery = "INSERT INTO employees VALUES (1, 'John', 50000.00)";
            try (PreparedStatement stmt = conn.prepareStatement(insertQuery)) {
                stmt.executeUpdate();
            }
        }
    }
}

Характеристики:

  • Полностью написана на Java
  • Может быть встроена в приложение
  • ACID транзакции
  • Многопроцессный доступ
  • Может работать в embedded режиме

Когда использовать: Java-only системы, когда нужна встроенная БД.

Сравнение основных параметров

БДМасштабПроизводительностьЦенаСложностьЛучше для
PostgreSQLБольшойВысокаяБесплатноСредняяEnterprise, analytics
MySQLСреднийВысокаяБесплатноНизкаяWeb приложения
OracleОчень большойОчень высокаяДорогоВысокаяКрупные корпорации
SQL ServerБольшойВысокаяДорогоСредняяWindows enterprise
MariaDBСреднийВысокаяБесплатноНизкаяMySQL замена
H2МаленькийХорошаяБесплатноНизкаяРазработка
DerbyМаленькийХорошаяБесплатноНизкаяJava embedded

Практические рекомендации

// Для production приложения используй connection pool
public class DatabaseConfiguration {
    public static DataSource createDataSource() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:postgresql://localhost:5432/mydb");
        config.setUsername("user");
        config.setPassword("password");
        config.setMaximumPoolSize(20);
        config.setMinimumIdle(5);
        config.setConnectionTimeout(30000);
        config.setIdleTimeout(600000);
        config.setMaxLifetime(1800000);
        return new HikariDataSource(config);
    }
}

Выбор БД для проекта

  1. Стартап, веб-приложение: MySQL или PostgreSQL
  2. Enterprise, complex queries: PostgreSQL или Oracle
  3. Windows shop: SQL Server
  4. Разработка и тесты: H2 или в памяти PostgreSQL
  5. Масштабное приложение с analytics: PostgreSQL
  6. Быстрое prototype: MySQL/MariaDB

Основной выбор в современных проектах - это PostgreSQL для production и H2/в памяти для тестирования, потому что PostgreSQL предоставляет лучший баланс мощности, надежности и бесплатности.

Какие знаешь виды реляционных БД? | PrepBro