Требования к базам данных
Разделение структуры и данных
Схема базы данных
В базах данных традиционно мы разделяем структуру и данные. На языке баз данных описание струтуры называется схемой базы данных. Таким образом у нас присутствует схема базы данных, в которой описано:
- Какие данные мы храним
- Как эти данные хранятся
- Права доступа к этим данным
Блягодаря схеме мы, аналогично ООП, отделяем описание данных от самих данных. Это не единственный возможный подход, так как мы можем хранить произвольные blob (Binary large object). Однако для осуществления каких-либо действий с этими данными мы должны иметь представление о том, что у нас хранится.
Данные
Важно. В зависимости от объема данных и требуемой скорости мы можем применять совершенно разные подходы к их хранению, и это совершенно нормально.
Типы данных
Есть несколько способов разделения типов данных на группы.
Простые и структурированные
- Простые типы данных: в терминах базы данных мы не оперируем их частями (например, Целое число, Дата или Фамилия). Естественно, в данном случае при последующей обработке можно использовать любые операции, однако не стоит рассчитывать на их эффективность.
- Структурированные данные: мы хотим оперировать их частями при выполнении запросов (например, Адрес или Телефон)
Сущности и связи сущностей
- Сущности: соответствуют Entity Type (например, Студент, Группа или Предмет)
- Связи сущностей: связи сущностей между собой (например, Студент состоит в Группе или Оценка Студента по Предмету). Для определения вида связи может использоваться термин нагруженная (как Оценка в предыдущем примере).
Ограничения целостности
Для баз данных очень важны ограничения целостности. Мы заранее хотим прописать как можно больше проверок, которые не позволят добавить в базу невалидные данные, так как в базу мы кладем данные для длительного хранения. В момент обнаружения их невалидности может оказаться, что нет возможности их исправить. Это и мотивирует отлавливать наибольшее количество ошибок в данных еще на этапе их внесения в базу. В данном случае увеличение количества ограничений позволяет как можно раньше обрабатывать ошибки.
- На отдельные значения (например, Возраст как целое положительное число или Вероятность как вещественное от 0 до 1)
- На записи (например, Начало интервала меньше его Конца)
- На наборы записей одного типа (например, Номера паспортов должны быть уникальными)
- На связи данных (например, Студент учится ровно в одной Группе)