Требования к базам данных — различия между версиями
(→Типы данных) |
(→Ограничения целостности) |
||
(не показано 7 промежуточных версий этого же участника) | |||
Строка 6: | Строка 6: | ||
* Как эти данные хранятся | * Как эти данные хранятся | ||
* Права доступа к этим данным | * Права доступа к этим данным | ||
− | Это не единственный возможный подход, так как мы можем хранить произвольные blob. Однако для осуществления каких-либо действий с этими данными мы должны иметь представление о том, что у нас хранится. | + | Это не единственный возможный подход, так как мы можем хранить произвольные blob (Binary large object). Однако для осуществления каких-либо действий с этими данными мы должны иметь представление о том, что у нас хранится. |
=== Данные === | === Данные === | ||
'''Важно'''. В зависимости от объема данных и требуемой скорости мы можем применять совершенно разные подходы к их хранению, и это совершенно нормально. | '''Важно'''. В зависимости от объема данных и требуемой скорости мы можем применять совершенно разные подходы к их хранению, и это совершенно нормально. | ||
Строка 13: | Строка 13: | ||
Есть несколько способов разделения типов данных на группы. | Есть несколько способов разделения типов данных на группы. | ||
=== Простые и структурированные === | === Простые и структурированные === | ||
− | * Простые типы данных: в терминах базы данных мы не оперируем их частями (например, '' | + | * Простые типы данных: в терминах базы данных мы не оперируем их частями (например, ''Целое число'', ''Дата'' или ''Фамилия''). Естественно, в данном случае при последующей обработке можно использовать любые операции, однако не стоит рассчитывать на их эффективность. |
* Структурированные данные: мы хотим оперировать их частями при выполнении запросов (например, ''Адрес'' или ''Телефон'') | * Структурированные данные: мы хотим оперировать их частями при выполнении запросов (например, ''Адрес'' или ''Телефон'') | ||
+ | |||
=== Сущности и связи сущностей === | === Сущности и связи сущностей === | ||
* Сущности: соответствуют Entity Type (например, ''Студент'', ''Группа'' или ''Предмет'') | * Сущности: соответствуют Entity Type (например, ''Студент'', ''Группа'' или ''Предмет'') | ||
− | * Связи сущностей: связи сущностей между собой (например, ''Студент'' состоит в ''Группе'' или ''Оценка'' ''Студента'' по ''Предмету'') | + | * Связи сущностей: связи сущностей между собой (например, ''Студент'' состоит в ''Группе'' или ''Оценка'' ''Студента'' по ''Предмету''). Для определения вида связи может использоваться термин ''нагруженная'' (как ''Оценка'' в предыдущем примере). |
== Ограничения целостности == | == Ограничения целостности == | ||
− | Для баз данных очень важны ограничения целостности. Мы заранее хотим прописать как можно больше проверок, которые не позволят добавить в базу невалидные данные. | + | Для баз данных очень важны ограничения целостности. Мы заранее хотим прописать как можно больше проверок, которые не позволят добавить в базу невалидные данные, так как в базу мы кладем данные для длительного хранения. В момент обнаружения их невалидности может оказаться, что нет возможности их исправить. Это и мотивирует отлавливать наибольшее количество ошибок в данных еще на этапе их внесения в базу. В данном случае увеличение количества ограничений позволяет как можно раньше обрабатывать ошибки. |
* На отдельные значения (например, ''Возраст'' как целое положительное число или ''Вероятность'' как вещественное от 0 до 1) | * На отдельные значения (например, ''Возраст'' как целое положительное число или ''Вероятность'' как вещественное от 0 до 1) | ||
* На записи (например, ''Начало'' интервала меньше его ''Конца'') | * На записи (например, ''Начало'' интервала меньше его ''Конца'') | ||
* На наборы записей одного типа (например, ''Номера'' паспортов должны быть уникальными) | * На наборы записей одного типа (например, ''Номера'' паспортов должны быть уникальными) | ||
* На связи данных (например, ''Студент'' учится ровно в одной ''Группе'') | * На связи данных (например, ''Студент'' учится ровно в одной ''Группе'') |
Версия 18:41, 26 декабря 2021
Содержание
Разделение структуры и данных
Схема базы данных
В базах данных мы разделяем структуру и данные. У нас присутствует схема базы данных, в которой описано:
- Какие данные мы храним
- Как эти данные хранятся
- Права доступа к этим данным
Это не единственный возможный подход, так как мы можем хранить произвольные blob (Binary large object). Однако для осуществления каких-либо действий с этими данными мы должны иметь представление о том, что у нас хранится.
Данные
Важно. В зависимости от объема данных и требуемой скорости мы можем применять совершенно разные подходы к их хранению, и это совершенно нормально.
Типы данных
Есть несколько способов разделения типов данных на группы.
Простые и структурированные
- Простые типы данных: в терминах базы данных мы не оперируем их частями (например, Целое число, Дата или Фамилия). Естественно, в данном случае при последующей обработке можно использовать любые операции, однако не стоит рассчитывать на их эффективность.
- Структурированные данные: мы хотим оперировать их частями при выполнении запросов (например, Адрес или Телефон)
Сущности и связи сущностей
- Сущности: соответствуют Entity Type (например, Студент, Группа или Предмет)
- Связи сущностей: связи сущностей между собой (например, Студент состоит в Группе или Оценка Студента по Предмету). Для определения вида связи может использоваться термин нагруженная (как Оценка в предыдущем примере).
Ограничения целостности
Для баз данных очень важны ограничения целостности. Мы заранее хотим прописать как можно больше проверок, которые не позволят добавить в базу невалидные данные, так как в базу мы кладем данные для длительного хранения. В момент обнаружения их невалидности может оказаться, что нет возможности их исправить. Это и мотивирует отлавливать наибольшее количество ошибок в данных еще на этапе их внесения в базу. В данном случае увеличение количества ограничений позволяет как можно раньше обрабатывать ошибки.
- На отдельные значения (например, Возраст как целое положительное число или Вероятность как вещественное от 0 до 1)
- На записи (например, Начало интервала меньше его Конца)
- На наборы записей одного типа (например, Номера паспортов должны быть уникальными)
- На связи данных (например, Студент учится ровно в одной Группе)