Разное

С работа с базами данных: 11. Работа с базами данных. Информатика и вычислительная техника

Содержание

11. Работа с базами данных. Информатика и вычислительная техника

11.1. Основные понятия баз данных

11.1.1. Базы данных и системы управления базами данных

11.1.2. Структура простейшей базы данных

11.1.3. Свойства полей базы данных

11.1.4. Типы данных

11.1.5. Безопасность баз данных

11.2. Проектирование баз данных

11.2.1. Режимы работы с базами данных

11.2.2. Объекты базы данных

11.2.3. Проектирование базы данных

11.3. Работа с СУБД Microsoft Access 2000

11.3.1. Общие замечания

11.3.2. Работа с таблицами

11.3.3. Работа с запросами

11.3.4. Работа с формами

11.3.5. Работа с отчетами

11.3.6. Практическое занятие

11.1. Основные понятия баз данных

11.1.1. Базы данных и системы управления базами данных

База данных — это организованная структура, предназначенная для хранения информации. Поскольку данные и информация — понятия взаимосвязанные, но не тождественные, то следует заметить некоторое несоответствие в этом определении. Его причины чисто исторические. В те годы, когда формировалось понятие баз данных, в них действительно хранились только данные. Однако сегодня большинство систем управления базами данных (СУБД) позволяют размещать в своих структурах не только данные, но и методы (то есть программный код), с помощью которых происходит взаимодействие с потребителем или с другими программно-аппаратными комплексами. Таким образом, мы можем говорить, что в современных базах данных хранятся отнюдь не только данные, но и информация.

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

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

В мире существует множество систем управления базами данных. Несмотря на то что они могут по-разному работать с разными объектами и предоставляют пользователю различные функции и средства, большинство СУБД опираются на единый устоявшийся комплекс основных понятий. Это дает нам возможность рассмотреть одну систему и обобщить ее понятия, приемы и методы на весь класс СУБД. В качестве такого учебного объекта мы выберем СУБД Microsoft Access, входящую в пакет Microsoft Office наряду с пакетами Microsoft Word и Microsoft Excel. В тех случаях, когда конкретные приемы операций зависят от используемой версии программы, мы будем опираться на последнюю версию Microsoft Access 2000, хотя в основном речь будет идти о таких обобщенных понятиях и методах, для которых различия между конкретными версиями программ второстепенны.

11.1.2. Структура простейшей базы данных

Сразу поясним, что если в базе нет никаких данных (пустая база), то это все равно полноценная база данных. Этот факт имеет методическое значение. Хотя данных в базе и нет, но информация в ней все-таки есть — это структура базы. Она определяет методы занесения данных и хранения их в базе. Простейший «некомпьютерный» вариант базы данных — деловой ежедневник, в котором каждому календарному дню выделено по странице. Даже если в нем не записано ни строки, он не перестает быть ежедневником, поскольку имеет структуру, четко отличающую его от записных книжек, рабочих тетрадей и прочей писчебумажной продукции.

Базы данных могут содержать различные объекты, но, забегая вперед, скажем, что основными объектами любой базы данных являются ее таблицы. Простейшая база данных имеет хотя бы одну таблицу. Соответственно, структура простейшей базы данных тождественно равна структуре ее таблицы, рис. 11.1.

Мы знаем, что структуру двумерной таблицы образуют столбцы и строки. Их аналогами в структуре простейшей базы данных являются поля и записи. Если записей в таблице пока нет, значит, ее структура образована только набором полей. Изменив состав полей базовой таблицы (или их свойства), мы изменяем структуру базы данных и, соответственно, получаем новую базу данных.

Рис. 11.1. Простая таблица базы данных

11.1.3. Свойства полей базы данных

Поля базы данных не просто определяют структуру базы — они еще определяют групповые свойства данных, записываемых в ячейки, принадлежащие каждому из полей. Ниже перечислены основные свойства полей таблиц баз данных на примере СУБД Microsoft Access.

  • Имя поля — определяет, как следует обращаться к данным этого поля при автоматических операциях с базой (по умолчанию имена полей используются в качестве заголовков столбцов таблиц).
  • Тип поля — определяет тип данных, которые могут содержаться в данном поле.
  • Размер поля — определяет предельную длину (в символах) данных, которые могут размещаться в данном поле.
  • Формат поля — определяет способ форматирования данных в ячейках, принадлежащих полю.
  • Маска ввода — определяет форму, в которой вводятся данные в поле (средство автоматизации ввода данных).
  • Подпись — определяет заголовок столбца таблицы для данного поля (если подпись не указана, то в качестве заголовка столбца используется свойство Имя поля).
  • Значение по умолчанию — то значение, которое вводится в ячейки поля автоматически (средство автоматизации ввода данных).
  • Условие на значение — ограничение, используемое для проверки правильности ввода данных (средство автоматизации ввода, которое используется, как правило, для данных, имеющих числовой тип, денежный тип или тип даты).
  • Сообщение об ошибке — текстовое сообщение, которое выдается автоматически при попытке ввода в поле ошибочных данных (проверка ошибочности выполняется автоматически, если задано свойство Условие на значение).
  • Обязательное поле — свойство, определяющее обязательность заполнения данного поля при наполнении базы;
  • Пустые строки — свойство, разрешающее ввод пустых строковых данных (от свойства Обязательное поле отличается тем, что относится не ко всем типам данных, а лишь к некоторым, например к текстовым).
  • Индексированное поле — если поле обладает этим свойством, все операции, связанные с поиском или сортировкой записей по значению, хранящемуся в данном поле, существенно ускоряются. Кроме того, для индексированных полей можно сделать так, что значения в записях будут проверяться по этому полю на наличие повторов, что позволяет автоматически исключить дублирование данных.

Здесь мы должны обратить особое внимание читателя на то, что поскольку в разных полях могут содержаться данные разного типа, то и свойства у полей могут различаться в зависимости от типа данных. Так, например, список вышеуказанные свойств полей относится в основном к полям текстового типа. Поля других типов могут иметь или не иметь эти свойства, но могут добавлять к ним и свои. Например для данных, представляющих действительные числа, важным свойством является количество знаков после десятичной запятой. С другой стороны, для полей, используемых для хранения рисунков, звукозаписей, видеоклипов и других объектов OLE, большинство вышеуказанных свойств не имеют смысла.

11.1.4. Типы данных

  • Таблицы баз данных, как правило, допускают работу с большим количеством разных типов данных. Так, например, базы данных Microsoft Access работают со следующими типами данных.
  • Текстовый — тип данных, используемый для хранения обычного неформатированного текста ограниченного размера (до 255 символов).
  • Мемо — специальный тип данных для хранения больших объемов текста (до 65 535 символов). Физически текст не хранится в поле. Он хранится в другом месте базы данных, а в поле хранится указатель на него, но для пользователя такое разделение заметно не всегда.
  • Числовой — тип данных для хранения действительных чисел.
  • Дата/время — тип данных для хранения календарных дат и текущего времени.
  • Денежный — тип данных для хранения денежных сумм. Теоретически, для их записи можно было бы пользоваться и полями числового типа, но для денежных сумм есть некоторые особенности (например, связанные с правилами округления), которые делают более удобным использование специального типа данных, а не настройку числового типа.
  • Счетчик — специальный тип данных для уникальных (не повторяющихся в поле) натуральных чисел с автоматическим наращиванием. Естественное использование — для порядковой нумерации записей
  • Логический — тип для хранения логических данных (могут принимать только два значения, например Да или Нет).
  • Поле объекта OLE — специальный тип данных, предназначенный для хранения объектов OLE, например мультимедийных. Реально, конечно, такие объекты в таблице не хранятся. Как и в случае полей МЕМО, они хранятся в другом месте внутренней структуры файла базы данных, а в таблице хранятся только указатели на них (иначе работа с таблицами была бы чрезвычайно замедленной).
  • Гиперссылка — специальное поле для хранения адресов URL Web-объектов Интернета. При щелчке на ссылке автоматически происходит запуск браузера и воспроизведение объекта в его окне.
  • Мастер подстановок — это не специальный тип данных. Это объект, настройкой которого можно автоматизировать ввод в данных поле так, чтобы не вводить их вручную, а выбирать из раскрывающегося списка.

11.1.5. Безопасность баз данных

Базы данных — это тоже файлы, но работа с ними отличается от работы с файлами других типов, создаваемых прочими приложениями. Выше мы видели, что всю работу по обслуживанию файловой структуры берет на себя операционная система. Для баз данных предъявляются особые требования с точки зрения безопасности, поэтому в них реализован другой подход к сохранению данных.

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

Базы данных — это особые структуры. Информация, которая в них содержится, очень часто имеет общественную ценность. Нередко с одной и той же базой (например, с базой регистрации автомобилей в ГИБДД) работают тысячи людей по всей стране. От информации, которая содержится в некоторых базах, может зависеть благополучие множества людей. Поэтому целостность содержимого базы не может и не должна зависеть ни от конкретных действий некоего пользователя, забывшего сохранить файл перед выключением компьютера, ни от перебоев в электросети.

Проблема безопасности баз данных решается тем, что в СУБД для сохранения информации используется двойной подход. В части операций, как обычно, участвует операционная система компьютера, но некоторые операции сохранения происходят в обход операционной системы.

Операции изменения структуры базы данных, создания новых таблиц или иных объектов происходят при сохранении файла базы данных. Об этих операциях СУБД предупреждает пользователя. Это, так сказать, глобальные операции. Их никогда не проводят с базой данных, находящейся в коммерческой эксплуатации, — только с ее копией. В этом случае любые сбои в работе вычислительных систем не страшны.

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

Обычно, решив отказаться от изменений в документе, его просто закрывают без сохранения и вновь открывают предыдущую копию. Этот прием работает почти во всех приложениях, но только не в СУБД. Все изменения, вносимые в таблицы базы, сохраняются на диске без нашего ведома, поэтому попытка закрыть базу «без сохранения» ничего не даст, так как все уже сохранено. Таким образом, редактируя таблицы баз данных, создавая новые записи и удаляя старые, мы как бы работаем с жестким диском напрямую, минуя операционную систему.

Предупреждение. По указанным выше причинам нельзя заниматься учебными экспериментами на базах данных, находящихся в эксплуатации. Для этого следует создавать специальные учебные базы или выполнять копии структуры реальных баз (без фактического наполнения данными).

11.2. Проектирование баз данных

11.2.1. Режимы работы с базами данных

Обычно с базами данных работают две категории исполнителей. Первая категория — проектировщики. Их задача состоит в разработке структуры таблиц базы данных и согласовании ее с заказчиком. Кроме таблиц проектировщики разрабатывают и другие объекты базы данных, предназначенные, с одной стороны, для автоматизации работы с базой, а с другой стороны — для ограничения функциональных возможностей работы с базой (если это необходимо из соображений безопасности). Проектировщики не наполняют базу конкретными данными (заказчик может считать их конфиденциальными и не предоставлять посторонним лицам). Исключение составляет экспериментальное наполнение модельными данными на этапе отладки объектов базы.

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

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

11.2.2. Объекты базы данных

Мы уже упомянули о том, что кроме таблиц база данных может содержать и другие типы объектов. Привести полную классификацию возможных объектов баз данных затруднительно, поскольку каждая система управления базами данных может реализовать свои типы объектов. Однако основные типы объектов мы можем рассмотреть на примере СУБД Microsoft Access. В версии Microsoft Access 2000 эта СУБД позволяет создавать и использовать объекты семи различных типов.

Таблицы. Как мы уже говорили, это основные объекты любой базы данных. Во-первых, в таблицах хранятся все данные, имеющиеся в базе, а во-вторых, таблицы хранят и структуру базы (поля, их типы и свойства).

Запросы. Эти объекты служат для извлечения данных из таблиц и предоставления их пользователю в удобном виде. С помощью запросов выполняют такие операции как отбор данных, их сортировку и фильтрацию. С помощью запросов можно выполнять преобразование данных по заданному алгоритму, создавать новые таблицы, выполнять автоматическое наполнение таблиц данными, импортированными из других источников, выполнять простейшие вычисления в таблицах и многое другое, рис. 11.2.

Начинающие пользователи не сразу понимают роль запросов, поскольку все те же операции можно делать и с таблицами. Да, действительно, это так, но есть соображения удобства (в первую очередь быстродействия) и соображения безопасности.

Из соображений безопасности, чем меньше доступа к базовым таблицам имеют конечные пользователи, тем лучше. Во-первых, снижается риск того, что неумелыми действиями они повредят данные в таблицах. Во-вторых, предоставив разным пользователям разные запросы, можно эффективно разграничить их доступ к данным в строгом соответствии с кругом персональных обязанностей. В банках, например, одни сотрудники имеют доступ к таблицам данных о клиентах, другие — к их расчетным счетам, третьи — к таблицам активов банка. Если и есть специальные службы, имеющие доступ ко всем информационным ресурсам банка (с целью контроля и анализа), то они лишены средств для внесения изменений — все сделано так, чтобы один человек не мог совершить фиктивную операцию, независимо от того, какую должность он занимает. В базе данных, имеющей правильно организованную структуру, для совершения противоправных действий необходим сговор нескольких участников, а такие действия пресекаются не программными, а традиционными средствами обеспечения безопасности.

Рис. 11.2. Структура простого запроса

Особенность запросов состоит в том, что они черпают данные из базовых таблиц и создают на их основе временную результирующую таблицу. Если хотят подчеркнутьфакт “временности” этой таблицы, то ее еще называют моментальным снимком. Когда мы работаем с основными таблицами базы, мы физически имеем дело с жестким диском, то есть с очень медленным устройством (напомним, что это связано с особенностью сохранения данных, описанной выше). Когда же на основании запроса мы получаем результирующую таблицу, то имеем дело с электронной таблицей, не имеющей аналога на жестком диске, — это только образ отобранных полей и записей. Разумеется, работа с “образом” происходит гораздо быстрее и эффективнее — это еще одно основание для того, чтобы широко использовать запросы.

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

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

Формы. Если запросы — это специальные средства для отбора и анализа данных, то формы — это средства для ввода данных. Смысл их тот же — предоставить пользователю средства для заполнения только тех полей, которые ему заполнять положено. Одновременно с этим в формеможно разместить специальные элементы управления (счетчики, раскрывающиеся списки, переключатели, флажки и прочие) для автоматизации ввода. Преимущества форм раскрываются особенно наглядно, когда происходит ввод данных с заполненных бланков. В этом случае форму делают графическими средствами так, чтобы она повторяла оформление бланка — это заметно упрощает работу наборщика, снижает его утомление и предотвращает появление печатных ошибок. На сопроводительном рисунке приведен пример простейшей формы для ввода данных.

С помощью форм данные можно не только вводить, но и отображать. Запросы тоже отображают данные, но де

Работа с базой данных

Модель работы с базой данных


Модель базы данных «1С:Предприятия 8» имеет ряд особенностей, отличающих ее от классических моделей систем управления базами данных (например, основанных на реляционных таблицах), с которыми имеют дело разработчики в универсальных системах.


Основное отличие заключается в том, что разработчик «1С:Предприятия 8» не обращается к базе данных напрямую. Непосредственно он работает с платформой «1С:Предприятия 8». При этом он может:

  • описывать структуры данных в конфигураторе,
  • манипулировать данными с помощью объектов встроенного языка,
  • составлять запросы к данным, используя язык запросов.


Платформа «1С:Предприятия 8» обеспечивает операции исполнения запросов, описания структур данных и манипулирования данными, транслируя их в соответствующие команды. Это могут быть команды системы управления базами данных, в случае клиент-серверного варианта работы, или команды собственного движка базы данных для файлового варианта.


Общая система типов


Важной особенностью работы с базой данных является то, что в «1С:Предприятии 8» реализована общая система типов языка и полей баз данных. Иными словами, разработчик одинаковым образом определяет поля базы данных и переменные встроенного языка и одинаковым образом работает с ними.


Этим система «1С:Предприятие 8» выгодно отличается от универсальных инструментальных средств. Обычно, при создании бизнес-приложений с использованием универсальных сред разработки, используются отдельно поставляемые системы управления базами данных. А это значит, что разработчику приходится постоянно заботиться о преобразованиях между типами данных, поддерживаемыми той или иной системы управления базами данных, и типами, поддерживаемыми языком программирования.

Хранение ссылок на объекты


При манипулировании данными, хранящимися в базе данных «1С:Предприятия 8», зачастую используется объектный подход. Это значит, что обращение (чтение и запись) к некоторой совокупности данных, хранящихся в базе, происходит как к единому целому. Например, используя объектную технику, можно манипулировать данными справочников, документов, планов видов характеристик, планов счетов и т.д.


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


Эта ссылка также хранится в поле базы данных, вместе с остальными данными объекта. Кроме того, ссылка может быть использована как значение какого-либо поля другого объекта. Например, ссылка на объект справочника Контрагенты может быть использована как значение соответствующего реквизита документа Приходная накладная.

Составные типы


Существенной возможностью модели данных, которая поддерживается «1С:Предприятием 8», является то, что для поля базы данных можно определить сразу несколько типов данных, значения которых могут храниться в этом поле. При этом значение в каждый момент времени будет храниться одно, но оно может быть разных типов — как ссылочных, так и примитивных — число, строка, дата и т.п.:



Такая возможность очень важна для экономических задач — например, в расходной накладной в качестве покупателя может быть указано либо юридическое лицо из справочника организаций, либо физическое лицо из справочника частных лиц. Соответственно, при проектировании базы данных разработчик может определить поле, которое будет хранить значение любого из этих типов.

Хранение любых данных как Хранилище значения


Идеология создания прикладных решений в «1С:Предприятии 8» предполагает, что все файлы, имеющие отношение к данному прикладному решению, нужно хранить в самой базе данных.


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


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

Создание и обновление структур данных на основе метаданных


В процессе создания или модификации прикладного решения разработчик избавлен от необходимости каких-либо действий по непосредственному изменению структуры полей базы данных прикладного решения.


Разработчику достаточно путем визуального конструирования описать структуру используемых объектов прикладного решения, состав их реквизитов, табличных частей, форм и пр.


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


Например, для того, чтобы в справочнике сотрудников появилась возможность хранить сведения о составе семьи сотрудника, разработчику «1С:Предприятия 8» не нужно создавать в базе данных специальную новую таблицу, задавать правила, по которым данные, хранящиеся в этой таблице, будут связаны с данными из основной таблицы, программировать алгоритмы совместного доступа к данным этих таблиц, создавать алгоритмы проверки прав доступа к данным, находящимся в подчиненной таблице и пр.


Все, что требуется сделать разработчику — щелчком мыши добавить к справочнику табличную часть и задать два ее строковых реквизита: Имя и Родство. При сохранении или обновлении конфигурации платформа самостоятельно выполнит реорганизацию структуры базы данных, создаст необходимые таблицы и т.д.

Объектный / табличный доступ к данным


Штатной возможностью «1С:Предприятия 8» является поддержка двух способов доступа к данным — объектного (для чтения и записи) и табличного (для чтения).


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



При манипулировании данными в объектной модели обеспечивается сохранение целостности объектов, кэширование объектов, вызов соответствующих обработчиков событий и т.д.


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



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

Правильная организация баз данных | Трепачёв Дмитрий


Сейчас мы с вами поговорим о правильной организации баз данных.

Пусть у нас дана вот такая таблица users:

id
айди
name
имя
city
город
1КоляМинск
2ВасяМинск
3ПетяМосква
4ИванМосква
5БогданКиев

Недостатком этой таблицы является то, что один и тот же город
повторяется несколько раз для разных юзеров. Это приводит
к некоторым проблемам.

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

Во-вторых, достаточно неудобно выполнять операции с городами.
К примеру, мы хотим вывести на экран список все городов. Так просто
это сделать не получится. Нам придется получить всех юзеров вместе с их городами,
затем удалить дубли из полученных городов (чтобы, к примеру, Минск не встречался несколько
раз в нашем списке) и только тогда мы получим этот список.

А теперь представим, что в базе 10000 юзеров из 10 городов — ради
этих 10 городов нам придется достать всю таблицу из 10000 строк —
получится очень медленная операция с бессмысленной тратой ресурсов.

Что же делать? Нужно разбить нашу таблицу на две:
в одной будут хранится города, а во второй — юзеры.
При этом в таблице с юзерами будет колонка city_id,
которая будет ссылаться на город юзера.

Итак, давайте сделаем две таблицы — cities (города)
и users (юзеры).

Таблица cities:

id
айди
name
название
1Минск
2Москва
3Киев

Таблица users:

id
айди
name
имя
city_id
айди города
1Коля1
2Вася1
3Петя2
4Иван2
5Богдан3

Вот теперь наша база данных правильно организована или, по научному,
нормализована.

Давайте сделаем запрос, который достанет всех
юзеров вместе с их городами. Для этого нам понадобится
команда LEFT JOIN:

SELECT *, cities.name as city_name
FROM users LEFT JOIN cities ON cities.id=users.city_id

В результате SQL запрос выберет следующие строки:

id
айди
name
имя
city_id
айди города
city_name
название города
1Коля1Минск
2Вася1Минск
3Петя2Москва
4Иван2Москва
5Богдан3Киев

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

А с точки зрения города это связь один ко многим
одному городу принадлежит много юзеров.

Пусть теперь юзер был в разных городах.

В этом случае таблица users могла бы иметь следующий вид:

id
айди
name
имя
cities
города
1КоляМинск, Москва
2ВасяМинск, Киев
3ПетяМосква, Киев

Однако, эта таблица опять с теми же проблемами. Кроме того — добавляется
еще проблема — очень тяжело выбрать всех юзеров, к примеру, из Минска
(так как все города юзера хранятся в одном поле через запятую).

Чтобы исправить ситуацию, двух таблиц (с городами и юзерами) будет мало.
Нужна будет так называемая таблица связи (назовем ее rel),
которая будет хранить связь между юзером и его городами.

Таблица rel будет иметь колонку user_id и колонку city_id.
Каждая запись в этой таблицы будет символизировать одну связь.
То есть связь Коля-Минск — это одна запись, а связь Коля-Москва —
это вторая запись.

Итак, вот наша таблица rel:

id
айди
user_id
айди юзера
city_id
айди города
111
112
221
323
432
533

Более понятно будет с пояснениями, где какой юзер и где какой город
(это просто мои пояснения, в таблицы этого конечно же нет):

id
айди
user_id
айди юзера
city_id
айди города
11 Коля1 Минск
11 Коля2 Москва
22 Вася1 Минск
32 Вася3 Киев
43 Петя2 Москва
53 Петя3 Киев

Таблица с городами cities останется такой же,
как и в предыдущей задачи:

id
айди
name
название
1Минск
2Москва
3Киев

А таблица с юзерами users будет выглядеть так (обратите внимание —
никаких связей нет, они все живут в таблице rel):

id
айди
name
имя
1Коля
2Вася
3Петя

Давайте сделаем запрос,
с помощью которого вытащим юзеров вместе с их городами.
Для этого нам понадобится два LEFT JOIN:

SELECT *, cities.name as city_name
FROM users
LEFT JOIN rel ON rel.user_id=users.id
LEFT JOIN cities ON rel.city_id=cities.id

В результате SQL запрос выберет следующие строки
(один юзер будет в нескольких строках таблицы — столько раз,
сколько городов с ним связано):

id
айди
name
имя
city_name
название города
1КоляМинск
1КоляМосква
2ВасяМинск
2ВасяКиев
3ПетяКиев

Родственные связи

Давайте решим следующую задачу:
отец имеет одного сына, сын тоже в свою очередь может иметь сына — и так далее.
Нужно придумать таблицу, в которой будем хранить данные.

Первая идея, которая может прийти вам в голову — сделать 2 таблицы:
первая — это parents (отцы), а вторая — sons
сыновья и связать их каким-нибудь полем.

Однако, это идея не очень хорошая — ведь один и тот же человек может
быть одновременно и отцом и сыном — и придется хранить его в обоих таблицах
(это неудобно, занимает больше место и легко приводит к ошибкам).

Более хороший вариант — связать таблицу саму с собой:
сделаем таблицу users, в ней будем хранить все юзеров и каждому сделаем
поле son_id, в котором будет храниться id сына из этой же таблицы:

id
айди
name
имя
son_id
айди сына
1Коля2
2Вася3
3Петяnull

Интересный подход и не зная его — тяжело догадаться так сделать,
поэтому запоминайте:)

Давайте теперь сделаем запрос, с помощью которого
вытянем юзеров вместе с их сыновьями.
В этом случае в LEFT JOIN
обязательно использовать as для
переименования таблицы (так как запрос делается по одной и той же таблице):

SELECT *, sons.name as son_name
FROM users
LEFT JOIN users as sons ON sons.id=users.son_id

Отец имеет несколько сыновей

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

id
айди
name
имя
father_id
айди отца
1Коляnull
2Вася1
3Петя1

Двойная связь

Решим такую задачу: есть города (таблица cities)
и маршруты между городами (таблица routes).
Каждый маршрут имеет город начала и город конца:

id
айди
from_city_id
айди города отправления
to_city_id
айди города прибытия
112
234

Напомню таблицу cities с городами:

id
айди
name
название
1Минск
2Москва
3Киев

Некоторую сложность здесь представляет SQL запрос
на вытягивания маршрутов — в этом случае
нам необходимо сделать два LEFT JOIN
к одной и той же таблице cities — в этом случае
эту таблицу необходимо два раза переименовать через as:

SELECT *, from_cities.name as from_city_name, to_cities.name as to_city_name
FROM routes
LEFT JOIN cities as from_cities ON from_cities.id=users.from_city_id
LEFT JOIN cities as to_cities ON to_cities.id=users.to_city_id

Связь один к одному

юзер — профиль

Денормализация

Нормальные формы

http://i-novice.net/6-normalnyx-form-bd/

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Когда все решите — переходите к изучению новой темы.

Как работать с базами данных Microsoft Access

Основным предназначением этой программы является создание и работа с базами данных, которые могут быть подвязаны как под мелкие проекты, так и под крупный бизнес. С её помощью вам будет удобно управлять данными, редактировать и хранить информацию.

Приложение пакета Microsoft Office — Access — служит для работы с базами данных

Создание новой базы данных

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

Откройте программу и перейдите в главное меню, нажав на команду «Файл», а там выберите пункт «Создать». Создавая новую базу, вам на выбор будет представлена пустая страница, которая будет иметь в себе одну таблицу либо же веб-база данных, позволяющая вам пользоваться встроенными инструментами программы для, например, ваших публикаций в интернете.

Кроме того, для максимального упрощения создания новой базы, пользователю на выбор предоставлены шаблоны, позволяющие создать базу, ориентированную на конкретную задачу. Это, между прочим, может помочь вам быстро создать необходимую форму таблицу, не настраивая всё вручную.

Наполнение базы данных информацией

Создав базу, необходимо её заполнить соответствующей информацией, структуру которой стоит заранее продумать, ведь функциональность программы позволяет оформлять данные в нескольких формах:

  1. Сейчас самым удобным и распространённым видом структуризации информации является таблица. По своим возможностям и виду, таблицы в Access не сильно отличаются от таких же в Excel, что, в свою очередь, значительно упрощает перенос данных из одной программы в другую.
  2. Вторым способом внесения информации являются формы, они чем-то похожи на таблицы, однако, обеспечивают более наглядное отображение данных.
  3. Для подсчёта и вывода информации из вашей базы предусмотрены отчёты, которые позволят вам проанализировать и высчитать, например, ваши доходы или количество контрагентов, с которыми вы работаете. Они очень гибки и позволяют производить любые расчёты, в зависимости от внесённых данных.
  4. Получение и сортировка новых данных в программе осуществляется посредством запросов. С их помощью вы сможете найти определённые данные среди нескольких таблиц, а также создать или обновить данные.

Все вышеперечисленные функции находятся в панели инструментов, во вкладке «Создание». Там вы можете выбрать какой именно элемент желаете создать, а затем, в открывшемся «Конструкторе», настроить его под себя.

Создание базы данных и импортирование информации

Создав новую базу данных, единственным, что вы увидите, будет пустая таблица. Вы можете заняться её заполнением вручную либо наполнить копируя необходимую информацию из интернета. Обратите внимания, что каждая внесённая вами часть информации должна быть размещена в отдельной колонке, а каждая запись иметь личную строку. Кстати, колонки можно переименовать, чтобы лучше ориентироваться в их содержимом.

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

Все настройки импортирования находятся в отдельно вынесенной в панель управления вкладке, которая называется «Внешние данные». Здесь, в области «Импорт и связи», перечислены доступные форматы, среди которых документы Excel, Access, текстовые и XML-файлы, интернет-страницы, папки Outlook и т. д. Выбрав необходимый формат, с которого будет перенесена информация, вам потребуется указать путь к месторасположению файла. Если же она размещена на каком-либо сервере, программа потребует от вас ввести адрес сервера. По мере импорта вы столкнётесь с различными настройками, которые предназначены для корректного переноса данных в Access. Следуйте инструкциям программы.

Основные ключи и взаимосвязи таблиц

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

Например, у вас есть две таблицы, содержащие взаимосвязанную информацию. К примеру, они называются «День» и «План». Выбрав в первой таблице поле «понедельник», вы сможете связать его с каким-либо полем в таблице «План» и при наведении курсора на одно из этих полей, вы увидите информацию и связанные ячейки.

Подобные взаимосвязи облегчат читаемость вашей базы данных и наверняка увеличат её удобство и эффективность.

Чтобы создать взаимосвязь, перейдите во вкладку «Работа с базами данных» и в области «Отношения» выберите кнопку «Схема данных». В появившемся окне вы увидите все обрабатываемые базы данных. Следует обратить ваше внимание на то, что в базах данных должны быть специальные поля, предназначенные для внешних ключей. На нашем примере, если во второй таблице вы хотите отобразить день недели или число, оставьте пустое поле, назвав его «День». Также настройте формат полей, т. к. он должен быть одинаков для обеих таблиц.

Затем, открыв две таблицы, перетащите поле, которое вы хотите связать, в специально приготовленное поле для внешнего ключа. Появится окно «Изменение связей», в котором вы увидите отдельно выделенные поля. Чтобы обеспечить изменение данных в обеих связанных полях и таблицах, поставьте галочку напротив пункта «Обеспечение целостности данных».

Создание и виды запросов

Запрос является действием в программе, благодаря которому пользователь может редактировать или вносить информацию в базу данных. Фактически запросы делятся на 2 вида:

  1. Выборный запросы, благодаря которым программа достаёт определённую информацию и делает по ней расчёты.
  2. Запросы действия, добавляющие информацию в базу либо удаляющие её.

Выбрав «Мастер запросов» во вкладке «Создание», программа проведёт процесс создания определённого типа запроса. Следуйте инструкциям.

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

Например, вы можете создать выборный запрос по определённым параметрам. Если вы хотите увидеть информацию по конкретной дате или дню таблицы «День» за весь промежуток времени, вы можете настроить подобный запрос. Выберите пункт «Конструктор запросов», а в нём нужную вам таблицу. По умолчанию запрос будет выборным, это становится понятным, если глянуть на панель инструментов с выделенной там кнопкой «Выборка». Для того чтобы программа искала именно ту дату или день, который вам нужен, найдите строку «Условие отбора» и введите туда фразу [какой день?]. Запомните, запрос должен быть помещён в квадратные дужки [] и заканчиваться на знак вопроса либо на двоеточие.

Это лишь один из вариантов использования запросов. На самом деле, с их помощью также можно создавать новые таблицы, отбирать данные по критериям и т. д.

Настройка и использование форм

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

Откройте вкладку «Создание» и найдите пункт «Форма», нажав на который появится стандартная форма, основанная на данных вашей таблицы. Появившиеся поля с информацией подвергаются всяческим изменениям, включая высоту, ширину и т. д. Обратите внимание, что если в приведённой таблице присутствуют взаимосвязи, вы увидите их и сможете перенастроить в этом же окне. В нижней части программы вы увидите стрелки, которые позволят последовательно открывать каждый столбец вашей таблицы либо же сразу переместиться на первый и последний. Теперь каждая из них является отдельной записью, поля которой вы можете настроить, кликнув мышью на кнопку «Добавить поля». Изменённые и внесённые таким образом сведения отобразятся в таблице и во всех присоединённых к ней таблицах. После настройки форма, необходимо сохранить её, нажав комбинацию клавиш «Ctrl+S».

Создание отчёта

Основным предназначением отчётов является предоставлению пользователю общей сводки по таблице. Отчёт можно создать абсолютно любой, в зависимости от данных.

Программа даёт вам выбрать тип отчёта, предоставив несколько на выбор:

  1. Отчёт — будет создан автоотчёт, использующий всю предоставленную в таблице информацию, однако, данные не будут сгруппированы.
  2. Пустой отчёт — не заполненная форма, данные для которой вы сможете выбрать сами из необходимых полей.
  3. Мастер отчётов — поможет вам пройти процесс создания отчёта и проведёт группирование и форматирование данных.

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

Выше приведены все азы, которые помогут вам справится и настроить под себя программу Access, однако, её функциональность достаточно широка и предусматривает более тонкую настройку рассмотренных здесь функций.

НОУ ИНТУИТ | Работа с базами данных

Форма обучения:

дистанционная

Стоимость самостоятельного обучения:

бесплатно

Доступ:

свободный

Документ об окончании:

Уровень:

Для всех

Длительность:

6:44:00

Выпускников:

1655

Качество курса:

4.32 | 3.96


Данный курс предназначен для получения студентами представления об основных понятиях при работе с базой данных. Даются классификации баз данных и систем управления данными в рамках предмета "Информатика". Помимо лекций включены задания по лабораторным работам (2 работы со связанными списками и 4 лабораторные работы СУБД MS Access).


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


ISBN: 978-5-9556-0136-6

Теги: microsoft access, microsoft word, ms access, алгоритмы, базы данных, вторая нормальная форма, ключевое поле, нормальная форма, поиск, проектирование, реквизит, серверы, сетевая модель данных, создание базы данных, сортировка, составной ключ, третья нормальная форма, функциональные зависимости, элементы


Дополнительные курсы

 

2 часа 30 минут


Основные понятия баз данных

В лекции рассматривается общий смысл понятий базы данных (БД) и системы управления базами данных (СУБД). Даются основные понятия, относящиеся к базе данных такие, как алгоритм, кортеж, объект, сущность. Основные требования, предъявляемые к банку данных. Определения БД и СУБД.


Классификация БД и СУБД

В лекции рассматриваются вопросы классификации БД и СУБД. Даются понятия централизованных и распределенных баз данных. Описываются функции и функциональные возможности СУБД.


Проектирование баз данных

В лекции рассматриваются вопросы проектирования БД и СУБД. Подходы к проектированию СУБД. Архитектура СУБД. Методология проектирования БД. Основные этапы разработки БД.


Модели организации баз данных

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


Реляционный подход к построению инфологической модели

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


Работа с СУБД MS Access

В лекции рассматриваются объекты Microsoft Access. Даются понятия таблицы, запроса, формы, отчета. Для чего используются эти объекты и основные принципы работы с этими объектами.


Работа с формой

Освоение приемов работы с Microsoft Access, создание формы, работа с ней.

Django, начало работы с базой данных / Хабр

Знакомство с django, Работа с БД.

На Хабре существует много тем о django, с описанием различных вкусностей. Но мне не встречался пост, про начало пути, так сказать для новичка. Так что хочется написать короткое руководство начинающего бойца, по собственным шагам.

Cпасибо www.djbook.ru, русский перевод онлайн книги о django, именно отсюда я черпал данные для написания поста.

Далее по тексту я попытаюсь кратко описать общие сведения необходимые для работы с БД в django.


Начну с перечисления приложений с которыми я работал:

  1. python 2.6
  2. django 1.1.1
  3. postgreSQL 8.4.2
  4. python-psycopg2 2.0.8-0

здесь ссылка на то как установить django

Поскольку это описание собственного опыта, буду описывать всё по шагам, как делал я.

Первым шаг. Создание проекта

Для начала, нужно создать новый проект. Для этого нужно определиться с именем каталога проекта и местом его расположения. В выбранном каталоге выполним команду:
django-admin.py startproject hellowDjango


Данное действие приведёт к созданию шаблона нового проекта под названием hellowDjango. Подробнее о том, что происходит при выполнении команды можно прочитать здесь. Проект создан и пора переходить к следующему шагу.

Второй шаг, Настройка БД

Django может работать с множеством БД, но в данном примере я использую postgresql.

Я предполагаю, что БД у вас уже установлена и настроена. Если нет, то вот ссылка, которая помогла мне настроить мою БД на Ubuntu. Открываем файл настроек, settings.py находящийся в каталоге проекта hellowDjango, находим там такие строчки и модифицируем их до:
DATABASE_ENGINE = 'postgresql_psycopg2' #'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.

DATABASE_NAME = myDBName # Or path to database file if using sqlite3.

DATABASE_USER = myUserDB # Not used with sqlite3.

DATABASE_PASSWORD = myUserDBPasswor # Not used with sqlite3.


На всякий случай поясню:

  • ‘postgresql_psycopg2’ — драйвер через который приложение будет выполнять запросы к БД и получать данные;
  • myDBName — название БД;
  • myUserDB — основной пользователь БД;
  • myUserDBPasswor — пароль основного пользователя.

Теперь необходимо проверить, что всё настроено правильно, для этого нужно выполнить команду в каталоге проекта:

python manage.py shell

Данная команда запустит интерпретатор python с настройками проекта. В интерпретаторе проверим подключение к БД.
>>> from django.db import connection

>>> cursor = connection.cursor()

В случае ошибки в настройках, появится сообщение которое поможет внести нужные исправления.

Третий шаг, Создание приложения.

Приложение в django — набор модели БД и представления хранящиеся в одном пакете python. Для того что бы, создать приложение, необходимо находясь в каталоге проекта выполнить команду:

python manage.py startapp MyName

Эта команда создаст директорию MyName, в каталоге проекта hellowDjango, а так же создаст файлы «заготовки» приложения в каталоге MyName.

Четвёртый шаг, Описание модели.

Модель БД в django — описание таблиц на языке python. Для создания модели приложения необходимо отредактировать файл MyName/models.py. В модели описывается много классов, каждый из которых будет описывать одну таблицу БД, а свойство класса — это один столбец таблицы. Класс должен быть унаследован от models.Model описанного в пакете django.db.models. Свойства класса должны иметь типы описанные в пакете django.db.models. Все типы данных и их применение описаны здесь.

Я в своих целях использовал следующие типы данных:

  1. models.DateTimeField() — поле содержащее в себе Дату и Время
  2. models.CharField(max_length= xx) — Текстовое поле ограниченной длины. Длина строки = xx символов
  3. models.BooleanField() — Поле содержащие в себе булево значение
  4. models.ForeignKey() — ссылка на внешнюю таблицу
  5. models.PositiveIntegerField() — положительное целое значение
  6. models.URLField(max_length=хх) — ссылка на web страницу длина ссылки ограничена xx символами
  7. models.DateField() — поле содержащие Дату

При создании модели данных у меня возникла проблема с внешними ключами. При ссылке на внешнюю таблицу которая описывалась ниже происходила ошибка. Перестановка таблиц решила данную проблему. Отмечу, что при создании внешних ключей, django добавляет к имени поля с внешним ключом постфикс _id.

Для проверки корректности созданной модели необходимо выполнить команду:
python manage.py validate

После того как модель прошла проверку, можно посмотреть как django предложит сгенерировать таблицы. Для этого выполним ещё одну команду:
python manage.py sqlall MyName

Для создания модели в БД, выполним следующую команду:
python manage.py syncdb

Пятый шаг. Работа с БД в интерпретаторе.

Ниже представлены варианты вставки данных в БД

Запускаем интерпретатор
python manage.py shell
>>> import MyName.models as mo # импортируем все модели проекта

>>> type = mo.ProductClass() # создаём экземпляр класса Типы Продуктов

>>> type.class_name = ‘сырьё’ # название типа

>>> type.save() # записываем экземпляр в БД

>>> type

&lt ProductClass: ProductClass object&gt

# так же можно воспользоваться вставкой данных другого вида

>>> mo.Dealer(organization_name = «ООО Рога И Копыта»).save() # создаст запись в таблице Dealer

>>> mo.Dealer.objects.all() # выполняем выборку данных из таблицы Dealer

[&lt Dealer: ООО Рога И Копыта&gt] # поскольку запись в таблице только 1 то и коллекция содержит всего 1 элемент, обратиться к нему можно через индексы.

# если для создания записи будет не хватать каких либо данных вы уведите протокол ошибки. Например такой:

>>> mo.Product(name = ‘овёс’, price = 50, product_class = type).save()

Traceback (most recent call last):



IntegrityError: null value in column «diler_id» violates not-null constraint

>>> mo.Product(name = ‘овёс’, price = 50, product_class = type, diler = mo.Dealer.objects.all()[0]).save() # вторая запись в таблице Product

Теперь нужно поговорить о выборе данных из таблиц.

# полная выборка из таблицы

>>> mo.Product.objects.all()

[&lt Product: мука&gt, &lt Product: овёс&gt, &lt Product: рожь&gt]

# выборка по полю name

>>> mo.Product.objects.filter(name = 'овёс')

[&lt Product: овёс&gt]

# выборка по частичному совпадению

>>> mo.Product.objects.filter(name__contains = 'о')

[&lt Product: овёс&gt, &lt Product: рожь&gt]

Мы рассмотрели вставку и выборку данных.

Давайте рассмотрим варианты обновления записей.

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

>>> item2 = mo.Product.objects.get(name = 'овёс')

>>> item2.name = "овёс золотистый"

>>> item2.save()

Данный пример прост но имеет свой недостаток, он выполняет обновление всех полей записи, а не только тех которые изменились. Данный факт может привести к «гонке» пользователей, когда происходит массовое изменение данных в Таблице. Для решения такой проблемы правильно будет использовать метод update. Данный метод изменяет только указанные поля.
>>> mo.Product.objects.filter(id=3).update(name='oves')

1

>>> cole[2]

&lt Product: oves&gt

Последнее, что хочется описать, это удаление записей из БД.

Существует два способа удаления записей:

Первый удаление всех данных из таблицы
>>> cm.Dealer.objects.all()

[&lt Dealer: ООО Рога И Копыта&gt]

>>> cm.Dealer.objects.all().delete()

>>> cm.Dealer.objects.all()

[]


Второй удаление отобранных записей
>>> cm.ProductClass.objects.all()[0].id

1

>>> cm.ProductClass.objects.filter(id=1).delete()

>>> cm.ProductClass.objects.all()

[]


Более подробно о всех командах api работы с БД и можно почитать здесь.

Вот краткое описание возможностей работы с БД в django, надеюсь данная информация будет полезна.

Немного более развёнутую статью можно прочитать у меня в блоге

Файловая СУБД


Файловая СУБД — одна из систем управления базами данных, которую поддерживает платформа. Файловая СУБД разработана фирмой «1С» и является частью платформы.


Файловая СУБД хранит все данные в одном файле — файловой базе данных. Этот формат хранения данных разработан фирмой «1С» специально для прикладных решений 1С:Предприятия 8.



При создании платформы был необходим эффективный формат для создания на его основе легкого варианта 1С:Предприятия 8 для персонального использования и небольших рабочих групп. Формат должен был удовлетворять определенным требованиям, таким как, эффективность, поддержка UNICODE, возможность размещения всей информационной базы в одном файле. Использование этого варианта не должно было требовать установки дополнительного программного обеспечения у пользователя и каких-либо действий по администрированию.


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


По результатам исследования продуктов сторонних производителей и их анализа было принято решение о создании собственного «движка» базы данных, поддерживающего собственный формат хранения.

Техническая реализация работы с файловой базой данных


Файловая СУБД является частью платформы, поэтому при работе системы в файловом варианте толстый и тонкий клиенты самостоятельно осуществляют всю работу с данными.


В случае веб-клиента подключение к файловой базе данных выполняется через веб-сервер, и непосредственную работу с данными выполняет не клиентское приложение, а модуль расширения веб-сервера, который также содержит в себе файловую СУБД.



Взаимодействие элементов системы с файловой базой данных осуществляется по собственному протоколу обмена данными, разработанному фирмой «1С».

Talend на примере — Работа с базами данных

Работа с базами данных

Если вы используете Talend, то вполне вероятно, что в ближайшее время вы подключитесь к реляционной базе данных, либо для чтения данных, либо для записи данных, либо и того, и другого.

Эта серия статей поможет вам ориентироваться в многочисленных компонентах базы данных и метаданных репозитория, чтобы вы могли максимально использовать функциональные возможности Talend и иметь просто, но надежное соединение с базой данных. Наши примеры будут основаны на MySQL; но при необходимости обращаясь к другим поставщикам баз данных.Возможно, вам будет полезно загрузить последнюю версию MySQL, чтобы вы могли опробовать некоторые из описанных здесь методов.

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

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

Поддерживаемые поставщики баз данных

Помимо поддержки ряда поставщиков баз данных, таких как MySQL и Oracle, Talend также предоставляет несколько общих компонентов базы данных , чтобы помочь обеспечить связь с неподдерживаемыми поставщиками .

Метаданные

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

Создание подключения к базе данных репозитория

Чтобы создать новое соединение с базой данных в репозитории, щелкните правой кнопкой мыши Репозиторий-> Метаданные-> Подключения к базе данных и выберите опцию Создать соединение .Откроется диалоговое окно Подключение к базе данных .

Введите Name , Purpose и Description для подключения к базе данных. Используйте Name , которое предполагает его назначение, например, DevelopmentAccounts , указывая, что это соединение предназначено для development экземпляра вашей базы данных Accounts . В зависимости от вашей рабочей среды, я бы рекомендовал всегда устанавливать эти соединения с базой данных development или test и никогда — с производственной .Будьте последовательны в базах данных, к которым вы подключаетесь, и в соглашениях об именах, которые вы используете. Это позволяет избежать неудач в будущем.

Когда вы завершите шаг 1 этого диалога, нажмите Next , как показано на снимке экрана ниже.

Параметры подключения к базе данных

Шаг 2 диалогового окна Подключение к базе данных позволяет ввести параметры подключения к базе данных, к которой вы хотите подключиться.

Выберите DB Type , к которому вы хотите подключиться.Для некоторых поставщиков баз данных может быть несколько типов типов, которые вы можете выбрать, например, соединения Oracle поддерживаются с использованием OCI , RAC, SID и Service Name . После того, как вы выбрали тип БД, оставшаяся часть диалогового окна будет предварительно настроена для поставщика базы данных и типа соединения, которые вы выбрали. Как показано ниже, для MySQL у нас есть некоторые базовые настройки, которые нам нужно выполнить для подключения к базе данных MySQL 5 .

Когда вы заполнили эту страницу диалогового окна, вы можете Проверить ваше соединение, а затем нажать Finish .

Получить схему

Теперь, когда соединение с базой данных вашего репозитория установлено, щелкните правой кнопкой мыши ваше соединение с базой данных и выберите Получить схему во всплывающем меню . Откроется диалоговое окно Schema . Шаг 1 этого диалогового окна позволяет вам установить Условия фильтрации и Типы выбора .

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

Использовать фильтр имени

Эта опция позволяет фильтровать по имени объекта. Введите критерии в Установите фильтр имен Значение по умолчанию — % , что означает, что будут выбраны все объекты.

Используйте фильтр SQL

Эта опция позволяет вам написать свой собственный SQL-фильтр, введя SQL-запрос в Установите Sql-фильтр .Это позволяет вам выбирать объекты из одной из таблиц словаря базы данных, например, SELECT TNAME FROM TAB WHERE TNAME LIKE 'BAL%' .

Выберите типы

Параметр Select Types позволяет вам указать типы объектов базы данных для выбора. Вы можете выбрать таблицы, представления и синонимы.

Выбрать объекты

Этап 2 позволяет выбирать объекты. Вы можете развернуть узел в списке, нажав. Фильтр имен позволяет скрыть объекты из поля зрения.Выберите объекты, которые вы хотите импортировать, используя флажки слева от каждого узла. По завершении нажмите Далее . Обратите внимание, что вам может потребоваться дать Talend время для извлечения информации из базы данных, прежде чем эта кнопка станет доступной.

Тонкая настройка

Этап 3 позволяет вам внести некоторые окончательные поправки перед импортом. Это более полезно при просмотре ранее импортированных объектов. Для целей этого руководства мы оставим для этих параметров значения по умолчанию.Нажмите Finish , чтобы импортировать схему.

Простая работа

Теперь вы можете создать простое задание, которое будет считывать данные из вашей базы данных.

Создайте новое задание и перетащите один из объектов Table из репозитория в рабочее пространство Job . В показанном здесь примере будет использоваться таблица Users из каталога MySQL . Когда вы перетаскиваете объект на Workspace , вы можете выбрать компонент Talend, который следует использовать.Выберите по умолчанию , который является tMysqlInput (или входным компонентом базы данных для поставщика базы данных, который вы используете).

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

Добавьте компонент tLogRow в свое задание и соедините два компонента, используя Row-> Main . Теперь вы должны иметь возможность запускать свое задание и видеть данные, отображаемые в консоли Talend Console .Ваша завершенная работа и результаты должны выглядеть примерно так, как показано на скриншоте ниже.

Репозиторий, встроенный, существующее соединение или внешний?

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

Выберите компонент ввода базы данных, а затем выберите вкладку Component , как показано ниже.

Тип недвижимости

Тип свойства Позволяет указать, должны ли параметры подключения к базе данных быть взяты из репозитория (как в нашем примере) или встроенного для самого компонента.

Репозиторий

На первый взгляд, поддержка этого компонента с помощью соединения Repository кажется разумной идеей; однако вам нужно подумать о том, как ваша работа будет продвинута в среды Test и Production .Собираемся ли мы менять подключения к репозиторию каждый раз, когда хотим выполнить развертывание в другой среде?

Я предпочитаю использовать соединения Repository только в среде Development в качестве начального для написания заданий. После того, как я добавил объект базы данных в свою работу, я немедленно отключаю его от соединения репозитория (в отличие от разъединения его со схемой репозитория , которая будет обсуждаться позже).

Встроенный

Встроенный модуль позволяет жестко запрограммировать параметры соединения в этом компоненте (не делайте этого), использовать переменные контекста или использовать объекты globalMap.

Обычно я рекомендую использовать переменные контекста, а затем перенести их на внешний; однако с компонентами базы данных существует третий способ (который может косвенно использовать внешние переменные контекста ).

Использовать существующее соединение

Эта опция позволяет вам выбрать существующее соединение с базой данных, эффективно делегируя ответственность за соединение другому компоненту.В случае MySQL — компонент tMysqlConnection.

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

Вы все равно захотите перенести параметры подключения к базе данных во внешний; но теперь их можно настроить в рамках значительно уменьшенного числа компонентов, то есть компонента подключения к базе данных.Также см. Нашу загрузку LibMySQLSharedConnection и связанное с ней руководство Задание многоразового подключения к базе данных.

Добавьте в задание компонент подключения к базе данных, например tMysqlConnection, а затем подключите его к компоненту ввода базы данных с помощью Trigger-> On Subjob Ok . Выберите вкладку Component для этого нового компонента и установите Property Type для подключения к базе данных Repository . После того, как вы выбрали Repository , вам нужно будет нажать ... , чтобы выбрать элемент Репозиторий . Теперь вернитесь на вкладку Component ввода вашей базы данных и выберите опцию Use existing database connection . Вы должны увидеть, что отображается новый список Component List раскрывающийся список и что новое соединение с базой данных выбирается автоматически, как показано на снимке экрана ниже.

.

Заключение

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

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

Для получения дополнительной информации по этому вопросу прочтите наше руководство по заданию многоразового подключения к базе данных и взгляните на нашу загружаемую LibMySQLSharedConnection.

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

Твитнуть
Следуйте @TalendByExample

Пожалуйста, включите JavaScript, чтобы просматривать комментарии от Disqus.
комментарии предоставлены
.

Начало работы с базами данных

База данных

Выберите, чтобы значения даты и времени по умолчанию не проверялись.

Задайте путь по умолчанию для экспорта файлов DDL.

База данных: Advanced

Установите такие параметры, как размер выборки массива SQL и параметры отображения для нулевых значений.

База данных: Autotrace / Explain Plan

Укажите информацию, которая будет отображаться на страницах Autotrace и Explain Plan в таблице SQL.

База данных: перетаскивание

Укажите тип оператора SQL, созданного в рабочем листе SQL при перетаскивании объекта из окна «Базы данных» в рабочий лист SQL.

База данных: Лицензирование

Некоторые функции JDeveloper требуют, чтобы лицензии на определенные параметры Oracle Database действовали для подключения к базе данных, которое будет использовать эту функцию. На этой странице вы можете указать для каждого определенного соединения, есть ли в базе данных Oracle Change Management Pack, Oracle Tuning Pack и Oracle Diagnostics Pack.

Для каждой ячейки на этом экране (сочетание лицензии и подключения) значение может быть истинным (флажок), ложным (поле снят) или неуказанным (поле со сплошной заливкой).

Если параметр указан как истинный для соединения на этой панели, вам не будет предложено сообщение о том, что параметр требуется, когда вы используете это соединение для функции, для которой требуется этот параметр.

База данных: фильтр навигации

Укажите тип оператора SQL, созданного в рабочем листе SQL при перетаскивании объекта из окна «Базы данных» в рабочий лист SQL.

Управляйте типами объектов, которые отображаются в окне «Базы данных» для подключений к Oracle и сторонним базам данных.

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

База данных

: параметры драйвера JDBC

Зарегистрируйте и управляйте драйверами JDBC для драйвера JDBC BI и драйверами JDBC WebLogic для DB2, Informix, SQL Server и Sybase.

База данных: NLS

Укажите параметры поддержки глобализации, такие как язык, территорию, предпочтения сортировки и формат даты.

База данных: ObjectViewer

Укажите, следует ли замораживать окна средства просмотра объектов и отображать параметры вывода.

База данных: компилятор PL / SQL

Укажите опции для компиляции подпрограмм PL / SQL.

База данных: отчеты

Выберите, чтобы отчеты базы данных в JDeveloper закрывались при отключении базы данных.

Выберите предел количества строк для диаграммы. По умолчанию 1000.

База данных: SQL * Plus

Задайте путь к инструменту командной строки SQL * Plus.

База данных: шаблоны кода редактора SQL

Просмотр, добавление и удаление шаблонов для редактирования кода SQL и PL / SQL.Шаблоны кода помогают вам писать код быстрее и эффективнее, вставляя текст для часто используемых операторов.

База данных: средство форматирования SQL

Позволяет контролировать форматирование операторов в таблице SQL.

База данных: определяемые пользователем расширения

(Не используется JDeveloper.)

База данных: Утилиты

Предоставляет значения по умолчанию для мастеров и редакторов утилит

База данных: Рабочий лист

Укажите параметры для таблицы SQL.

Диаграммы: База данных

Задайте настройки, управляющие отображением диаграмм.

.

Работа с базами данных

Что касается удаленных подключений, мы будем использовать рекомендованный TCP / IP.
протокол.

Если вы хотите подключиться к базе данных или создать ее, вы должны предоставить, среди прочего,
вещи, строка подключения к клиентскому приложению (или, если вы
программист, к процедурам, которые вы вызываете). Строка подключения однозначно определяет
расположение базы данных на вашем компьютере, в локальной сети или даже в Интернете.

Явная строка локального подключения состоит из указания пути + имени файла в
собственный формат файловой системы, используемой на сервере, например

Многие клиенты также позволяют использовать строки относительного пути (например,
« .. \ examples \ empbuild \ employee.fdb »), но вы должны использовать
с осторожностью, так как не всегда очевидно, как они будут расширяться.Получение ошибки
сообщение достаточно раздражает, но применение изменений к другой базе данных, чем вы думали, вы
были связаны с может быть катастрофой.

Вместо пути к файлу строка локального подключения также может быть базой данных
псевдоним
, определенный в aliases.conf , как упоминалось ранее.
Формат псевдонима зависит только от того, как он определен в файле псевдонимов, а не от
файловая система сервера.Примеры:

  • заппа

  • блэкджек.fdb

  • покер

Наконечник

Если локальные соединения не работают, это может быть связано с тем, что локальный протокол не работает.
правильно на вашей машине.Если вы используете Windows Vista, 2003 или XP с терминалом
службы включены, это часто можно исправить, установив для IpcName значение
Global \ FIREBIRD в файле конфигурации
firebird.conf (не забудьте раскомментировать параметр и перезапустить
сервер).

Если установка IpcName не помогает, и вы не получаете локальный
протокол включен, вы всегда можете обойти проблему, поставив
« localhost: » перед путями или псевдонимами базы данных, таким образом
превращая их в строки подключения TCP / IP (обсуждается ниже).

строк подключения TCP / IP

Строка подключения TCP / IP состоит из:

  1. имя сервера или IP-адрес

  2. двоеточие («: »)

  3. либо абсолютный путь + имя файла на сервере, либо псевдоним, определенный на
    серверная машина.

Примеры:

  • В Linux / Unix:

    понго: /opt/firebird/examples/empbuild/employee.fdb

    бонго: ярость

    112.179.0.1: /var/Firebird/databases/butterflies.fdb

    локальный: blackjack.fdb

  • В Windows:

    siamang: C: \ Biology \ Data \ Primates \ Apes \ populations.fdb

    диван: D: \ Misc \ Friends \ Rich \ Lenders.fdb

    127.0.0.1:Заемщики

Обратите внимание, что строки подключения с псевдонимом не дают никакого представления о сервере.
ОПЕРАЦИОННЫЕ СИСТЕМЫ. И им тоже не нужно: вы разговариваете с сервером Linux Firebird так же, как говорите
на сервер Windows Firebird. Фактически, указание явного пути к базе данных является одним из
редкие случаи, когда нужно осознавать разницу.

Обратите внимание, что некоторые сторонние клиентские программы могут иметь другие требования для
состав связующих строк. Обратитесь к их документации или онлайн-справке, чтобы найти
вне.

Подключение к существующей базе данных

Пример базы данных с именем employee.fdb находится в
examples / empbuild подкаталог вашего Firebird
установка. Вы можете использовать эту базу данных, чтобы «попробовать свои силы».

Если вы перемещаете или копируете образец базы данных, обязательно поместите его на жесткий диск,
физически подключенный к вашей серверной машине. Общие, подключенные диски или (в Unix) смонтированный SMB
(Samba) файловые системы работать не будут. То же правило применяется к любым базам данных, которые вы создаете или
использовать.

Для подключения к базе данных Firebird требуется, чтобы пользователь аутентифицировался с помощью имени пользователя и
действующий пароль. Для работы с объектами внутри базы данных, такими как таблицы, представления,
и т. д. — вам также нужны явные разрешения для этих объектов, если вы не владеете ими (у вас есть
объект, если вы его создали) или если вы подключены как SYSDBA. В примере базы данных employee.fdb ,
PUBLIC предоставлены достаточные разрешения (т.е. любой, кто
заботится о подключении), чтобы вы могли просматривать и изменять данные по своему усмотрению.

Для простоты мы рассмотрим аутентификацию как SYSDBA с использованием пароля masterkey . Кроме того, чтобы сохранить
строки в примерах выходят за правый край, мы будем работать с локальными базами данных
и используйте относительные пути. Конечно, все, что вы узнаете в этих разделах, также можно
применяется к удаленным базам данных, просто предоставляя полную строку подключения TCP / IP.

Firebird поставляется с клиентом текстового режима с именем isql (интерактивный
Утилита SQL). Вы можете использовать его несколькими способами для подключения к базе данных. Один из них показан
ниже — запустить его в интерактивном режиме. Перейдите в подкаталог bin вашей установки Firebird и введите
isql (Windows) или ./isql (Linux) по команде
незамедлительный.

[В следующих примерах ↵ означает «нажмите , введите »]

 C: \ Program Files \ Firebird \ Firebird_2_5 \ bin> isql↵
Используйте CONNECT или CREATE DATABASE, чтобы указать базу данных
SQL> CONNECT .. \ examples \ empbuild \ employee.fdb пароль пользователя SYSDBA masterkey; ↵ 

Важно

  • В isql каждый оператор SQL должен заканчиваться
    точка с запятой.Если вы нажмете , введите , и строка не заканчивается
    точка с запятой, isql предполагает, что оператор продолжается на следующей строке, а приглашение
    изменится с SQL> на CON> . Это позволяет
    вы можете разбить длинные операторы на несколько строк. Если вы нажмете , введите
    после вашего утверждения и вы забыли точку с запятой, просто введите ее после
    CON> в следующей строке и нажмите Введите
    еще раз.

  • Если вы запускаете (супер) классический сервер в Linux, быстрое прямое локальное соединение
    предпринимается, если путь к базе данных не начинается с имени хоста. Это может потерпеть неудачу, если ваш
    Вход в систему Linux не имеет достаточных прав доступа к файлу базы данных. В этом случае,
    подключиться к localhost: <путь> .потом
    серверный процесс (обычно запущенный как пользователь firebird ) откроет файл. С другой стороны,
    подключения в сетевом стиле могут не работать, если пользователь создал базу данных в классическом локальном режиме.
    режиме и серверу не хватает прав доступа.

Примечание

При желании вы можете заключить путь, имя пользователя и / или пароль в один
( ') или двойные ( ") кавычки.Если путь содержит
пробелы, цитирование обязательно.

На этом этапе isql сообщит вам, что вы
связано:

 База данных: .. \ examples \ empbuild \ employee.fdb, Пользователь: sysdba
SQL> 

Теперь вы можете продолжить экспериментировать с сотрудником . Fdb
база данных. С помощью isql вы можете запрашивать данные, получать информацию о
метаданные, создавать объекты базы данных, запускать сценарии определения данных и многое другое.

Чтобы вернуться в командную строку, введите:

 SQL> QUIT; ↵ 

Вы также можете ввести EXIT вместо QUIT ,
разница в том, что EXIT сначала зафиксирует любые открытые транзакции,
делая ваши модификации постоянными.

Подключение с помощью GUI-клиента

Инструменты клиента с графическим интерфейсом

обычно берут на себя ответственность за создание CONNECT
строка для вас, используя сервер, путь (или псевдоним), имя пользователя и пароль, которые вы
введите текст в поля подсказки.Используйте элементы, как описано в предыдущем разделе.

Банкноты

  • Такие инструменты довольно часто ожидают, что весь сервер + путь / псевдоним будет
    одна строка подключения — точно так же, как это делает isql.

  • Помните, что имена файлов и команды в Linux и других «Unix-ish»
    платформы чувствительны к регистру.

Создание базы данных с использованием isql

Существует несколько способов создания базы данных с помощью isql.
Здесь мы рассмотрим один простой способ интерактивного создания базы данных — хотя для вашего
серьезная работа по определению базы данных, вы должны создавать и поддерживать свои объекты метаданных, используя
скрипты определения данных.

Для интерактивного создания базы данных с помощью команды isql
оболочки, перейдите в командную строку в Firebird bin
подкаталог и введите isql (Windows) или ./isql
(Linux):

[В следующих примерах ↵ означает «нажмите , введите »]

 C: \ Program Files \ Firebird \ Firebird_2_5 \ bin> isql↵
Используйте CONNECT или CREATE DATABASE, чтобы указать базу данных 
Оператор CREATE DATABASE

Теперь вы можете создавать новую базу данных в интерактивном режиме.Предположим, вы хотите
создайте базу данных с именем test.fdb и сохраните ее в каталоге с именем
Данные на вашем диске D :

 SQL> СОЗДАТЬ БАЗУ ДАННЫХ 'D: \ data \ test.fdb' page_size 8192↵
CON> пароль пользователя 'SYSDBA' masterkey '; ↵ 

Важно

  • В операторе CREATE DATABASE это
    обязательно для размещения кавычек (одинарных или двойных) вокруг
    путь, имя пользователя и пароль.Это отличается от CONNECT
    заявление.

  • Если вы запускаете (супер) классический сервер в Linux и не запускаете базу данных
    путь с именем хоста, попытка создания файла базы данных выполняется с вашим логином в Linux
    как собственник. Это может быть то, что вы хотите, а может и не быть (подумайте о правах доступа, если хотите
    другие, чтобы иметь возможность подключиться).Если вы добавите к пути localhost: , серверный процесс (обычно
    запущенный как пользователь firebird ) создаст и
    владеть файлом.

База данных будет создана, и через несколько секунд снова появится запрос SQL.
Теперь вы подключены к новой базе данных и можете приступить к созданию некоторых тестовых объектов в
Это.

Но чтобы убедиться, что там действительно есть база данных, давайте сначала напишем это
запрос:

 SQL> SELECT * FROM RDB $ RELATIONS; ↵ 

Хотя вы еще не создали ни одной таблицы, экран заполнится
большой объем данных! Этот запрос выбирает все строки в системной таблице
RDB $ RELATIONS, где Firebird хранит метаданные для таблиц.An
«Пустая» база данных на самом деле не пуста: она содержит ряд системных таблиц и
другие объекты. Системные таблицы будут расти по мере добавления новых пользовательских объектов в свой
база данных.

Чтобы вернуться в командную строку, введите ВЫЙТИ или
ВЫЙТИ , как описано в разделе о подключении.

Каждая система управления базами данных имеет свои особенности в способах реализации.
SQL.Firebird придерживается стандарта SQL более строго, чем большинство других СУБД. Разработчики
при переходе с продуктов, которые менее соответствуют стандартам, часто ошибочно полагают, что Firebird
является причудливым, в то время как многие его очевидные причуды совсем не причудливы.

Деление целого числа на целое

Firebird соответствует стандарту SQL, усекая результат (частное)
целочисленное / целочисленное вычисление до следующего меньшего целого числа.Это может привести к странным результатам, если только
вы знаете об этом.

Например, этот расчет верен в SQL:

Если вы обновляетесь с РСУБД, которая разрешает целочисленное / целочисленное деление до числа с плавающей запятой
частное, вам нужно будет изменить любые затронутые выражения, чтобы использовать числовое значение с плавающей запятой или масштабированное числовое
тип для делимого, делителя или обоих.

Например, приведенный выше расчет можно изменить таким образом, чтобы получить
ненулевой результат:

Что нужно знать о струнах

Строки в Firebird разделяются парой символов одинарной кавычки (апострофа):
'Я строка' (код ASCII 39, , а не 96).если ты
использовали более ранние версии родственника Firebird, InterBase®, вы можете вспомнить, что двойной и
одинарные кавычки были взаимозаменяемыми как разделители строк. Двойные кавычки нельзя использовать как
разделители строк в SQL-операторах Firebird.

Если вам нужно использовать апостроф внутри строки Firebird, вы можете
«Избежать» символа апострофа, поставив перед ним другой
апостроф.

Например, эта строка выдаст ошибку:

, потому что синтаксический анализатор обнаруживает апостроф и интерпретирует строку как
«Джо» , за которым следуют неизвестные ключевые слова. Чтобы сделать его допустимой строкой,
двойной символ апострофа:

Обратите внимание, что это ДВЕ одинарные кавычки, а не одна двойная кавычка.

Символ конкатенации в SQL — это два символа «вертикальной черты» (ASCII 124, в
пара без пробелов между ними). В SQL символ «+» является арифметическим оператором.
и это вызовет ошибку, если вы попытаетесь использовать его для объединения строк. В
следующее выражение ставит префиксы символьного значения столбца со строкой
« Сообщил: »:

'Автор:' || Фамилия

Firebird выдаст ошибку, если результат конкатенации строк превышает
максимальный размер символа (var) 32 Кб.Если только потенциальных результат — на основе
на размер переменной или поля — слишком длинный, вы получите предупреждение, но операция будет
завершено успешно. (В Firebird до 2.0 это тоже вызывало ошибку и останавливало
казнь.)

См. Также раздел ниже, Выражения, содержащие NULL, о конкатенации в
выражения, включающие NULL .

Идентификаторы в двойных кавычках

До стандарта SQL-92 было незаконным иметь имена объектов (идентификаторы) в
база данных, которая дублирует ключевые слова на языке, чувствительна к регистру или содержит
пробелы.SQL-92 представил единый новый стандарт, чтобы сделать любой из них законным при условии, что
идентификаторы были определены в парах символов двойных кавычек (ASCII 34) и были
всегда упоминается с использованием разделителей в двойных кавычках.

Целью этого «подарка» было облегчить перенос метаданных.
от нестандартных СУБД до соответствующих стандартам. Обратной стороной является то, что если вы
выберите определение идентификатора в двойных кавычках, его чувствительность к регистру и принудительный
использование двойных кавычек останется обязательным.

Firebird позволяет немного расслабиться в очень ограниченном наборе условий. Если
идентификатор, который был определен в двойных кавычках:

  1. был определен как все в верхнем регистре,

  2. — это не ключевое слово, а

  3. не содержит пробелов,

…затем его можно использовать в SQL без кавычек и без учета регистра. (Но как только ты
заключите его в двойные кавычки, вы должны повторить регистр снова!)

Предупреждение

Не слишком умничай! Например, если у вас есть таблицы
«TESTTABLE» и «TestTable», оба определены
в двойных кавычках, и вы вводите команду:

 SQL> выберите * из TestTable; 

…вы получите записи из «ТАБЛИЦЫ», а не
«TestTable»!

Если у вас нет веских причин для определения цитируемых идентификаторов, обычно
рекомендуется избегать их. Firebird с радостью принимает сочетание цитируемых и некотируемых
идентификаторы — поэтому нет проблем с включением того ключевого слова, которое вы унаследовали от
устаревшая база данных, если вам нужно.

Предупреждение

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

Выражения, содержащие NULL

В SQL NULL не является значением.Это условие, или
состояние элемента данных, значение которого неизвестно. Потому что это так
unknown, NULL не может вести себя как значение. Когда вы пытаетесь выполнить
арифметика для NULL или задействовать ее со значениями в других выражениях,
Результат операции почти всегда будет NULL . Это не ноль или
пустая или «пустая строка», и она не ведет себя как ни одна из этих
ценности.

Ниже приведены несколько примеров типов сюрпризов, которые вы получите, если попытаетесь выполнить
расчеты и сравнения с NULL .

Все следующие выражения возвращают NULL :

Вы могли ожидать 6 от первого выражения и « Home sweet
»из третьего, но, как мы только что сказали, NULL не
как число 0 или пустая строка — это гораздо более разрушительно!

Следующее выражение:

вернет NULL , если FirstName или
Фамилия — это NULL .В противном случае это будет красиво
соедините два имени с пробелом между ними — даже если любая из переменных является
пустой строкой.

Наконечник

Думайте о NULL как о НЕИЗВЕСТНО , и эти странные
результаты внезапно обретают смысл! Если значение Число равно
неизвестно, результат « 1 + 2 + 3 + Number » также неизвестен (и
следовательно, NULL ).Если содержимое MyString равно
неизвестно, значит, тоже ‘ MyString || YourString ‘(даже если
YourString не NULL ). И так далее.

Теперь давайте рассмотрим несколько примеров PSQL (Procedural SQL) с
, если -конструирует:

  •  если (a = b), то
      MyVariable = 'Равно';
    еще
      MyVariable = 'Не равно'; 

    После выполнения этого кода MyVariable будет 'Not
    равно '
    , если и a и b являются
    НЕТ .Причина в том, что 'a = b' дает
    NULL , если хотя бы один из них NULL . Если
    тестовое выражение оператора « if »
    NULL , ведет себя как false :
    Блок «, затем » пропускается, а блок «, затем »
    выполнен.

    Предупреждение

    Хотя выражение может вести себя как
    false в этом случае это все еще NULL . если ты
    попробуйте инвертировать его, используя not () , вы получите другое
    NULL — не « true ».

  •  если (a <> b), то
      MyVariable = 'Не равно';
    еще
      MyVariable = 'Равно'; 

    Здесь MyVariable будет 'Equal' , если
    a равно NULL и b нет, или
    наоборот. Объяснение аналогично предыдущему примеру.

На помощь приходит ключевое слово DISTINCT!

Firebird 2 и выше реализуют новое использование DISTINCT
ключевое слово, позволяющее выполнять (не) тесты на равенство, которые принимают NULL
в учетную запись.Семантика следующая:

Обратите внимание, что если ни один из операндов не равен NULL ,
DISTINCT работает точно так же, как
Оператор « <> » и НЕ ОТЛИЧИТСЯ
как оператор « = ».

DISTINCT and NOT DISTINCT всегда возвращаются
верно или ложно , никогда
НЕТ .

Используя DISTINCT, вы можете переписать первый пример PSQL как
следует:

 если (a не отличается от b), то
  MyVariable = 'Равно';
еще
  MyVariable = 'Не равно'; 

И второй как:

 если (a отличается от b), то
  MyVariable = 'Не равно';
еще
  MyVariable = 'Равно'; 

Эти версии дадут вам результаты, которые нормальный (т.е.не промытый SQL)
человек ожидает, будет ли задействовано NULL s или
не.

Более подробную информацию о поведении NULL можно найти в
Firebird Null Guide , в следующих местах:

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *