В КУРСЕ?

Разбираемся в теме

Массив, объект и база данных: почему номер элемента не заменяет идентификатор записи?

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

Объект объединяет данные и поведение

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

Массив задаёт порядок элементов

Для примера используем массив с нумерацией от нуля, как в обычных массивах C#. Три элемента находятся на позициях ноль, один и два. На позиции ноль сейчас может лежать объект с идентификатором сорок один. Если отсортировать предметы по названию, на той же позиции окажется другой объект. Следовательно, индекс отвечает на вопрос о положении в текущем массиве, а идентификатор о том, какой именно предмет имеется в виду. Перед обращением к элементу нужно учитывать допустимые границы индекса.

База данных хранит записи и связи

В реляционной модели можно создать отдельные таблицы экспонатов и залов. У зала есть собственный ключ, а запись экспоната содержит ссылку на этот зал. Первичный ключ служит уникальным обозначением строки; внешний ключ помогает поддерживать связь с существующей записью другой таблицы. Ограничения должны быть действительно настроены и применяться выбранной системой. Просто назвать столбец номером зала недостаточно, чтобы автоматически запретить ошибочную ссылку. Такая структура также не является тем же самым, что массив объектов в памяти программы.

Изменение объекта и сохранение являются разными действиями

Если программа изменила название у объекта в памяти, это ещё не означает, что новое значение записано в базу. Нужен предусмотренный механизм сохранения и проверка его результата. При следующей загрузке данные снова получают из выбранного хранилища. В учебном проекте полезно явно различать чтение, изменение и сохранение. Тогда легче объяснить, почему после перезапуска старое название вернулось. Также нельзя связывать записи разных таблиц по случайному порядку строк: для связи используются значения ключей и условия запроса.

Попробуйте на практике

Постройте бумажную модель трёх музейных экспонатов и двух залов.

  1. Создайте три карточки объектов с идентификаторами сорок один, сорок два и сорок три. Придумайте названия и присвойте каждому один из двух условных залов.
  2. Разложите карточки в массив и подпишите позиции ноль, один и два. Запишите, какой идентификатор находится на каждой позиции.
  3. Переставьте карточки по алфавиту названий. Сравните новые позиции с идентификаторами и объясните, какие значения изменились, а какие сохранились.
  4. Нарисуйте две таблицы: залы и экспонаты. Покажите связь по номеру зала и найдите ошибку в вымышленной записи со ссылкой на несуществующий третий зал.
  5. Измените название на одной карточке объекта, оставив таблицу прежней. Объясните, какое отдельное действие требуется, чтобы обновление появилось в сохранённых данных.

Как проверить результат. Вы различаете индекс и идентификатор, можете показать связь между таблицами и объяснить, почему изменение объекта в памяти не гарантирует сохранения.

Частые вопросы

Может ли идентификатор случайно совпасть с индексом?

Да, но совпадение значений не делает их одной сущностью. После перестановки элементов индекс может измениться, а идентификатор продолжает обозначать тот же предмет.

Если используется ООП, база данных больше не нужна?

Нет. ООП относится к организации программы, а база данных решает задачи хранения и обработки данных. В проекте они могут использоваться совместно.

Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.

Зарегистрируйтесь, чтобы уточнить возможность доступа к этому материалу

Зарегистрироваться
← К списку материалов