Понятие данных: определение, примеры
Данные привычно ассоциируются с программированием и в современном информационном мире представляются в трех логически эквивалентных вариантах: данные, описанные и используемые в программе на языке программирования; данные в системах баз данных; данные в распределенных информационных системах. Современное программирование только первому варианту формализации информации предоставило относительную свободу. Вторые два варианта - это в той или иной степени достоверные формы предоставления информации и взаимосвязей между ее составляющими.
Данные прошлого и настоящего
Принципиальная позиция языков программирования - точное описание данных и алгоритмов. Компьютеры не «представляют» никаких шансов неопределенности: есть то, над чем производится действие, и есть команда, которая совершает это действие.
Современная концепция основывается на значительно более высоком основании: есть данное, а каким именно оно будет, определяется в месте его использования. В любом случае в момент использования данное автоматически проверяется и преобразуется в нужный тип. Современный программист не обязан заботиться о предварительном их описании и соблюдении совместимости типов в алгоритме.
Процесс перехода:
- от типизированных данных и обязательного их описания перед использованием;
- к нетипизированным данным и свободе от всяких обязательств по их описанию и использованию.
По сути, можно признать относительное послабление требований формализации - оно доступно только в среде современных средств программирования. В момент исполнения тип каждого данного фиксирован, а последовательность команд четко определена.
Типы и моделирование
Математика и физика, торговое дело и производство, экономика и другие сферы, где применяются числа, всегда оперировали данными и не придавали никакого значения понятию типа. То, что числа могут быть целыми и дробными, не имело особого значения.
Каждая конкретная формула или конкретное действие могли дать целое, бесконечную дробь, вещественное или комплексное число. До сих пор есть такие чудеса разума, как бесконечно малая и бесконечно большая величина. Причем у этих чудес даже свойства есть.
В программировании до сих пор нет никакой свободы. Все должно быть строго формализовано. Понятие данных - это, прежде всего, тип:
- integer;
- boolean;
- char;
- string и так далее.
Наименования типов могут отличаться в различных языках программирования, но всегда есть целое или вещественное число, логическое значение, символ, строка. Остались еще реликты и специфические идеи: целое без знака, код, байт, слово, двойное слово, строка фиксированной длины.
Понятие данных у системы данных не имеет никакой свободы. Язык SQL - «международный» (есть диалект для каждой современной базы данных) - не терпит никаких неточностей не только в данных, но и в sql-запросах. Ошибка в запросе - гарантия отсутствия результата. Про нарушения описаний говорить вовсе не приходится.
Моделирование информационных процессов и представлений данных является единственным верным способом построить такую структуру, которую можно развивать и адаптировать к изменяющимся условиям.
Динамика исходного
Естественная информация - это непрерывное изменение. Дать формальное описание и понятие модели данных в конкретной предметной области означает решить три задачи:
- определить, что такое здесь данные;
- формализовать взаимосвязи между ними;
- сформулировать процессы изменения данных и взаимосвязей.
Пример совокупности данных простого алгоритма на JavaScript - уменьшенная копия модели даже самой солидной системы управления базами.
Просто во втором случае эксперты и специалисты, проектируя структуры данных, таблицы и взаимосвязи, обычно не видят (реально трудно охватить большой объем естественной информации) суть вещей, и получается громоздкая, неразвиваемая совокупность нагромождений данных, в то время как в предметной области исходная информация циркулирует свободно и легко.
Статика возможного
Обычная практика JavaScript - код, подключенный к страничке, и функции, назначенные событиям на ее тегах. При любом положении вещей теги странички определяют данные, которые принимает, изменяет или создает данный веб-ресурс.
Если предельно внимательно сконцентрировать код обработчиков на событиях элементов, а не на коде страницы в целом - это лучший выход из ситуации. Идеально, когда код не вводит новое данное или не фиксирует доступное, а ориентируется на то, чем именно он располагает в конкретный момент времени.
По сути, если дать определение понятию "данные" как минимально статичному описанию исходной информации и последовать ему, то это значит иметь шансы на успех.
В отношении баз данных все гораздо сложнее. Любой JavaScript код - это «обеспечение» странички функционалом. Любая база данных - это совокупность таблиц, связей между ними, хранимых процедур, запросов и функциональности, доступной извне.
Статика - беда любого алгоритма. Современное понятие данных - это статика: число, строка, символ и так далее. При обработке или при записи в таблицу базы данных все получается складно. Но когда исходное приобретает другую размерность или смысл? Вариант один: менять табличку, но могут сразу посыпаться связи и запросы.
Статика и объекты
Определение понятия "данные" как объекта кардинально меняет ситуацию. Объект имеет собственную структуру. Тут можно применять любые описания любых переменных. Роли не сыграет. Объект имеет методы, через которые данные доступны. Поскольку все используется в сфере программирования, то есть три базовых метода: читать, писать, изменять. Можно добавить еще сравнивать, искать, клонировать и пр.
Предметная область на каждое данное накладывает спектр свойств. Таким образом получается, что понятие данных трансформируется в некое описание, которое может быть изменено динамично. Статика внутри объекта дает динамику за его пределами.
Изменяя комбинацию статичных описателей внутри объекта, можно не беспокоиться за динамику его отношений с другими объектами.
Программирование и представление данных
Что такое данные? Общественное сознание уже привыкло к информационным технологиям, работает в облаках и имеет контейнеры в виртуальных пространствах. Теперь в вопросах информации и ее использования компетентны не только профессиональные программисты и пользователи, но и обыватели.
Однако что такое программирование? По сей день общественное мнение дает следующее определение данному понятию и его концепциям:
- Информация и данные - это базовые понятия, которые используются в информатике.
- Данные представляют собой определенным образом полученные и зафиксированные наблюдения относительно окружающей действительности.
- Они бывают простые и сложные (структуры), первичные и вторичные.
- База данных - это совокупность самостоятельных материалов, представленных в систематизированной форме так, чтобы они были найдены, изменены и использованы.
Насколько это объективно? Авторитетные авторы считают, что да. Реальная практика склоняется к тому, что каждая предметная область определят свою правильную систему данных и дает все возможности построить хорошую динамичную модель.
Нередки случаи, когда заказчик (потребитель) навязывает программисту (проектировщику базы данных) собственное мнение, как и что делать. С точки зрения программирования всякое желание заказчика можно исполнить предельно точно.
Нужен Oracle для решения задачи составления смет на обслуживание сельского водопровода (на селе 21 строение) - хорошо. Нужен MySQL для организации системы слежения за почтовыми отправлениями по всем почтовым отделениям России - тоже все будет работать.
Всегда можно составить любой алгоритм и обеспечить доступ к любому представлению информации в пределах того определения понятия данных, которое устанавливает разработчик системы управления базами или языка программирования. Вопрос в другом: как это сделать минимальными затратами в максимальной динамике?
Базы данных, примеры
Простая база создается без модели. Основные понятия данных и связи невелики, функционал очень простой. К примеру, для высшего учебного заведения необходимы:
- таблица преподавателей;
- таблица групп (ключ и номер группы);
- общая таблица студентов (используются ключи групп).
Декан желает знать успеваемость по преподавателям. Таблица преподавателей имеет поля:
- фамилия;
- имя;
- отчество;
- номер курируемой группы.
Таблица студентов имеет поля:
- фамилия;
- имя;
- отчество;
- дата рождения;
- средний балл (по всем предметам);
- номер группы.
Вариантов выборки может быть как минимум два: через имя преподавателя можно выйти на номер группы и посмотреть всех студентов и их средние балы либо по фамилии преподавателя и фамилии студента можно посмотреть средний бал последнего.
Даже в таком простом варианте гарантированы проблемы и придется что-то менять. Ситуация: преподаватель заболел, месяц его замещает другой, значит, курирует две группы. Предусмотрено только одно поле под одним номером группы в таблице преподавателей.
Для решения проблемы нужно добавлять дублирующее поле. А если два заболеют, то добавлять три поля. Так таблица преподавателей начинает расти на пустом месте.
Есть еще один вариант: заменить цифровое поле ключа группы на символьное. Тогда придется каждый раз при выборке преобразовывать строку в последовательность ключей, и один sql-запрос превратится в несколько.
Более перспективный пример - не делать таблицы, а сделать объекты. Тогда преподаватель - это объект, и у него может быть несколько курируемых групп. Но это всегда один объект. У объекта преподаватель есть уникальный ключ, но может быть несколько курируемых групп. У группы есть также уникальный ключ. У студента тоже.
Все три позиции не только доступны в пределах поставленной задачи, но и могут развиваться дальше.
Объектно-ориентированные базы
Лидеры информационной отрасли предлагают классические реляционные базы данных. Они проверены жизнью, работают, безопасны, надежны и, в случае проблем, позволяют восстановить информацию.
Объектно-ориентированные базы данных (ООБД) начали разрабатываться еще в середине 1980-х и, по мнению авторитетных авторов, перспективны по сей день. Но пока, кроме фундаментальных теорий и концептуальных положений, нет ни одной ООБД, достигшей такого же рейтинга и распространения, как MySQL, MS SQL Server или Oracle во всех его многообразных воплощениях.
Но что делать, если определение, понятие данных, виды, атрибуты, классы, иерархии предлагает разработчик, рейтинг которого недостаточен для создания сообщества программистов, исповедующих менталитет данной ООБД? Придется надеяться на свои силы.
В среде линуксоидов создано более тридцати вариантов ООБД. Но где гарантия, что созданная база данных не потребует большей функциональности? Среда Windows не отличается большими гарантиями в этой области.
Объектно-ориентированный вариант решения
Однако решение все же есть. На примере MySQL можно показать, как стандартные реляционные таблицы превращаются в объектно-ориентированную модель решаемой задачи.
Здесь нет базы данных, но есть среда для формирования собственной системы объектов. Мощности MySQL используются только как реляционная память для таблиц из информационных строк. Логику использования определяет сам разработчик. В частности, есть таблица is_cache. В ней всего несколько основных полей:
- owner_code;
- session_code;
- h_code;
- a_surprise;
- a_contents.
Остальные поля несут в себе служебные функции. Данная таблица стоит на входе любого запроса и фиксирует его поступление. Что отработает модель базы данных, определяет ее разработчик. Что поместится в поле содержания (a_contents), определяют объекты модели, созданной разработчиком.
В такой идее есть четыре момента: обращение, сессия обращения, код истории обращений и конкретное содержание. Что такое обращение, какая система объектов должна быть построена - определяет разработчик. Что понимать под сессией (процессом работы) - определяет разработчик. Код истории - это возможность отката по обращениям.
Таблицы здесь не имеют никакого отношения к предметной области. Есть контроллер обращений (is_cache), есть протоколирование (is_customs), есть история обращений (is_histories). Остальные таблицы определяются решаемой задачей.
По сути, такое решение предлагает создавать собственную ООБД на базе построенной модели базы данных предметной области и решаемой задачи. Здесь есть огромный плюс - это собственное понятие данных, собственная модель их представления и взаимосвязей между ними. Здесь есть фундамент - отличная реляционная база данных. Здесь не будет проблем что-то искать и что-то недопонимать.
Модель: система объектов + СУБД
Изменить что-либо в информационных технологиях практически невозможно. До реальной информационной революции еще далеко. Профессиональное сознание разработчиков программного обеспечения не собирается изменять классическим традициям. Но выход из ситуации все же есть.
Используя надежные современные системы управления базами данных как основания для создания среды существования собственной модели, можно достичь заметного успеха.
Строить представление или модель данных придется в любом случае для решения поставленной задачи, но надо это делать правильно: пусть это будет система объектов, а хорошая СУБД - средой ее существования.