Подходы к хранению и использованию данных
Если попросить несколько неподготовленных людей структурировать один и тот же набор данных, то, скорее всего, мы получим различные варианты.
Распространённый и наглядный вариант — создание структуры в виде таблицы, но таблицы с одними и теми же данными также формируются разными способами.
Начинаем работать с данными
База данных учеников
Рассмотрим задачу по созданию структуры для хранения данных средних оценок учеников за пройденные курсы. Для каждого ученика требуется записать следующую информацию:
- Имя и фамилия ученика.
- Курсы, которые ученики проходили в рамках обучения.
- Количество уроков каждого курса.
- Оценка, полученная учеником по итогу прохождения курса.
Предварительный вариант структуры
Создадим таблицу, в строках которой мы храним все важные данные. Заметим, что записи об одном и том же ученике иногда повторяются, так как ученик может пройти несколько курсов.
Ученик | Курс | Количество уроков | Оценка |
Иванов Игорь | Базы данных, поток 54 от 12.11.2020 | 4.9 | |
Павлова Анастасия | Базы данных, поток 54 от 12.11.2020 | ||
Иванов Игорь | Linux. Рабочая станция, поток 48 от 02.10.2020 | ||
Иванов Игорь | Основы Python, поток 45 от 18.08.2020 | 4.9 |
Таблица 1. Предварительный вариант базы данных
|
|
В целом такой вариант выглядит неплохо. Проанализируем эту структуру на недостатки.
Рассмотрим проблемные места предварительной реализации
Составные значения в ячейках
Первое, на что стоит обратить внимание — значения в столбцах «Ученик» и «Курс» непростые, а состоят из нескольких атрибутов. Недостаток такого подхода в том, что когда записей в нашей базе данных станет много, искать по некоторым значениям будет сложнее, чем по другим.
Например, получится легко отсортировать и найти подходящего ученика по фамилии, нежели по имени. Аналогичная ситуация и с данными в столбце «Курс» — искать по дате начала обучения будет сложнее, чем по названию курса.
Таким образом, часть значений в нашей структуре — составные. Например, в таблице 2 такие значения выделяются красным цветом.
Ученик | Курс | Количество уроков | Оценка |
Иванов Игорь | Базы данных, поток 54 от 12.11.2020 | 4.9 | |
Павлова Анастасия | Базы данных, поток 54 от 12.11.2020 | ||
Иванов Игорь | Linux. Рабочая станция, поток 48 от 02.10.2020 | ||
Иванов Игорь | Основы Python, поток 45 от 18.08.2020 | 4.9 |
Таблица 2. Составные (неатомарные) значения базы данных учеников