Требования к базам данных — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Простые и структурированные)
м (rollbackEdits.php mass rollback)
 
(не показано 6 промежуточных версий 3 участников)
Строка 1: Строка 1:
 
== Разделение структуры и данных ==
 
== Разделение структуры и данных ==
 
=== Схема базы данных ===
 
=== Схема базы данных ===
В базах данных мы разделяем структуру и данные.  
+
В базах данных традиционно мы разделяем структуру и данные. На языке баз данных описание струтуры называется схемой базы данных.  
У нас присутствует схема базы данных, в которой описано:
+
Таким образом у нас присутствует схема базы данных, в которой описано:
 
* Какие данные мы храним
 
* Какие данные мы храним
 
* Как эти данные хранятся
 
* Как эти данные хранятся
 
* Права доступа к этим данным
 
* Права доступа к этим данным
Это не единственный возможный подход, так как мы можем хранить произвольные blob (Binary large object). Однако для осуществления каких-либо действий с этими данными мы должны иметь представление о том, что у нас хранится.
+
Блягодаря схеме мы, аналогично ООП, отделяем описание данных от самих данных. Это не единственный возможный подход, так как мы можем хранить произвольные blob (Binary large object). Однако для осуществления каких-либо действий с этими данными мы должны иметь представление о том, что у нас хранится.
 +
 
 
=== Данные ===
 
=== Данные ===
 
'''Важно'''. В зависимости от объема данных и требуемой скорости мы можем применять совершенно разные подходы к их хранению, и это совершенно нормально.
 
'''Важно'''. В зависимости от объема данных и требуемой скорости мы можем применять совершенно разные подходы к их хранению, и это совершенно нормально.
Строка 17: Строка 18:
  
 
=== Сущности и связи сущностей ===
 
=== Сущности и связи сущностей ===
* Сущности: соответствуют Entity Type (например, ''Студент'', ''Группа'' или ''Предмет'')
+
* Сущности: соответствуют Entity Type, чему-то из реального мира (например, ''Студент'', ''Группа'' или ''Предмет'')
* Связи сущностей: связи сущностей между собой (например, ''Студент'' состоит в ''Группе'' или ''Оценка'' ''Студента'' по ''Предмету''). Для определения вида связи может использоваться термин нагруженная (как ''Оценка'' в предыдущем примере).
+
* Связи сущностей: связи сущностей между собой (например, ''Студент'' состоит в ''Группе'' или ''Оценка'' ''Студента'' по ''Предмету''). Для определения вида связи может использоваться термин ''нагруженная'' (как ''Оценка'' в предыдущем примере).
  
 
== Ограничения целостности ==
 
== Ограничения целостности ==
Для баз данных очень важны ограничения целостности. Мы заранее хотим прописать как можно больше проверок, которые не позволят добавить в базу невалидные данные, так как в базу мы кладем данные для длительного хранения. В момент обнаружения их не валидности может оказаться, что нет возможности их исправить. Это и мотивирует отлавливать наибольшее количество ошибок в данных еще на этапе их внесения в базу. В данном случае увеличение количества ограничений позволяет как можно раньше обрабатывать ошибки.
+
Для баз данных очень важны ограничения целостности. Мы заранее хотим прописать как можно больше проверок, которые не позволят добавить в базу невалидные данные, так как в базу мы кладем данные для длительного хранения. В момент обнаружения их невалидности может оказаться, что нет возможности их исправить. Это и мотивирует отлавливать наибольшее количество ошибок в данных еще на этапе их внесения в базу. В данном случае увеличение количества ограничений позволяет как можно раньше обрабатывать ошибки.
 
* На отдельные значения (например, ''Возраст'' как целое положительное число или ''Вероятность'' как вещественное от 0 до 1)
 
* На отдельные значения (например, ''Возраст'' как целое положительное число или ''Вероятность'' как вещественное от 0 до 1)
 
* На записи (например, ''Начало'' интервала меньше его ''Конца'')
 
* На записи (например, ''Начало'' интервала меньше его ''Конца'')
 
* На наборы записей одного типа (например, ''Номера'' паспортов должны быть уникальными)
 
* На наборы записей одного типа (например, ''Номера'' паспортов должны быть уникальными)
 
* На связи данных (например, ''Студент'' учится ровно в одной ''Группе'')
 
* На связи данных (например, ''Студент'' учится ровно в одной ''Группе'')

Текущая версия на 19:41, 4 сентября 2022

Разделение структуры и данных

Схема базы данных

В базах данных традиционно мы разделяем структуру и данные. На языке баз данных описание струтуры называется схемой базы данных. Таким образом у нас присутствует схема базы данных, в которой описано:

  • Какие данные мы храним
  • Как эти данные хранятся
  • Права доступа к этим данным

Блягодаря схеме мы, аналогично ООП, отделяем описание данных от самих данных. Это не единственный возможный подход, так как мы можем хранить произвольные blob (Binary large object). Однако для осуществления каких-либо действий с этими данными мы должны иметь представление о том, что у нас хранится.

Данные

Важно. В зависимости от объема данных и требуемой скорости мы можем применять совершенно разные подходы к их хранению, и это совершенно нормально.

Типы данных

Есть несколько способов разделения типов данных на группы.

Простые и структурированные

  • Простые типы данных: в терминах базы данных мы не оперируем их частями (например, Целое число, Дата или Фамилия). Естественно, в данном случае при последующей обработке можно использовать любые операции, однако не стоит рассчитывать на их эффективность.
  • Структурированные данные: мы хотим оперировать их частями при выполнении запросов (например, Адрес или Телефон)

Сущности и связи сущностей

  • Сущности: соответствуют Entity Type, чему-то из реального мира (например, Студент, Группа или Предмет)
  • Связи сущностей: связи сущностей между собой (например, Студент состоит в Группе или Оценка Студента по Предмету). Для определения вида связи может использоваться термин нагруженная (как Оценка в предыдущем примере).

Ограничения целостности

Для баз данных очень важны ограничения целостности. Мы заранее хотим прописать как можно больше проверок, которые не позволят добавить в базу невалидные данные, так как в базу мы кладем данные для длительного хранения. В момент обнаружения их невалидности может оказаться, что нет возможности их исправить. Это и мотивирует отлавливать наибольшее количество ошибок в данных еще на этапе их внесения в базу. В данном случае увеличение количества ограничений позволяет как можно раньше обрабатывать ошибки.

  • На отдельные значения (например, Возраст как целое положительное число или Вероятность как вещественное от 0 до 1)
  • На записи (например, Начало интервала меньше его Конца)
  • На наборы записей одного типа (например, Номера паспортов должны быть уникальными)
  • На связи данных (например, Студент учится ровно в одной Группе)