1. Реляционная БД
Построена на реляционной модели данных, на отношениях. Отношение - математический термин, согласно wiki это подмножество декартова произведения множеств, называемых доменами. Например, отношение Человек может быть подмножеством произведения домена Имя (Андрей, Сергей) и Фамилия (Иванов, Смирнов). Таблица (множество кортежей) - это представление отношения.
2. Нормализация
Процесс приведения к нормальной форме. Есть несколько нормальных форм.
1НФ - все атрибуты атомарны. "ФИО, Телефоны". Телефонов может быть несколько, этот атрибут не атомарен - должен быть разделен.
2НФ - все столбцы, не входящие в полный первичный ключ, должны зависеть от полного первичного ключа. Если ключ составной (Покупатель, Товар), то поля должны зависеть от всего ключа: Количество - хорошо, ФИО Покупателя - плохо - зависит только от Покупателя.
3НФ - все столбцы, не входящие в полный первичный ключ, должны зависеть от него и не должны зависеть друг от друга. Машина, Производитель, Брэнд производителя.
3. Индексы
Key и Index - синонимы в MySQL. Primary key и Unique key однозначно определяют строки таблицы. Может быть не более одного primary key и сколько угодно unique key. Primary / unique key автоматически индексируются в MySQL.
По индексу база находит "указатель на строку". Это может быть значение primary key (InnoDB), смещение в файле (MyISAM).
4. MyISAM, InnoDB
Таблицы и индексы InnoDB хранятся в специальном пространстве памяти, которое может состоять из нескольких файлов. В этом заключается отличие InnoDB от, например, таблиц MyISAM: каждая таблица MyISAM хранится в отдельном файле.
Построена на реляционной модели данных, на отношениях. Отношение - математический термин, согласно wiki это подмножество декартова произведения множеств, называемых доменами. Например, отношение Человек может быть подмножеством произведения домена Имя (Андрей, Сергей) и Фамилия (Иванов, Смирнов). Таблица (множество кортежей) - это представление отношения.
2. Нормализация
Процесс приведения к нормальной форме. Есть несколько нормальных форм.
1НФ - все атрибуты атомарны. "ФИО, Телефоны". Телефонов может быть несколько, этот атрибут не атомарен - должен быть разделен.
2НФ - все столбцы, не входящие в полный первичный ключ, должны зависеть от полного первичного ключа. Если ключ составной (Покупатель, Товар), то поля должны зависеть от всего ключа: Количество - хорошо, ФИО Покупателя - плохо - зависит только от Покупателя.
3НФ - все столбцы, не входящие в полный первичный ключ, должны зависеть от него и не должны зависеть друг от друга. Машина, Производитель, Брэнд производителя.
3. Индексы
Key и Index - синонимы в MySQL. Primary key и Unique key однозначно определяют строки таблицы. Может быть не более одного primary key и сколько угодно unique key. Primary / unique key автоматически индексируются в MySQL.
По индексу база находит "указатель на строку". Это может быть значение primary key (InnoDB), смещение в файле (MyISAM).
4. MyISAM, InnoDB
Таблицы и индексы InnoDB хранятся в специальном пространстве памяти, которое может состоять из нескольких файлов. В этом заключается отличие InnoDB от, например, таблиц MyISAM: каждая таблица MyISAM хранится в отдельном файле.
InnoDB - storage engine по умолчанию, начиная с MySQL 5.5.
4. null в базе
4. null в базе
4. Внутренний и внешний join
5. Многие-ко-многим. Выборка.
6. Отличие стандарта SQL от MySQL
7. В чем преимущества и недостатки использования ORM.
8. Как исполняется SQL-запрос? Порядок выполнения:
Сначала синтаксический разбор запроса, то есть сервер переводит запрос из SQL-языка в какой-то свой внутренний формат. Синтаксический разбор - долгая операция, некоторые СУБД умеют кэшировать (какие?). Потом выполнение — составление плана запроса, формирование индексов, сканирование таблиц и т.д.
Порядок выполненияя?
9. PreparedStatement
Подготовленные выражения отделяют запрос от данных.
MySQL:
JDBC:
Hibernate:
Примеры:
1. JDBC (Java Database Connectivity) - это Java API для работы с БД. Позволяет получать доступ к базе по URL, с помощью т.н. драйверов (для каждой БД - свой).
Пример:
3 типа Statement и их использование: Урок JDBC в примерах
2. ORM (object relational mapping) - отображение объектов объектно-ориентированного языка на структуру БД. Примеры: Hibernate, Spring DAO, ...
Пример использования Hibernate:
3. JPA - Java Persistence API — API, входящий в состав платформ Java SE и Java EE, предоставляет возможность объектно-реляционного отображения (Java-объекты в базу данных и обратно). Это спецификация, то есть не умеет ни сохранять, ни управлять объектами, но определяет КАК должно работать, описывает интерфейсы и так далее.
Существует несколько реализаций этого интерфейса, одна из самых популярных использует для этого Hibernate.
Поддержка сохранности данных, предоставляемая JPA, покрывает области:
1. Непосредственно API, заданный в пакете javax.persistence. Набор интерфейсов, которые должна поддерживать конкретная реализация.
2. Объектный язык запросов Java Persistence Query Language.
3. Метаданные - описание объектов и связей между ними. Набор аннотаций или xml файл.
4. JTA - сокращение от Java Transaction API. Этот API позволяет:
5. Многие-ко-многим. Выборка.
6. Отличие стандарта SQL от MySQL
7. В чем преимущества и недостатки использования ORM.
8. Как исполняется SQL-запрос? Порядок выполнения:
Сначала синтаксический разбор запроса, то есть сервер переводит запрос из SQL-языка в какой-то свой внутренний формат. Синтаксический разбор - долгая операция, некоторые СУБД умеют кэшировать (какие?). Потом выполнение — составление плана запроса, формирование индексов, сканирование таблиц и т.д.
Порядок выполненияя?
9. PreparedStatement
Подготовленные выражения отделяют запрос от данных.
MySQL:
PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; SET @a = 3; SET @b = 4; EXECUTE stmt1 USING @a, @b; DEALLOCATE PREPARE stmt1;
JDBC:
String selectSQL = "SELECT USER_ID, USERNAME FROM DBUSER WHERE USER_ID = ?"; PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL); preparedStatement.setInt(1, 1001); ResultSet rs = preparedStatement.executeQuery(selectSQL );
Hibernate:
return currentSession() .createQuery("FROM Student student WHERE student.status = :status") .setParameter("status", status) .list();
Примеры:
1. JDBC (Java Database Connectivity) - это Java API для работы с БД. Позволяет получать доступ к базе по URL, с помощью т.н. драйверов (для каждой БД - свой).
Пример:
// имя драйвера, путь к БД, логин, пароль String jdbcDriverName = "com.mysql.jdbc.Driver"; String dbUrl = "jdbc:mysql://localhost/mydb"; String userName = "username"; String password = "password"; Connection conn = null; Statement stmt = null; try{ // Какой драйвер? Class.forName("com.mysql.jdbc.Driver"); // Открыть соединение. Connection - это сеанс работы с БД. conn = DriverManager.getConnection(dbUrl, userName, password); // Выполнить запрос. Statement = sql-запрос. stmt = conn.createStatement(); String sql = "SELECT id, name FROM students"; // ResultSet обеспечивает приложению построчный доступ // к результатам запросов в базе данных. Во время обработки запроса // ResultSet поддерживает указатель на текущую обрабатываемую строку. // Приложение последовательно перемещается по результатам, пока они // не будут все обработаны или не будет закрыт ResultSet. ResultSet rs = stmt.executeQuery(sql); // Получить данные из result set'a while(rs.next()){ String name = rs.getString("name"); } // Закрыть соединение и не только rs.close(); stmt.close(); conn.close(); } catch(SQLException se) { // Ошибка JDBC } catch(Exception e) { // Ошибка Class.forName } finally{ // Освободить ресурсы try { if (stmt != null) stmt.close(); } catch(SQLException se2) { } try { if (conn != null) conn.close(); } catch(SQLException se){ } }
3 типа Statement и их использование: Урок JDBC в примерах
2. ORM (object relational mapping) - отображение объектов объектно-ориентированного языка на структуру БД. Примеры: Hibernate, Spring DAO, ...
Пример использования Hibernate:
sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); //Data access code session.save(newCustomer); tx.commit(); session.close();
Архитектура приложения с Hibernate: http://www.tutorialspoint.com/hibernate/hibernate_architecture.htm
Используется Многоуровневая архитектура:
DAO - data access object - шаблон для отделения бизнес-логики от работы с источником данных (например, от кода, связанного с hibernate).
1. Весь доступ к DB через DAO для скрытия работы с DB.
2. Каждый DAO отвечает за одну сущность.
3. DAO отвечает за CRUD.
4. DAO может разрешать запросы по критерию, отличному от первичного ключа.
5. Не занимается обработкой транзакций, сессий или соединений. Для гибкости это делается вне DAO.
Пример написания DAO: http://habrahabr.ru/post/29694/
Используется Многоуровневая архитектура:
- Слой инфраструктуры (источники данных, менеджер транзакций и т.д.)
- Слой доступа к данным (DAO)
- Слой бизнес-логики (сервисы)
- Слой интерфейса (например, Spring MVC)
1. Весь доступ к DB через DAO для скрытия работы с DB.
2. Каждый DAO отвечает за одну сущность.
3. DAO отвечает за CRUD.
4. DAO может разрешать запросы по критерию, отличному от первичного ключа.
5. Не занимается обработкой транзакций, сессий или соединений. Для гибкости это делается вне DAO.
Пример написания DAO: http://habrahabr.ru/post/29694/
3. JPA - Java Persistence API — API, входящий в состав платформ Java SE и Java EE, предоставляет возможность объектно-реляционного отображения (Java-объекты в базу данных и обратно). Это спецификация, то есть не умеет ни сохранять, ни управлять объектами, но определяет КАК должно работать, описывает интерфейсы и так далее.
Существует несколько реализаций этого интерфейса, одна из самых популярных использует для этого Hibernate.
Поддержка сохранности данных, предоставляемая JPA, покрывает области:
1. Непосредственно API, заданный в пакете javax.persistence. Набор интерфейсов, которые должна поддерживать конкретная реализация.
2. Объектный язык запросов Java Persistence Query Language.
3. Метаданные - описание объектов и связей между ними. Набор аннотаций или xml файл.
4. JTA - сокращение от Java Transaction API. Этот API позволяет:
- размечать транзакции способом, не зависящим от реализации менеджера транзакций;
- работать с распределенными транзакциями.
J2EE SDK реализует менеджер транзакций при помощи Java Transaction Service ("JTS"). Но ваш код не вызывает методы JTS напрямую. Вместо этого он вызывает методы JTA, которые потом вызывают низкоуровневые процедуры JTS.
Распределенные транзакции (XA) - транзакции, охватывающие несколько источников данных. Есть разные реализации, в т.ч. open source.
TODO: Spring DAO
Comments
Post a Comment