Какой главный признак реляционной базы данных?
Что проверяют
Знаете ли вы основу, на которой стоят JPA и Hibernate, или просто привыкли к таблицам. Интервьюер ждёт одной точной формулировки, а не списка всего, что вы слышали о базах. Следом часто спрашивают про отличие от NoSQL или про ACID.
Как отвечать
Главный признак: данные описываются реляционной моделью Кодда. Всё хранится в отношениях, то есть в таблицах, а связи между данными выражаются значениями ключей, а не указателями или физическим расположением записей. Из этого вытекает остальное:
- отношение: набор строк (кортежей) с одинаковым набором типизированных атрибутов. Порядок строк не определён, если его не задать через
ORDER BY; - ключи: первичный ключ однозначно определяет строку, внешний ключ ссылается на значение первичного в другой таблице;
- декларативные запросы: вы описываете, какой результат нужен, а как его получить, решает планировщик. SQL опирается на реляционную алгебру: выборка, проекция, соединение;
- ограничения целостности:
NOT NULL,UNIQUE,FOREIGN KEY,CHECKпроверяет сама база, а не приложение.
Для Java-разработчика стоит связать это с практикой. JDBC отдаёт результат как ResultSet, то есть как таблицу, а JPA отображает граф объектов на таблицы. Отсюда «объектно-реляционное несоответствие»: связь @OneToMany в коде это внешний ключ в базе, а ленивые коллекции порождают проблему N+1 запросов.
Нормализация, SQL и ACID в ответе уместны, но как сопутствующие вещи. Нормализация это практика проектирования схемы, ACID это свойство транзакций, которое бывает и у нереляционных баз.
Где спотыкаются
Думают, что «реляционная» значит «со связями между таблицами». Название идёт от relation, то есть отношения, а это математическое имя таблицы.
Называют главным признаком SQL. Это язык запросов, SQL-интерфейсы есть и у нереляционных систем, а сам SQL допускает дубли строк, которых в чистой реляционной модели нет.
Путают модель и хранение: «данные лежат на диске таблицами». Физически это страницы и индексы, а таблица это логическое представление, с которым вы работаете.