webstudio2u.net

Терминальный доступ к СУБД Caché – теперь и в браузере

image

С развитием веб-технологий в окне браузера появляется всё больше полезных сервисов, приложений, программ и даже игр. Пришло время и для терминала СУБД Caché.

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

Функционал

Веб-терминалу под силу следующее:

Все вышеперечисленное работает на любом сервере Caché, где присутствует поддержка WebSockets. Достаточно лишь пройти по ссылке на веб-приложение и начать работу.

Безопасность

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

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

История программной реализации

Если посмотреть на терминал со стороны, кому-то может показаться что его механика достаточно проста. Поначалу мне тоже так казалось. Разбираясь в поведении такого рода приложений, наряду со знакомством с Caché возникало немало интересных моментов и трудностей, о которых пойдёт речь дальше. Основной задачей оставалось сделать терминал привычным для гиков и одновременно дружественным для простых пользователей, предоставив новые возможности и наконец-то приукрасить черно-белый графический интерфейс обычного терминала, ведь за окном уже 2013-й!

Дальше я буду описывать в основном расправы с граблями, на которые мне приходилось натыкаться и те самые, по которым походили все знакомые с вебом или с Caché дизайнеры-программисты. Может, представленные ниже способы и решения можно сделать еще интереснее, и если вы знаете как — будет очень любопытно услышать.

Начиная создавать новый программный продукт нужно продумать, а как же все это должно работать. Поскольку я только знакомился с Caché, поначалу посещали мысли, что терминал функционирует достаточно просто – нужно лишь выполнять команды на сервере и читать с него ответ. За фронтэнд я совсем не переживал, так как с ним мне приходилось ранее работать. Но только лишь я стал все больше углубляться в разработку, выяснилось, что нужно не просто выполнять команды, а и всяческие терминальные утилиты, настроить чтение информации с клиента (например, при обработке команды read), добиться потокового ввода/вывода и решить еще ряд всяких мелких задачек.

Немного поразмыслив с коллегами, стало абсолютно понятно, что для передачи данных будет использоваться протокол WebSocket – относительно новый, стабильный и надёжный способ передавать данные через веб. А на стороне клиента, понятное дело, все прелести HTML5. Это и CSS-анимации, и чистый-прозрачный JavaScript.

Первым делом сев за клиентскую часть, мне не хотелось использовать уже готовые решения или применять какие-либо фреймворки, так как терминал в идеале – это лёгкое приложение, которому не нужен продвинутый доступ к DOM’у как у JQuery и разные волшебные JavaScript-анимации. Нет, на самом деле анимации может и были бы кстати, но в формате всего лишь пачки CSS3-свойств, не более. Приложение обещало выйти лёгким, как для браузера, так и для пользователя.

С отображением информации я долго не возился – это моноширинный шрифт, лёгкая блочная верстка и знакомые стили. А вот над полем для ввода информации пришлось подумать: нужно было реализовать подсветку синтаксиса. Множество решений с плагинами было отброшено, поэтому последний, как казалось, вариант – это лаконичный editable div в HTML5. Но и там нашлись свои прелести – контент нужно было переводить с HTML в plaintext и наоборот, устанавливать и получать позицию каретки, копировать в буфер оригинальный, не разукрашенный текст – эти задачки решаются далеко не в несколько строчек. В придачу нужно же еще вставлять в текст свою, мигающую терминальную каретку и реализовать обычный системный Ctrl-C, Ctrl-V, Right click + Paste, Insert, …

Вариант реализации “подсветки и каретки” в поле для ввода нашелся очень хитрый и простой. По сути, нам нужно только лишь подсветить текст, ну и каретку вставить. Предположим, что текст у нас есть обычный и подсвеченный. Первый содержится в самом типичном textarea, а подсвеченный – в блоке точно такого же размера. Улавливаете? Вот так просто с использованием нескольких CSS-трюков делаем поле для ввода прозрачным с прозрачным шрифтом, под которым располагаем блок с подсвеченным текстом. В результате получаем видимое выделение текста и полную свободу его редактирования. Тут только Internet Explorer, как всегда, отличился – каретка в нём всё равно остается видимой, когда в других браузерах она прозрачна. Потому от обычной мигающей каретки терминала в нём пришлось отказаться – пускай остаётся со своей, родной.

Интересный момент так же возник с обработкой нажатия клавиш – нужно было подсветить вводимые данные, а значит, по нажатию обработать содержимое поля ввода. Да, но получить содержание этого поля именно в момент нажатия не получится (точнее получится, но без последнего «нажатого» знака) – DOM не успевает обновится до выполнения событий keydown, keypress, а по keyup обновлять видимую часть ввода совсем не интересно, хотя это тоже еще один выход. Второй выход – добавлять символ в строку вручную. Но последний сразу отпадает в случае Ctrl+V. Сделаем третьим методом – вызовем функцию-обработчик нажатия через 1мс после самого нажатия. Да, теперь мы получили ввод, но пропала возможность управлять передаваемым в обработчик event’ом, например, чтобы запретить действие клавиши по умолчанию. Выходом стало разбивка нажатия на два события – по нажатию сама обработка события и сочетаний, а через 1мс – обновление введённого текста.

Парсинг ввода, подсветка синтаксиса и вставка туда каретки в виде было реализовать несложно – сперва нужно заменить то, что может испортить HTML-форматирование, а именно символы «<», «>» и «&» соответствующими «<», «&gt» и «&». Потом – выполнить саму подсветку синтаксиса по ультра-регулярному выражению (которая, по сути, вставляет лишь теги в текст) и лишь потом вставить каретку, определив «настоящее» ее положение (без учёта тэгов и HTML-сущностей), для чего был написан еще один метод. Да, все вышеперечисленное выполняется только в этом порядке, иначе или сама каретка подсветится, или появится много битой HTML-разметки.

А вот с автодополнением было работать интересно. Я его трижды переписывал. А прогресс алгоритма был следующим:

  1. Просто получаем кусок строки от каретки до ближайшего левого разделителя или пробела и ищем совпадения с имеющимися вариантами в массиве всех вариантов.
  2. Тот же кусок строки, уже включая, возможно, символы «$», «%», «##» и прочие для определения типа дополнения ищем в специальном объекте, разбитом на «категории».
  3. Парсим всю левую от каретки часть по «маскам» – обратным регулярным выражениям, которые содержатся в специально структурированном объекте «терминального словаря».

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

Итак, как же он устроен? Очень просто. Всё что нужно, чтобы создать практически любой тип автодополнения – это грамотно составленные регулярные выражения в объекте «словаря». Вот как он может выглядеть:

Код language = { "client": { "!autocomplete": { reversedRegExp: new RegExp("([a-z]*/)+") }, "/help": 1, "/clear": 1, … }, "commands": { "!autocomplete": { reversedRegExp: new RegExp("([a-zA-Z]+)\s.*") }, "SET": 0, "KILL": 0, "WRITE": 0, … }, "staticMethods": { "!autocomplete": { reversedRegExp: new RegExp("([a-zA-Z]*)##\s.*") }, "class": 0, … }, "class": { "!autocomplete": { reversedRegExp: new RegExp("(([a-zA-Z\.]*[a-zA-Z])?%?)\(ssalc##\s.*"), separator: ".", child: { reversedRegExp: new RegExp("([a-zA-Z]*)\.\)") } }, "EXAMPLE": { "Method": 0, "Property": 0, "Parameter": 0 }, … } }

Каждый объект внутри language может иметь специальное свойство-объект «!autocomplete». Если оно присутствует, парсер автодополнения будет обращать на этот объект внимание, а именно читать его свойства reversedRegExp и child.

Как уже можно было догадаться, reversedRegExp составлен специальным образом, и именно он определяет, уместно ли использовать свойства текущего «словарного» объекта (далее – просто «словаря») для автодополнения. Запоминающие скобки в регулярном выражении служат для выделения части искомой строки, которая будет сверяться с именами свойств словаря («терминами»). Это позволяет найти в любой синтаксической структуре ключ, по которому и будет производится выбор доступных вариантов.

С классами же немного иная задачка – нужно получить имя класса и подсказать соответствующие ему свойства. Это решилось путём дополнения свойства-объекта «!autocomplete» подобным ему свойством-объектом «child», который тоже содержит reversedRegExp – префикс к родительскому регулярному выражению, который будет рассмотрен при совпадении последнего. Алгоритм проверки получается достаточно простым. Если интересно, как именно устроен этот алгоритм, его можно найти внутри репозитория проекта.

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

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

Сам сервер ранее был научен отправлять весь write сразу на клиент, с использованием этой штуки. Но для read, как оказалось, обойтись чем-то простым вида “+Т” не получится. Вся проблема в том, что когда пользователь пытался выполнить то ли терминальную утилиту, то ли сочинить сценарий с преподобным read — сервер, обрабатывая их в xecut’е просто зависал или портил вводимые данные.

Хорошо, допустим, поставим мы терминал в режим обработки стандартных терминаторов на входе (“+Т”), и будем их отправлять с клиента. Отлично, теперь read не зависает, но возникает другая ситуация — мы ведь читаем пакет, полученный от клиента, а не его тело. Сам пакет содержит немного “мусора” для нас — это первые несколько байтов, которые служат его заголовком. Их нужно было как-то отбросить.

Чтобы проще представить, что нужно и как это все должно происходить, рассмотрим предполагаемую последовательность выполнения команды “read a write a” на сервере.

Но как же так же достать это тело, чтобы в a не попадали лишние байты (шапка пакета WebSocket)? Логично, нужно сделать какой-то свой обработчик read. Да и не простой, а на системном уровне: ведь терминальные утилиты тоже используют read.

К счастью, опытные ребята форума sql.ru мне подсказали чудесную недокументированная возможность Caché — I/O redirection. С её помощью можно было сделать именно то, что нужно — обработать все прилетающие/улетающие данные по-своему. Перенаправление ввода осуществляется написанием семи подпрограмм, которые будут брать на себя функции примитивных команд read и write при включенном ##class(%Device).ReDirectIO. Если интересна детальная реализация этой прелести, вам может пригодится этот тред.

Я надеюсь опыт, изложенный выше, кому-то обязательно пригодится и станет не менее полезным чем сам терминал. На пути от концепции к уже функциональному приложению появилось много новых идей, и это еще не предел — тут можно ограничиться лишь фантазией. Следите или участвуйте в развитии проекта на GitHub, предлагайте и обсуждайте идеи, будут полезны любые ваши отзывы. Приятного администрирования!

Автор: ZitRo

Источник

www.pvsm.ru

 

Начальная

Windows Commander

Far
WinNavigator
Frigate
Norton Commander
WinNC
Dos Navigator
Servant Salamander
Turbo Browser

Winamp, Skins, Plugins
Необходимые Утилиты
Текстовые редакторы
Юмор

File managers and best utilites

Терминальный доступ к СУБД Caché – теперь и в браузере. Субд в браузере


СУБД Access Создание базы данных Браузеры Интерфейс

СУБД Access. Создание базы данных «Браузеры» СУБД Access. Создание базы данных «Браузеры»

Интерфейс Access 2007 Для создания новой БД нажмите на кнопку Интерфейс Access 2007 Для создания новой БД нажмите на кнопку

Создание БД Введите имя файла и укажите место хранения файла, нажав на кнопку Создание БД Введите имя файла и укажите место хранения файла, нажав на кнопку

¢ Сохраните БД в сетевую папку под названием Браузеры ¢ Сохраните БД в сетевую папку под названием Браузеры

Окно программы Окно программы

Создание таблицы ¢ В окне программы в области Режимы нужно выбрать режим Конструктор - Создание таблицы ¢ В окне программы в области Режимы нужно выбрать режим Конструктор - режим создания и изменения структуры таблицы.

Создание таблицы ¢ В диалоговом окне Сохранение введите название таблицы – «Браузеры» . Создание таблицы ¢ В диалоговом окне Сохранение введите название таблицы – «Браузеры» .

Таблица «Браузеры» в режиме Конструктор Таблица «Браузеры» в режиме Конструктор

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

Имена полей: Номер (ключевое поле) Название браузера Иконка браузера Процент пользователей Производительность Java. Script Имена полей: Номер (ключевое поле) Название браузера Иконка браузера Процент пользователей Производительность Java. Script Поддержка Web-стандартов Соответствие стандарту HTML 5 Производительность графики в различных технологиях (Flash, HTML, Canvas, SVG) Параметры безопасности Место в рейтинге Компания-производитель браузера Web-сайт компании-производителя

Типы данных полей: Номер (ключевое поле) - Счетчик Название браузера - Текстовый Иконка браузера Типы данных полей: Номер (ключевое поле) - Счетчик Название браузера - Текстовый Иконка браузера – Вложение Процент пользователей - Числовой Производительность Java. Script - Числовой Поддержка Web-стандартов - Числовой Соответствие стандарту HTML 5 - Числовой Производительность графики в различных технологиях (Flash, HTML, Canvas, SVG) - Числовой Параметры безопасности - Числовой Место в рейтинге - Числовой Компания-производитель браузера - Текстовый Web-сайт компании-производителя - Гиперссылка

Имена и типы данных полей:

Имена и типы данных полей:

¢ Сохраните таблицу и перейдите в режим Таблицы ¢ Сохраните таблицу и перейдите в режим Таблицы

Данные для БД Браузер Apple Safari Фирмапроизводитель Apple Inc Web-сайт компаниипроизводителя http: //www. apple. Данные для БД Браузер Apple Safari Фирмапроизводитель Apple Inc Web-сайт компаниипроизводителя http: //www. apple. com/ru/safari/downlo ad/ Google Chrome Google http: //www. google. com/chrome/? hl=ru Microsoft Internet Explorer Microsoft http: //windows. microsoft. com/ru. RU/internet-explorer/products/ie/home Mozilla Firefox Mozilla Foundation http: //mozillarussia. org/products/firefox/ Opera Software ASA http: //ru. opera. com/download/ Рейтинг браузеров с сайтов (выбрать один рейтинг) http: //www. pcbee. ru/интернет/рейтинг-статистика-популярности-бра. html Сравнительное тестирование браузеров по представленным параметрам на сайте http: //www. oszone. net/14899

Заполнение поля «Иконка браузера» ¢ Двойным щелчком левой клавишей мыши по ячейке откройте диалоговое Заполнение поля «Иконка браузера» ¢ Двойным щелчком левой клавишей мыши по ячейке откройте диалоговое окно Вложения. Нажмите на кнопку Добавить.

Заполнение поля «Иконка браузера» ¢ Выберите изображение с иконкой соответствующего браузера. Заполнение поля «Иконка браузера» ¢ Выберите изображение с иконкой соответствующего браузера.

Заполнение поля «Иконка браузера» ¢ Для завершения выбора вложенного изображения нажмите на кнопку ОК

Заполнение поля «Иконка браузера» ¢ Для завершения выбора вложенного изображения нажмите на кнопку ОК

¢ Для ввода десятичных значений в поля «Производительность графики в технологии Flash, HTML, Canvas, ¢ Для ввода десятичных значений в поля «Производительность графики в технологии Flash, HTML, Canvas, SVG» нужно перейти в режим Конструктор и…

¢ … для этих полей в области Свойства поля для параметра Размер поля задать ¢ … для этих полей в области Свойства поля для параметра Размер поля задать значение «Ординарное с плавающей точкой»

Заполненная таблица «Браузеры»

Заполненная таблица «Браузеры»

Создание формы ¢ В окне программы на вкладке Создание в области Формы нажмите на Создание формы ¢ В окне программы на вкладке Создание в области Формы нажмите на Другие формы и выберите Мастер форм.

¢ Появится диалоговое окно Создание форм, в котором нужно указать: ¤Из какой таблицы будут ¢ Появится диалоговое окно Создание форм, в котором нужно указать: ¤Из какой таблицы будут выводиться данные ¤Какие данные будут выводиться (нужно выбрать поля)

¢ Для этого: ¤Из раскрывающегося списка Таблицы и запросы нужно выбрать таблицу, из которой

¢ Для этого: ¤Из раскрывающегося списка Таблицы и запросы нужно выбрать таблицу, из которой будут выводиться данные, т. е. единственную таблицу «Браузеры»

¢ Для этого: ¤Из списка полей этой таблицы выбрать нужные щелчком левой клавиши мыши ¢ Для этого: ¤Из списка полей этой таблицы выбрать нужные щелчком левой клавиши мыши по имени поля и нажатием на кнопку (для выбора всех полей нажмите на кнопку )

Выберите поля: Номер Название браузера Иконка браузера Процент пользователей Производительность Java. Script Соответствие стандарту Выберите поля: Номер Название браузера Иконка браузера Процент пользователей Производительность Java. Script Соответствие стандарту HTML 5 Производительность графики в технологии Flash Параметры безопасности Место в рейтинге Компания-производитель браузера Web-сайт компании-производителя

Выбранные для формы поля Нажмите на кнопку Далее Выбранные для формы поля Нажмите на кнопку Далее

Выбор структуры формы ¢ Теперь выберите структуру формы, и нажмите на кнопку Далее Выбор структуры формы ¢ Теперь выберите структуру формы, и нажмите на кнопку Далее

Выбор стиля формы ¢ Теперь выберите понравившийся стиль формы, и нажмите кнопку Далее Выбор стиля формы ¢ Теперь выберите понравившийся стиль формы, и нажмите кнопку Далее

Ввод названия формы ¢ Задайте имя формы – «Браузеры» , и откройте форму для

Ввод названия формы ¢ Задайте имя формы – «Браузеры» , и откройте форму для просмотра и ввода данных – для этого выберите соответствующее действие и нажмите кнопке Готово

Форма «Браузеры» Форма «Браузеры»

present5.com

Публикация баз данных в Internet

Публикация баз данных в интернете — это размещение информации их баз данных на WEB-страницах в сети. Отметим, что такая публикация связана с решением следующих типичных задач, возникающих перед разработчиками современного программного обеспечения:• Организация взаимосвязи СУБД, работающих на различных платформах.

• Построение информационных систем в сети Internet на основе многоуровненевой архитектуры БД (архитектура таких систем включает дополнительный уровень — WEB-сервер с модулями расширения серверной части, который и реализует возможность информационного обмена и публикации БД в глобальной сети)

• Построение локальных интранет-сетей на основе технологии публикации БД в Интернете.

• Использование в Internet информации из существующих локальных сетевых баз данных.

• Применение БД для упорядочивания информации.

• Поддержка языка SQL.

• Использование средств СУБД для обеспечения безопасности данных.

• Стандартизация пользовательского интерфейса на основе применения WEB-браузера.

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

В Internet вся информация размещается на WEB-страницах, для написания которых используется язык HTML (язык разметки текста) или его расширения, такие как DHTML и XML. В содержимое WEB-страницы может входить как и текстовая информация, так и графические изображения, ссылки на другие страницы и даже аудио и видео информация.

Для расширения возможностей WEB-сервера создаются соответственные программы расширения. При организации работы БД в сети часто используют следующие средства:• Сценарии (JavaScript, JScript, VBScript).• Апплеты и сервлеты, написанные на Java.• Элементы управления ActiveX.• Консольные программы, реализованные с поддержкой интерфейсов CGI.• Программы, поддерживающие интерфейс WinCGI.• Динамические библиотеки, поддерживающие ISAPI.• Динамические страницы IDC/HTX.• Активные серверные страницы ASP.

Дадим краткую характеристику этих средств.

Технологии публикации БД

• Сценарии JavaScript, JScript, VBScriptСценарии, написанные на скриптовых языках, используют для динамического управления интерфейсными объектами WEB-документа. Все эти языки в подавлябщем своём большинстве интерпретируемые. Интерпритация осуществляется или браузером, или WEB-сервером. Скрипты рассматриваются как расширение языка HTML и могут включаться в тело документа. Часть скрипта выполняется в момент загрузки, а какие-то части — в ответ на действие пользователя. Выбор конкретного скриптового языка зависит в первую очередь от выбранного браузера.

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

• Апплеты и сервлеты JavaАпплеты Java применяются для создания динамически формируемого интерфейса пользователя. Язык Java является объектно-ориентированным языком. Однако возможности Java по доступу к локальным ресурсам сильно урезаны, что делает его безопасным для работы в сети. По мимо этого Java интерпретируема, такой механизм помимо безопасности гарантирует и целостность данных пользователя.

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

• Интерфейсы CGI и WinCGIДля создания модулей расширеня WEB-сервера часто используются интерфейсы: общий шлюзовой (CGI) или интерфейсы прикладного программирования (API).

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

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

Для запуска модуля, необходимо обратиться к нему через его URL. Для каждого такого запроса сервер запускает новую копию CGI-приложения.

Для среды Windows существует адаптированный вариант интерфейса — WinCGI. В нём управляющие параметры передаются через ini-файл. В остальном WinCGI повторяет принципы работы родительского интерфейса.

• Интерфейсы ISAPI/NSAPIБолее перспективными являются интерфейсы ISAPI/NSAPI, разработанные фирмами Microsoft и Netscape соответственно. Осуществление взаимодействия с сервером осуществляется при помощи специальных объектов request-response. Основное отличие от CGI в том, что при многопользовательском режиме работы не происходит излишней нагрузки сервера, потому что загрузка DLL выполняется только один раз при первом обращении.

• ASP, PHP и IDC/HTX-страницыЭто специальные типы страниц, используемые для динамического формирования страниц, содержащих информацию из БД.IDC-страница содержит псевдоним (alias), запрос, идентификатор пользователя и пароль.HTX-страница содержит шаблон, определяющий какую информацию и в каком формате передавать браузеру.ASP-страница содержит одновременно HTML-шаблон и SQL-запрос к БД. В ASP-страница используются средства JScript и объектная модель доступа к данным.

Протоколы передачи данных

В сети Internet используются серверы с различным программным обеспечением. Запросы от браузера поступают на WEB-сервер в соответствии с установленным протоколом обмена, например HTTP. Вообще-то в сети Internet поддерживается более десятка протоколов. Протокол HTTP предназначен для передачи между браузером и сервером. Соединение чаще всего обеспечивается на уровне протокола TCP/IP, но при работе с БД лучше использовать протокол IIOP, который умеет сохранять состояние.

Виды публикации

• Статическая публикацияГенерацию таких страниц выполняет обычное приложение Windows, имеющее доступ к БД. Этот способ используется только если публикуемая информация обновляется очень редко. Зато при поступлении запроса не требуется активное состояние сервера.

• Динамическая публикацияИспользуется в случаях, когда требуется получить доступ к БД, информация в которой часто обновляется. Таким способом работают Internet-магазины, авиакассы, да и вообще все системы реального времени.

Вывод

Информационные системы, построенные на WEB-приложениях используют многоуровневую архитектуру и позволяют воспользоваться всеми преимущества всемирной паутины. Однако разработчикам надо учитывать, что такая архитектура имеет недостатки:— Совместимость браузеров.— Разграничение прав доступа.— Безопасность.— Надёжность линий связи.

Требования к WEB-СУБД

— Защищённость доступа к ценным данным.— Независимый способ подключения.— Независимость работы от типа сервера и браузера.— Открытость архитектуры.— Поддержка COM+ и CORBA.— Масштабируемость.— Поддержка транзакций.— Поддержка сеансов.— Производительность.— Минимальная требование к администрации.

Плюсы

— Простота.— Независимость от ПО.— Графический интерфейс.— Стандартизация.— Межплатформенная поддержка.— Прозрачность.— Масштабируемость.

Минусы

— Малая надёжность.— Низкая скорость.— Низкий уровень безопасности.— Высокая стоимость.— Трудность в определение масштаба.— Ограничение html.— Требования к пропускной способности.— Несовершенная разработка.

all4study.ru

Терминальный доступ к СУБД Caché – теперь и в браузере / Блог компании InterSystems / Хабрахабр

image

С развитием веб-технологий в окне браузера появляется всё больше полезных сервисов, приложений, программ и даже игр. Пришло время и для терминала СУБД Caché.

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

Функциональность
Веб-терминалу под силу следующее:
  • Выполнение произвольного кода и команд Caché Object Script, терминальных утилит и программ
  • Удобный SQL-режим для быстрого доступа к базе данных
  • Автодополнение ключевых слов Caché Object Script: классов и их методов, свойств, параметров, глобалов и переменных в текущем пространстве имён
  • Мониторинг изменений в глобалах и файлах (подобно tail -f)
  • История команд
  • Подсветка синтаксиса Caché Object Script
  • Определение сокращений
  • Многострочное редактирование
  • Настройка поведения и тем оформления приложения
Все вышеперечисленное работает на любом сервере Caché, где присутствует поддержка WebSockets. Достаточно лишь пройти по ссылке на веб-приложение и начать работу.

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

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

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

История программной реализации
Если посмотреть на терминал со стороны, кому-то может показаться что его механика достаточно проста. Поначалу мне тоже так казалось. Разбираясь в поведении такого рода приложений, наряду со знакомством с Caché возникало немало интересных моментов и трудностей, о которых пойдёт речь дальше. Основной задачей оставалось сделать терминал привычным для гиков и одновременно дружественным для простых пользователей, предоставив новые возможности и наконец-то приукрасить черно-белый графический интерфейс обычного терминала, ведь за окном уже 2013-й!

Дальше я буду описывать в основном расправы с граблями, на которые мне приходилось натыкаться и те самые, по которым походили все знакомые с вебом или с Caché дизайнеры-программисты. Может, представленные ниже способы и решения можно сделать еще интереснее, и если вы знаете как — будет очень любопытно услышать.

Начиная создавать новый программный продукт нужно продумать, а как же все это должно работать. Поскольку я только знакомился с Caché, поначалу посещали мысли, что терминал функционирует достаточно просто – нужно лишь выполнять команды на сервере и читать с него ответ. За фронтэнд я совсем не переживал, так как с ним мне приходилось ранее работать. Но только лишь я стал все больше углубляться в разработку, выяснилось, что нужно не просто выполнять команды, а и всяческие терминальные утилиты, настроить чтение информации с клиента (например, при обработке команды read), добиться потокового ввода/вывода и решить еще ряд всяких мелких задачек.

Немного поразмыслив с коллегами, стало абсолютно понятно, что для передачи данных будет использоваться протокол WebSocket – относительно новый, стабильный и надёжный способ передавать данные через веб. А на стороне клиента, понятное дело, все прелести HTML5. Это и CSS-анимации, и чистый-прозрачный JavaScript.

Первым делом сев за клиентскую часть, мне не хотелось использовать уже готовые решения или применять какие-либо фреймворки, так как терминал в идеале – это лёгкое приложение, которому не нужен продвинутый доступ к DOM’у как у JQuery и разные волшебные JavaScript-анимации. Нет, на самом деле анимации может и были бы кстати, но в формате всего лишь пачки CSS3-свойств, не более. Приложение обещало выйти лёгким, как для браузера, так и для пользователя.

С отображением информации я долго не возился – это моноширинный шрифт, лёгкая блочная верстка и знакомые стили. А вот над полем для ввода информации пришлось подумать: нужно было реализовать подсветку синтаксиса. Множество решений с плагинами было отброшено, поэтому последний, как казалось, вариант – это лаконичный editable div в HTML5. Но и там нашлись свои прелести – контент нужно было переводить с HTML в plaintext и наоборот, устанавливать и получать позицию каретки, копировать в буфер оригинальный, не разукрашенный текст – эти задачки решаются далеко не в несколько строчек. В придачу нужно же еще вставлять в текст свою, мигающую терминальную каретку и реализовать обычный системный Ctrl-C, Ctrl-V, Right click + Paste, Insert, …

Вариант реализации “подсветки и каретки” в поле для ввода нашелся очень хитрый и простой. По сути, нам нужно только лишь подсветить текст, ну и каретку вставить. Предположим, что текст у нас есть обычный и подсвеченный. Первый содержится в самом типичном textarea, а подсвеченный – в блоке точно такого же размера. Улавливаете? Вот так просто с использованием нескольких CSS-трюков делаем поле для ввода прозрачным с прозрачным шрифтом, под которым располагаем блок с подсвеченным текстом. В результате получаем видимое выделение текста и полную свободу его редактирования. Тут только Internet Explorer, как всегда, отличился – каретка в нём всё равно остается видимой, когда в других браузерах она прозрачна. Потому от обычной мигающей каретки терминала в нём пришлось отказаться – пускай остаётся со своей, родной.

Интересный момент так же возник с обработкой нажатия клавиш – нужно было подсветить вводимые данные, а значит, по нажатию обработать содержимое поля ввода. Да, но получить содержание этого поля именно в момент нажатия не получится (точнее получится, но без последнего «нажатого» знака) – DOM не успевает обновится до выполнения событий keydown, keypress, а по keyup обновлять видимую часть ввода совсем не интересно, хотя это тоже еще один выход. Второй выход – добавлять символ в строку вручную. Но последний сразу отпадает в случае Ctrl+V. Сделаем третьим методом – вызовем функцию-обработчик нажатия через 1мс после самого нажатия. Да, теперь мы получили ввод, но пропала возможность управлять передаваемым в обработчик event’ом, например, чтобы запретить действие клавиши по умолчанию. Выходом стало разбивка нажатия на два события – по нажатию сама обработка события и сочетаний, а через 1мс – обновление введённого текста.

Парсинг ввода, подсветка синтаксиса и вставка туда каретки в виде было реализовать несложно – сперва нужно заменить то, что может испортить HTML-форматирование, а именно символы «<», «>» и «&» соответствующими «<», «&gt» и «&». Потом – выполнить саму подсветку синтаксиса по ультра-регулярному выражению (которая, по сути, вставляет лишь теги в текст) и лишь потом вставить каретку, определив «настоящее» ее положение (без учёта тэгов и HTML-сущностей), для чего был написан еще один метод. Да, все вышеперечисленное выполняется только в этом порядке, иначе или сама каретка подсветится, или появится много битой HTML-разметки.

А вот с автодополнением было работать интересно. Я его трижды переписывал. А прогресс алгоритма был следующим:

  1. Просто получаем кусок строки от каретки до ближайшего левого разделителя или пробела и ищем совпадения с имеющимися вариантами в массиве всех вариантов.
  2. Тот же кусок строки, уже включая, возможно, символы «$», «%», «##» и прочие для определения типа дополнения ищем в специальном объекте, разбитом на «категории».
  3. Парсим всю левую от каретки часть по «маскам» – обратным регулярным выражениям, которые содержатся в специально структурированном объекте «терминального словаря».
Не знаю, знакомым ли кому покажется третий метод, к которому я постепенно подошел, но именно он показал самые шикарные и быстрые результаты.

Итак, как же он устроен? Очень просто. Всё что нужно, чтобы создать практически любой тип автодополнения – это грамотно составленные регулярные выражения в объекте «словаря». Вот как он может выглядеть:

Кодlanguage = { "client": { "!autocomplete": { reversedRegExp: new RegExp("([a-z]*/)+") }, "/help": 1, "/clear": 1, … }, "commands": { "!autocomplete": { reversedRegExp: new RegExp("([a-zA-Z]+)\\s.*") }, "SET": 0, "KILL": 0, "WRITE": 0, … }, "staticMethods": { "!autocomplete": { reversedRegExp: new RegExp("([a-zA-Z]*)##\\s.*") }, "class": 0, … }, "class": { "!autocomplete": { reversedRegExp: new RegExp("(([a-zA-Z\\.]*[a-zA-Z])?%?)\\(ssalc##\\s.*"), separator: ".", child: { reversedRegExp: new RegExp("([a-zA-Z]*)\\.\\)") } }, "EXAMPLE": { "Method": 0, "Property": 0, "Parameter": 0 }, … } } Каждый объект внутри language может иметь специальное свойство-объект «!autocomplete». Если оно присутствует, парсер автодополнения будет обращать на этот объект внимание, а именно читать его свойства reversedRegExp и child.

Как уже можно было догадаться, reversedRegExp составлен специальным образом, и именно он определяет, уместно ли использовать свойства текущего «словарного» объекта (далее – просто «словаря») для автодополнения. Запоминающие скобки в регулярном выражении служат для выделения части искомой строки, которая будет сверяться с именами свойств словаря («терминами»). Это позволяет найти в любой синтаксической структуре ключ, по которому и будет производится выбор доступных вариантов.

С классами же немного иная задачка – нужно получить имя класса и подсказать соответствующие ему свойства. Это решилось путём дополнения свойства-объекта «!autocomplete» подобным ему свойством-объектом «child», который тоже содержит reversedRegExp – префикс к родительскому регулярному выражению, который будет рассмотрен при совпадении последнего. Алгоритм проверки получается достаточно простым. Если интересно, как именно устроен этот алгоритм, его можно найти внутри репозитория проекта.

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

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

Сам сервер ранее был научен отправлять весь write сразу на клиент, с использованием этой штуки. Но для read, как оказалось, обойтись чем-то простым вида “+Т” не получится. Вся проблема в том, что когда пользователь пытался выполнить то ли терминальную утилиту, то ли сочинить сценарий с преподобным read — сервер, обрабатывая их в xecut’е просто зависал или портил вводимые данные.

Хорошо, допустим, поставим мы терминал в режим обработки стандартных терминаторов на входе (“+Т”), и будем их отправлять с клиента. Отлично, теперь read не зависает, но возникает другая ситуация — мы ведь читаем пакет, полученный от клиента, а не его тело. Сам пакет содержит немного “мусора” для нас — это первые несколько байтов, которые служат его заголовком. Их нужно было как-то отбросить.

Чтобы проще представить, что нужно и как это все должно происходить, рассмотрим предполагаемую последовательность выполнения команды “read a write a” на сервере.

  • Получение команды от клиента
  • Переход терминального приложения в режим выполнения — установка ввода/вывода «напрямую»
  • Передача команды в xecute
  • read a: читаем данные от клиента, заканчивающихся терминатором
  • Достаём тело считанного пакета и помещаем в а
  • write a: отправляем клиенту значение а
  • Завершение режима выполнения
Но как же так же достать это тело, чтобы в a не попадали лишние байты (шапка пакета WebSocket)? Логично, нужно сделать какой-то свой обработчик read. Да и не простой, а на системном уровне: ведь терминальные утилиты тоже используют read.

К счастью, опытные ребята форума sql.ru мне подсказали чудесную недокументированная возможность Caché — I/O redirection. С её помощью можно было сделать именно то, что нужно — обработать все прилетающие/улетающие данные по-своему. Перенаправление ввода осуществляется написанием семи подпрограмм, которые будут брать на себя функции примитивных команд read и write при включенном ##class(%Device).ReDirectIO. Если интересна детальная реализация этой прелести, вам может пригодится этот тред.

Я надеюсь опыт, изложенный выше, кому-то обязательно пригодится и станет не менее полезным чем сам терминал. На пути от концепции к уже функциональному приложению появилось много новых идей, и это еще не предел — тут можно ограничиться лишь фантазией. Следите или участвуйте в развитии проекта на GitHub, предлагайте и обсуждайте идеи, будут полезны любые ваши отзывы. Приятного администрирования!

habrahabr.ru

Изучаем граф-ориентированную СУБД Neo4j на примере лексической базы Wordnet / Хабрахабр

СУБД Neo4j — это NoSQL база данных, ориентированная на хранение графов. Изюминкой продукта является декларативный язык запросов Cypher.

Cypher позаимствовал ключевые слова типа WHERE, ORDER BY из SQL; синтаксис из таких разных языков как Python, Haskell, SPARQL; и в результате появился язык, позволяющий делать запросы к графам в визуальной форме наподобие ASCII art. Например, заголовок данной статьи я бы представил в виде графа (Neo4j) — [изучаем] -> (Wordnet). И это почти готовый запрос к базе данных!

Для изучения граф-ориентированной базы данных нужен какой-нибудь граф. Это может быть социальная сеть, дамп википедии или схема железных дорог. Мы пойдём простым путём и воспользуемся огромным общедоступным графом лексической базы Wordnet. Лингвисты из Принстона проделали гигантскую работу по систематизации словарного запаса английского языка, а энтузиасты перевели базу данных на многие языки, включая русский. Например, в этой базе свыше 80 тысяч существительных, связанных между собой лексическими отношениями, такими как «синоним», «часть большего», «материал для» и т. п. Эта база является естественным графом, и мы её импортируем в Neo4j.

Установка Neo4j

Процесс установки для разных ОС описан на сайте. Всё описываемое здесь ПО платформенно-независимое, но для определенности все инструкции будут для Debian/Ubuntu.

1. Добавить репозиторий

wget -O - https://debian.neo4j.org/neotechnology.gpg.key | sudo apt-key add - echo 'deb http://debian.neo4j.org/repo stable/' >/tmp/neo4j.list sudo mv /tmp/neo4j.list /etc/apt/sources.list.d sudo apt-get update

2. Установить Neo4j (community edition)

sudo apt-get install neo4j Эта команда установит ПО в вашу домашнюю директорию и запустит сервис, который будет работать от имени пользователя neo4j.

3. Разрешить удалённый доступ

Если вы установили Neo4j на свой компьютер, этот шаг пропустите. Если же требуется доступ к серверу с других компьютеров в локальной сети, отредактируйте файл /var/lib/neo4j/conf/neo4j-server.properties

Для доступа с любого компьютера локальной сети установите параметры:

org.neo4j.server.webserver.address=0.0.0.0 dbms.security.auth_enabled=false По умолчанию используется порт 7474, изменить порт можно, добавив строку в тот же файл:org.neo4j.server.webserver.port=7474 Обратите внимание, что мы не настроили безопасность СУБД! Более подробно читайте инструкцию.

Проверить установку можно, набрав в браузере адрес и порт сервера. Neo4j реализует роскошную графическую консоль через браузер. Через этот же порт идут REST-запросы к базе от клиентского программного обеспечения, которое мы установим на следующем шаге.

Установка клиента (Python)

Для того, чтобы импортировать базу Wordnet в Neo4j, воспользуемся скриптом на Питоне.

1. Сначала нужно установить библиотеку py2neo

pip install py2neo

2. Скачайте с гитхаба мой скрипт

mkdir habrawordnet2neo4j cd habrawordnet2neo4j git clone https://github.com/sergey-zarealye-com/wordnet2neo4j.git Скрипт вряд-ли претендует на промышленное качество кода, но если вы захотите поэкспериментировать с Neo4j из Питона, то просмотрите код, это поможет вам быстрее начать программировать.

Получение лексической базы данных Wordnet

На странице Download проекта Wordnet предлагается скачать базу вместе с программным обеспечением для её просмотра. Но мы-то хотим использовать для просмотра Neo4j! Поэтому достаточно скачать только файлы с данными: Разархивируйте файлы в доступное место.

Импорт данных в Neo4j

Лексические данные в Wordnet лежат в файлах по частям речи. Например, существительные находятся в файле data.noun; глаголы — в data.verb; а с другими частями речи я и не пробовал.

1. Импорт существительных

Для импорта существительных перейдите в директорию, куда поместили мои скрипты (мы ее назвали просто habrawordnet2neo4j) и выполните команду в консоли:python wordnet2neo4j.py -i rwn3/data.noun --neo4j http://127.0.0.1:7474 --nodelabel Ruswordnet --reltype Pointer --encoding cp1251 --limit 1000 Давайте разберём параметры поподробнее. -i путь к файлу данных Wordnet --neo4j URL сервера базы данных Neo4j --nodelabel Метка узлов, соответствующих словам Wordnet в создаваемом графе (в Neo4j узлы графа снабжают текстовыми метками; это просто идентификатор) --reltype Тип ребер графа, соответствующих указателям Wordnet (в Neo4j ребра графа могут иметь тип; это просто идентификатор) --encoding Кодировка файла данных; русскоязычная база записана в кодировке cp1251; для англоязычных файлов этот параметр не нужно указывать --limit Максимальное количество обрабатываемых строк файла; дело в том, что мой скрипт работает довольно медленно, и чтобы попробовать можно ограничить объем импортируемых данных, например первыми 1000 строками файла; для импорта полного файла этот параметр не нужно указывать, и приготовьтесь подождать час-полтора.

2. Импорт глаголов

Для импорта глаголов выполните команду в консоли:python wordnet2neo4j.py -i rwn3/data.verb --neo4j http://127.0.0.1:7474 --nodelabel Ruswordnet --reltype Pointer --encoding cp1251 --limit 1000 Импортировать глаголы необязательно, хотя некоторые из них связаны с существительными, и это интересно поизучать.

3. Убедитесь, что данные импортированы

Для этого откройте в браузере консоль Neo4j (введите адрес и порт сервера СУБД) и введите следующий запрос:MATCH (node)-[relation]-() RETURN node, relation LIMIT 100 Если получили в экране изображение графа, то все прошло успешно.

Выполняем простые запросы

Все дальнейшие действия будем выполнять в браузере, в консоли Neo4j. Я буду считать, что в качестве меток узлов вы использовали Ruswordnet, а в качестве типа рёбер Pointer (как указано в предыдущем разделе). И что вы импортировали именно русскую базу Wordnet целиком.

1. Hello World

Как указано на сайте русской базы Wordnet, переведены около половины смысловых единиц, содержащих самые общеупотребимые слова. Поэтому попробуем найти в базе первое, что пришло в голову:MATCH (n:Ruswordnet {name: "выкапывание_трупа"}) RETURN n Выполните запрос, убедитесь, что это понятие найдено, значит, по мнению российских лингвистов, оно входит в число самых общеупотребимых. Давайте разберём этот простой запрос.

Ключевое слово MATCH означает примерно то же самое, что SELECT в SQL. Грубо говоря, «найти подходящие к шаблону элементы графа».

Круглыми скобками обозначаются узлы графа. Шаблон (n:Ruswordnet) обозначал бы, что мы хотим найти все узлы с меткой «Ruswordnet». Здесь n — идентификатор, можно сказать «переменная». 


Узлы графа (и рёбра тоже) можно снабжать произвольными атрибутами. Чтобы найти конкретный узел, мы задали в запросе условие на атрибуты в формате, похожем на JSON: {name: «выкапывание_трупа»}. Таким образом, фраза

MATCH (n:Ruswordnet {name: "выкапывание_трупа"}) означает, что из всего графа будут выбраны все узлы с меткой Ruswordnet и атрибутом name равным указанному там понятию.

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

MATCH (n:Ruswordnet {name: "лев"}) RETURN n Если вы импортировали базу Wordnet целиком, вы увидите шесть узлов понятий «лев». Давайте разберёмся, почему.

2. Переменные = коллекции

Выполним такой запрос:match (n:Ruswordnet {name: "лев"})--(m) return n,m Здесь мы задали уже более сложный шаблон для поиска. Мы хотим найти все узлы (n), соответствующие понятию «лев», а также все узлы (m), связанные с львами. Связь, т. е. ребро графа обозначается двумя дефисами. Можно в явном виде указывать интересующее нас направление символом --> (это я и называл ASCII art).

Если у вас не отображаются имена смысловых единиц, нажмите на кнопку Ruswordnet(23) в левом верхнем углу графа, и в строке состояния внизу консоли выберите «name» в поле Caption. Так будет нагляднее.

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

3. Подключаем рёбра

В базе Wordnet ребра называются указателями (Pointer), и используется большое количество лингвистических типов указателей. Они обозначаются символами, некоторые из которых я привожу в таблице:Символ Английское наименование лингвистического отношения Лингвистическое отношение
! Antonym Антоним
@ Hypernym Обобщение
@i Instance Hypernym Экземпляр обобщения
~ Hyponym Уточнение
~i Instance Hyponym Экземпляр уточнения
#m Member holonym Понятие, включающее в себя данное понятие
#s Substance holonym Вещество, из которого состоит предмет
#p Part holonym Предмет, включающий в себя как часть данный предмет
%m Member meronym Часть более общего понятия
%s Substance meronym Из какого вещества состоит предмет
%p Part meronym Часть предмета
= Attribute Атрибут
+ Derivationally related form Производная форма
В процессе импорта мы присвоили рёбрам графа атрибут pointer_symbol, и теперь можем делать запросы с учётом атрибутов рёбер. Давайте разберемся, что такое обобщение (hypernum):MATCH (n:Ruswordnet {name: "лев"})-[p:Pointer {pointer_symbol: "@"}]->(m) RETURN n,m Квадратными скобками обозначаются спецификации рёбер. В этом запросе мы хотим найти рёбра типа Pointer, атрибут которых pointer_symbol равен «@» т. е. символу обобщения. Кстати, противоположный обобщению символ уточнения «~».

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

Давайте разберемся, что такое part holonym:

MATCH (n:Ruswordnet {name: "лев"})-[p:Pointer {pointer_symbol: "#p"}]->(m) RETURN n,m А, теперь понятно: лев входит в зодиак в качестве составной части, значит зодиак является part holonym для льва.

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

MATCH (n)-[p:Pointer {pointer_symbol: "#s"}]->(m) RETURN n,m LIMIT 10 В этом запросе мы не накладываем никаких условий на узлы (n) и (m). Мы только хотим, чтобы их связывали рёбра с атрибутом «#s». Обратите внимание, появилось ключевое слово LIMIT, знакомое нам из SQL. Если бы его здесь не было, сервер вернул бы нам очень много результатов, и плохо было бы нашему браузеру.

В результате запроса мы узнали, что сигареты состоят из марихуаны, а суп из воловьих хвостов — из воловьих хвостов.

4. Цепочки произвольной длины

В детстве все играли в такую игру: превратить муху в слона. Для этого нужно было менять по одной букве в слове, пока слово МУХА не превратилось в слово СЛОН. Давайте узнаем в лексическом графе, связаны ли между собой ЛЕВ и ОВЦА.MATCH (n:Ruswordnet {name: "лев"})-[p:Pointer*1..3]-(m:Ruswordnet {name: "овца"}) RETURN n,m,p Конструкция [p:Pointer*1..3] говорит, что требуется найти цепочку рёбер типа Pointer длиной от одного до трех, связывающую узел «лев» с узлом «овца».

Это отличается от классической детской игры, но тоже интересно: ОВЦА — ПРОСТАК — ЧЕЛОВЕК — ЛЕВ… это звучит гордо. Кстати, можно попытаться найти связь и между мухой и слоном, только немного увеличить предельную длину цепочки. Я использовал значение 6. Кстати, не пытайтесь сразу поставить 100 — процесс поиска скорее всего сорвется т. к. число вариантов для перебора путей в графе будет слишком велико. Итак, вот как связаны слон и муха лексически:

Думаю, на этом этапе вы многое поняли о базе данных Neo4j, и способны самостоятельно открыть много интересного в базе данных Wordnet, а может применить Neo4j в своих проектах. Мы применяем связку Neo4j c Wordnet в системе поиска по киноархивам. Если вы хотите заниматься исследованиями в области машинного обучения, приглашаю на стажировку или на постоянную работу в НИКФИ — научно-исследовательский кинофотоинститут.

habrahabr.ru

СУБД Access Создание базы данных Браузеры Оглавление

СУБД Access. Создание базы данных «Браузеры» СУБД Access. Создание базы данных «Браузеры»

Оглавление ¢ Создание БД ¤ Создание таблицы ¤ Заполнение таблицы данными ¤ Создание форм Оглавление ¢ Создание БД ¤ Создание таблицы ¤ Заполнение таблицы данными ¤ Создание форм ¤ Добавление записей в таблицу с помощью форм ¤ Создание отчетов ¤ Создание запросов ¢ Создание реляционной БД ¤ Создание таблиц ¤ Создание связей между таблицами

Интерфейс Access 2007 Для создания новой БД нажмите на кнопку Интерфейс Access 2007 Для создания новой БД нажмите на кнопку

Создание БД Введите имя файла и укажите место хранения файла, нажав на кнопку Создание БД Введите имя файла и укажите место хранения файла, нажав на кнопку

¢ Сохраните БД в сетевую папку под названием Браузеры ¢ Сохраните БД в сетевую папку под названием Браузеры

Окно программы Окно программы

Создание таблицы ¢ В окне программы в области Режимы нужно выбрать режим Конструктор - Создание таблицы ¢ В окне программы в области Режимы нужно выбрать режим Конструктор - режим создания и изменения структуры таблицы.

Создание таблицы ¢ В диалоговом окне Сохранение введите название таблицы – «Браузеры» . Создание таблицы ¢ В диалоговом окне Сохранение введите название таблицы – «Браузеры» .

Таблица «Браузеры» в режиме Конструктор Таблица «Браузеры» в режиме Конструктор

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

Имена полей: Номер (ключевое поле) Название браузера Иконка браузера Процент пользователей Производительность Java. Script Имена полей: Номер (ключевое поле) Название браузера Иконка браузера Процент пользователей Производительность Java. Script Поддержка Web-стандартов Соответствие стандарту HTML 5 Производительность графики в различных технологиях (Flash, HTML, Canvas, SVG) Параметры безопасности Место в рейтинге Компания-производитель браузера Web-сайт компании-производителя

Типы данных полей: Номер (ключевое поле) - Счетчик Название браузера - Текстовый Иконка браузера Типы данных полей: Номер (ключевое поле) - Счетчик Название браузера - Текстовый Иконка браузера – Вложение Процент пользователей - Числовой Производительность Java. Script - Числовой Поддержка Web-стандартов - Числовой Соответствие стандарту HTML 5 - Числовой Производительность графики в различных технологиях (Flash, HTML, Canvas, SVG) - Числовой Параметры безопасности - Числовой Место в рейтинге - Числовой Компания-производитель браузера - Текстовый Web-сайт компании-производителя - Гиперссылка

Имена и типы данных полей: Имена и типы данных полей:

¢ Сохраните таблицу и перейдите в режим Таблицы ¢ Сохраните таблицу и перейдите в режим Таблицы

Данные для БД Браузер Apple Safari Фирмапроизводитель Apple Inc Web-сайт компаниипроизводителя http: //www. apple. Данные для БД Браузер Apple Safari Фирмапроизводитель Apple Inc Web-сайт компаниипроизводителя http: //www. apple. com/ru/safari/downlo ad/ Google Chrome Google http: //www. google. com/chrome/? hl=ru Microsoft Internet Explorer Microsoft http: //windows. microsoft. com/ru. RU/internet-explorer/products/ie/home Mozilla Firefox Mozilla Foundation http: //mozillarussia. org/products/firefox/ Opera Software ASA http: //ru. opera. com/download/ Рейтинг браузеров с сайтов (выбрать один рейтинг) http: //www. pcbee. ru/интернет/рейтинг-статистика-популярности-бра. html Сравнительное тестирование браузеров по представленным параметрам на сайте http: //www. oszone. net/14899

Заполнение поля «Иконка браузера» ¢ Двойным щелчком левой клавишей мыши по ячейке откройте диалоговое Заполнение поля «Иконка браузера» ¢ Двойным щелчком левой клавишей мыши по ячейке откройте диалоговое окно Вложения. Нажмите на кнопку Добавить.

Заполнение поля «Иконка браузера» ¢ Выберите изображение с иконкой соответствующего браузера. Заполнение поля «Иконка браузера» ¢ Выберите изображение с иконкой соответствующего браузера.

Заполнение поля «Иконка браузера» ¢ Для завершения выбора вложенного изображения нажмите на кнопку ОК Заполнение поля «Иконка браузера» ¢ Для завершения выбора вложенного изображения нажмите на кнопку ОК

¢ Для ввода десятичных значений в поля «Производительность графики в технологии Flash, HTML, Canvas, ¢ Для ввода десятичных значений в поля «Производительность графики в технологии Flash, HTML, Canvas, SVG» нужно перейти в режим Конструктор и…

¢ … для этих полей в области Свойства поля для параметра Размер поля задать ¢ … для этих полей в области Свойства поля для параметра Размер поля задать значение «Ординарное с плавающей точкой»

Заполненная таблица «Браузеры» Заполненная таблица «Браузеры»

Создание формы ¢ В окне программы на вкладке Создание в области Формы нажмите на Создание формы ¢ В окне программы на вкладке Создание в области Формы нажмите на Другие формы и выберите Мастер форм.

¢ Появится диалоговое окно Создание форм, в котором нужно указать: ¤Из какой таблицы будут ¢ Появится диалоговое окно Создание форм, в котором нужно указать: ¤Из какой таблицы будут выводиться данные ¤Какие данные будут выводиться (нужно выбрать поля)

¢ Для этого: ¤Из раскрывающегося списка Таблицы и запросы нужно выбрать таблицу, из которой ¢ Для этого: ¤Из раскрывающегося списка Таблицы и запросы нужно выбрать таблицу, из которой будут выводиться данные, т. е. единственную таблицу «Браузеры»

¢ Для этого: ¤Из списка полей этой таблицы выбрать нужные щелчком левой клавиши мыши ¢ Для этого: ¤Из списка полей этой таблицы выбрать нужные щелчком левой клавиши мыши по имени поля и нажатием на кнопку (для выбора всех полей нажмите на кнопку )

Выберите поля: Номер Название браузера Иконка браузера Процент пользователей Производительность Java. Script Соответствие стандарту Выберите поля: Номер Название браузера Иконка браузера Процент пользователей Производительность Java. Script Соответствие стандарту HTML 5 Производительность графики в технологии Flash Параметры безопасности Место в рейтинге Компания-производитель браузера Web-сайт компании-производителя

Выбранные для формы поля Нажмите на кнопку Далее Выбранные для формы поля Нажмите на кнопку Далее

Выбор структуры формы ¢ Теперь выберите структуру формы, и нажмите на кнопку Далее Выбор структуры формы ¢ Теперь выберите структуру формы, и нажмите на кнопку Далее

Выбор стиля формы ¢ Теперь выберите понравившийся стиль формы, и нажмите кнопку Далее Выбор стиля формы ¢ Теперь выберите понравившийся стиль формы, и нажмите кнопку Далее

Ввод названия формы ¢ Задайте имя формы – «Браузеры» , и откройте форму для Ввод названия формы ¢ Задайте имя формы – «Браузеры» , и откройте форму для просмотра и ввода данных – для этого выберите соответствующее действие и нажмите кнопке Готово

Форма «Браузеры» Форма «Браузеры»

Создание новой формы ¢ С помощью Мастера форм в окне программы создайте новую форму Создание новой формы ¢ С помощью Мастера форм в окне программы создайте новую форму «Браузеры дополненная» , выбрав для отображения следующие поля:

Выберите поля: Номер Название браузера Иконка браузера Компания-производитель браузера Web-сайт компании-производителя Выберите поля: Номер Название браузера Иконка браузера Компания-производитель браузера Web-сайт компании-производителя

Ввод названия новой формы Ввод названия новой формы

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

Создание дополнительных записей в форме ¢ Для выбора пяти браузеров используйте информацию с Web-страниц Создание дополнительных записей в форме ¢ Для выбора пяти браузеров используйте информацию с Web-страниц http: //www. securitylab. ru/software/1491/ http: //www. chaynikam. info/browser. html ¢ Сделайте новые записи о браузерах, заполнив все поля формы

Создание отчёта ¢ В окне программы на вкладке Создание в области Отчеты выберите Мастер Создание отчёта ¢ В окне программы на вкладке Создание в области Отчеты выберите Мастер отчетов. ¢ Появится диалоговое окно Создание отчетов, в котором нужно указать: ¤Из какой таблицы будут выводиться данные ¤Какие данные будут выводиться (нужно выбрать поля)

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

Создание отчета ¢ Далее выберите уровень группировки, порядок сортировки записей, макет и стиль отчета, Создание отчета ¢ Далее выберите уровень группировки, порядок сортировки записей, макет и стиль отчета, и сохраните отчет под названием «Браузеры» .

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

Cоздание запросов ¢ В окне программы на вкладке Создание в области Другие выберите Конструктор Cоздание запросов ¢ В окне программы на вкладке Создание в области Другие выберите Конструктор запросов.

Cоздание запросов ¢ Появится диалоговое окно Добавление таблицы, из которого нужно выбрать с какими Cоздание запросов ¢ Появится диалоговое окно Добавление таблицы, из которого нужно выбрать с какими таблицами вы будете работать. В данном случае вы работаете с одной таблицей Браузеры. Нажмите Добавить и Закрыть. Появилось окошко Браузеры с названием полей таблицы.

Создание запроса ¢ Вам нужно определить какие браузеры заняли второе место в рейтинге браузеров. Создание запроса ¢ Вам нужно определить какие браузеры заняли второе место в рейтинге браузеров. ¢ Для этого в области формирования запроса

Создание запроса укажите: • имя таблицы, с которой работаете – «Браузеры» • необходимое поле Создание запроса укажите: • имя таблицы, с которой работаете – «Браузеры» • необходимое поле – «Название браузера»

Создание запроса укажите: • имя таблицы, с которой работаете – «Браузеры» • необходимое поле Создание запроса укажите: • имя таблицы, с которой работаете – «Браузеры» • необходимое поле – «Место в рейтинге» • Условие отбора – «=2» , т. к. значение в поле «Место в рейтинге» должно быть равно двум

Создание запроса Конструктор нажмите кнопку Выполнить ¢ Теперь на вкладке Создание запроса Конструктор нажмите кнопку Выполнить ¢ Теперь на вкладке

Создание запроса ¢ Сохраните запрос под названием «Запрос Второе место в рейтинге» Создание запроса ¢ Сохраните запрос под названием «Запрос Второе место в рейтинге»

СУБД Access. Создание базы данных «СТУДЕНТЫ» СУБД Access. Создание базы данных «СТУДЕНТЫ»

Создание БД с несколькими таблицами ¢ Создайте новую базу данных СТУДЕНТЫ с тремя таблицами: Создание БД с несколькими таблицами ¢ Создайте новую базу данных СТУДЕНТЫ с тремя таблицами: 1. Преподаватели 1. 2. Поля и Типы данных полей таблицы Свойства полей таблицы 2. Студенты 1. Поля таблицы и Типы данных полей таблицы 2. Свойства полей таблицы 3. Результаты 1. Поля таблицы и Типы данных полей таблицы 2. Свойства полей таблицы (см. из двух других таблиц)

Преподаватели ¢ Поля и типы данных Перейти к «Создание БД с несколькими таблицами» Преподаватели ¢ Поля и типы данных Перейти к «Создание БД с несколькими таблицами»

Преподаватели ¢ Свойства полей ¢ Самостоятельно определите и задайте ключевое поле! Перейти к «Создание Преподаватели ¢ Свойства полей ¢ Самостоятельно определите и задайте ключевое поле! Перейти к «Создание БД с несколькими таблицами»

Студенты ¢ Поля и типы данных Перейти к «Создание БД с несколькими таблицами» Студенты ¢ Поля и типы данных Перейти к «Создание БД с несколькими таблицами»

Студенты ¢ Свойства полей ¢ Самостоятельно определите и задайте ключевое поле! Перейти к «Создание Студенты ¢ Свойства полей ¢ Самостоятельно определите и задайте ключевое поле! Перейти к «Создание БД с несколькими таблицами»

Результаты ¢ Поля и типы данных ¢ Самостоятельно определите и задайте ключевое поле! Перейти Результаты ¢ Поля и типы данных ¢ Самостоятельно определите и задайте ключевое поле! Перейти к «Создание БД с несколькими таблицами»

Результаты ¢ Самостоятельно определите и задайте ключевое поле! ¢ Для полей «Оценка_Т» , «Оценка_П Результаты ¢ Самостоятельно определите и задайте ключевое поле! ¢ Для полей «Оценка_Т» , «Оценка_П 2, «Оценка_Л» задайте в свойствах этих полей Условие на значение: ¤ Для этого в поле свойства «Условие на значение» нажмите на кнопку

Результаты ¤ В окне выберите Операторы – Сравнение. Далее Between, дважды щелкнув по нему Результаты ¤ В окне выберите Операторы – Сравнение. Далее Between, дважды щелкнув по нему левой клавишей мыши. В появившемся тексте «Between Выражение 1 And Выражение 2» замените Выражение 1 на значение 2, а Выражение 2 на значение 5. Нажмите ОК. Перейти к «Создание БД с несколькими таблицами»

Связи между таблицами ¢ Таблицы должны быть связаны, чтобы можно было создавать сложные запросы, Связи между таблицами ¢ Таблицы должны быть связаны, чтобы можно было создавать сложные запросы, работающие с полями разных таблиц. ¢ Для установки связей между таблицами в окне базы данных на вкладке Работа с базами данных в области Показать или скрыть выберите команду Схема данных

Связи между таблицами ¢ Из появившегося диалогового окна Добавление таблицы выберите все созданные таблицы Связи между таблицами ¢ Из появившегося диалогового окна Добавление таблицы выберите все созданные таблицы и закройте окно.

Связи между таблицами ¢ Для создания связи между полями таблиц Преподаватели и Результаты в Связи между таблицами ¢ Для создания связи между полями таблиц Преподаватели и Результаты в схеме данных Преподаватели выберите поле Номер_П и перетащите его на соответствующее поле в схеме данных Результаты

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

Связи между таблицами ¢ После выбора этого флажка активизируются опции: ¤ Каскадное обновление связанных Связи между таблицами ¢ После выбора этого флажка активизируются опции: ¤ Каскадное обновление связанных полей - изменение значений подчиненных ключей в дочерних таблицах при изменении первичного ключа основной таблицы. ¤ Каскадное удаление связанных записей удаление всех дочерних строк при удалении родительской строки. ¢ Установите обе эти опции.

Связи между таблицами ¢ Также активизируется тип отношения Один-ко-многим, поскольку один предмет может вести Связи между таблицами ¢ Также активизируется тип отношения Один-ко-многим, поскольку один предмет может вести несколько преподавателей. ¢ После внесения требуемых установок нажмите кнопку "Создать" для завершения процесса создания связи.

Связи между таблицами ¢ Аналогичные действия произведите с схемами данных таблиц Студенты и Результаты. Связи между таблицами ¢ Аналогичные действия произведите с схемами данных таблиц Студенты и Результаты.

¢ Нажмите на кнопку Закрыть и согласитесь на сохранения изменений в макете Схема данных ¢ Нажмите на кнопку Закрыть и согласитесь на сохранения изменений в макете Схема данных http: //www. life-prog. ru/view_access. php? id=1

Подстановки ¢ В режиме Конструктор откройте таблицу Преподаватели. Для поля Кафедра в области Свойства Подстановки ¢ В режиме Конструктор откройте таблицу Преподаватели. Для поля Кафедра в области Свойства поля перейдите на вкладку Подстановка. Установите следующие параметры: ¢ Тип элемента управления: список ¢ Тип источника строк: список значений ¢ Источник строк: "Инф. ИПри. Мат"; "Выч. Техн"; "Прогр. Сист"

Подстановки ¢ Для поля Должность выполните аналогичные операции. В качестве значений для выбора установите: Подстановки ¢ Для поля Должность выполните аналогичные операции. В качестве значений для выбора установите: "препод"; "зав каф"

Маска ввода – это шаблон, определяющий формат ввода данных в поле. Знаки, определяющие маски Маска ввода – это шаблон, определяющий формат ввода данных в поле. Знаки, определяющие маски ввода: ¤ 0 - пользователь должен ввести цифру (от 0 до 9). ¤ ? - пользователь может ввести букву.

Маска ввода ¢ Для поля Зарплата в области Свойства поля установите для параметра Маска Маска ввода ¢ Для поля Зарплата в области Свойства поля установите для параметра Маска ввода значение, которое позволит при вводе зарплаты ввести пятизначное число. ¢ Для поля Номер_П параметру Маска ввода установите значение, которое позволит ввести трехзначное число, начинающееся на 1.

¢ Заполните таблицу Преподаватели следующим образом: ¢ Заполните таблицу Преподаватели следующим образом:

Объекты OLE ¢ Для добавления объектов OLE нужно: ¢ Щелкнуть правой клавишей мыши по Объекты OLE ¢ Для добавления объектов OLE нужно: ¢ Щелкнуть правой клавишей мыши по ячейке для добавления объекта и выбрать Вставить объект… ¢ В диалоговом окне выбрать Создать из файла и указать путь к добавляемому файлу ¢ Установить флажок для параметра Связь ¢ Нажать ОК

Создание дополнительной таблицы «Факультеты» ¢ Создайте ещё одну таблицу, имеющую 4 поля: ¤ Факультет Создание дополнительной таблицы «Факультеты» ¢ Создайте ещё одну таблицу, имеющую 4 поля: ¤ Факультет ¤ Специальность ¤ Номер специальности ¤ Группа

Создание дополнительной таблицы «Факультеты» Имя поля Тип данных Свойства Факультет Текстовый Размер поля (см. Создание дополнительной таблицы «Факультеты» Имя поля Тип данных Свойства Факультет Текстовый Размер поля (см. табл. Студенты) Подстановка – Список ("КТи. У"; "ИКТ") Специальность Текстовый Размер поля (см. табл. Студенты) Подстановка – Список ("ИТи. СС"; "Ии. ВТ"; "ПИ") Номер специальности Текстовый Размер поля – 6 Маска ввода должна предполагать, что номер начинается с единицы, а далее идут любые пять цифр Группа (ключевое) Текстовый Размер поля – 5 Маска ввода должна предполагать, что сначала идут две цифры, потом две буквы, и ещё одна цифра Внесите произошедшие изменения в свойствах полей в табл. Студенты

Создание дополнительной таблицы «Факультеты» ¢ Заполните таблицу Факультеты следующим образом: Создание дополнительной таблицы «Факультеты» ¢ Заполните таблицу Факультеты следующим образом:

Создание дополнительной таблицы «Факультеты» ¢ Дополните схему данных ещё одной таблицей и установите связи. Создание дополнительной таблицы «Факультеты» ¢ Дополните схему данных ещё одной таблицей и установите связи.

Таблица «Студенты» ¢ Удалите из таблицы студенты поля Специальность и Факультет. ¢ Для поля Таблица «Студенты» ¢ Удалите из таблицы студенты поля Специальность и Факультет. ¢ Для поля Номер_С параметру Маска ввода установите значение, которое позволит ввести четырехзначное число. ¢ Для поля Год_рожд параметру Маска ввода установите значение, которое позволит ввести дату в кратком формате, например, 28. 02. 96

Таблица «Студенты» ¢ Для поля Группа в области Свойства поля на вкладке Подстановка установите Таблица «Студенты» ¢ Для поля Группа в области Свойства поля на вкладке Подстановка установите следующие параметры: ¢ Тип элемента управления: список ¢ Тип источника строк: таблица или запрос ¢ Источник строк: нажмите на кнопку построителя запросов , добавьте таблицу Факультеты, и задайте, чтобы из таблицы Факультеты выводились значения из поля Группы.

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

Таблица «Студенты» ¢ Адрес задайте произвольно Таблица «Студенты» ¢ Адрес задайте произвольно

Создание дополнительной таблицы «Предметы» Режим «Конструктор» Режим «Таблица» Создание дополнительной таблицы «Предметы» Режим «Конструктор» Режим «Таблица»

Изменение таблицы «Результаты» ¢ Добавьте в таблицу поле «Код результата» и сделайте его ключевым. Изменение таблицы «Результаты» ¢ Добавьте в таблицу поле «Код результата» и сделайте его ключевым.

Изменение таблицы «Результаты» ¢ Для поля Предмет в подстановке постройте запрос такой, чтобы из Изменение таблицы «Результаты» ¢ Для поля Предмет в подстановке постройте запрос такой, чтобы из таблицы Предметы выводились все возможные предметы (см. слайд 77)

Изменение таблицы «Результаты» ¢ Для поля Номер_П в подстановке постройте запрос такой, чтобы из Изменение таблицы «Результаты» ¢ Для поля Номер_П в подстановке постройте запрос такой, чтобы из таблицы Преподаватели выводились номер преподавателя, его фамилия и кафедра.

Изменение таблицы «Результаты» ¢ Для поля Номер_С в подстановке постройте запрос такой, чтобы из Изменение таблицы «Результаты» ¢ Для поля Номер_С в подстановке постройте запрос такой, чтобы из таблицы Студенты выводились номер студента, его фамилия и группа.

Схема данных ¢ Измените связи на схеме данных Схема данных ¢ Измените связи на схеме данных

Изменение таблицы «Результаты» ¢ Заполните таблицу Результаты, учитывая, что: 1. все студенты 1 курса Изменение таблицы «Результаты» ¢ Заполните таблицу Результаты, учитывая, что: 1. все студенты 1 курса (те, у кого вторая цифра в номере группы равна 1) изучают предметы Высшая. Алгебра, История. Развития. ВТ, Обзор. Языков. Программирования 2. Все студенты 2 курса изучают предметы Мат. Анализ, Программирование 3. Преподаватели и предметы: a) b) c) d) e) Высшую. Алгебру преподает Эйнтштейн Историю. Развития. ВТ преподает Джобс Обзор. Языков. Программирования преподает Вирт Мат. Анализ преподает Нейман Программирование преподает Бернс Ли

Таблица «Результаты» ¢ Заполните результаты каждого студента, учитывая, что по некоторым предметам оценки за Таблица «Результаты» ¢ Заполните результаты каждого студента, учитывая, что по некоторым предметам оценки за теорию, практику и/или лабораторную работу в принципе отсутствуют (см. таблицу)

Таблица «Результаты» Предмет Оценки Теория Практика Лабораторная Высшая Алгебра + + - История Развития Таблица «Результаты» Предмет Оценки Теория Практика Лабораторная Высшая Алгебра + + - История Развития ВТ + - - Мат Анализ + + - Обзор Языков Программирования + - - Программирование + - + (если у студента есть задолжность, значит оценка за теорию, практику и/или лабораторную работу неудовлетворительная, т. е. « 2 » )

Построение запроса «Сводная информация» Конструктора запросов создайте запрос типа Выборка, в котором будут отображаться Построение запроса «Сводная информация» Конструктора запросов создайте запрос типа Выборка, в котором будут отображаться ¢ С помощью следующие данные: ¤ Группа студента ¤ Его фамилия ¤ Фамилия преподавателя ¤ Предмет ¤ Результаты и задолжности При этом в запросе записи должны быть отсортированы таким образом, чтобы: ¤ номера групп указывались по возрастанию ¤ список студентов группы формировался в алфавитном порядке ¤ список предметов каждого студента также формировался в алфавитном порядке

Построение запроса «Сводная информация» Построение запроса «Сводная информация»

present5.com

Программирование сайтов. Базы данных для сайтов

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

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

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

Для построения запросов к базам данных широко применяется SQL (Structured Query Language) — «язык структурированных запросов». С помощью SQL может осуществляться добавление, удаление, редактирование записей в таблицах баз данных, выборка данных в соответствии с различными условиями, сортировка данных и многое другое.

В программировании сайтов управление БД осуществляется при помощи клиент-серверных систем управления базами данных (СУБД), таких как Oracle, MS SQL Server, PostgreSQL, MySQL и др. Клиент-серверные СУБД обрабатывают запросы централизованно, к их достоинствам относят обеспечение высокой надежности баз данных, высокой доступности и высокой безопасности.

СУБД MySQL — свободная система управления базами данных, одна из наиболее часто применяемых в программировании сайтов. СУБД MySQL поддерживает большое количество существующих типов таблиц (InnoDB, MyISAM и т. д.), а благодаря открытой архитектуре и GPL-лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц. Управление базами данных с помощью MySQL очень удобно, что сделало данную систему востребованной и популярной.

Система управления реляционными базами данных Microsoft SQL Server поставляется компанией Microsoft на коммерческой основе (за исключением бесплатной редакции Express Edition). Данная СУБД использует язык запросов Transact-SQL, поддерживается операционными системами семейства Windows Desktop/Server. В СУБД Microsoft SQL Server присутствует графическое ПО для конструирования и оптимизации запросов (SQL Management Studio и Studio Express).

Объектно-реляционная система управления базами данных компании Oracle - Oracle Database - работает на Windows, Unix, Linux, MacOS. Oracle Database, в отличие от MySQL, например, имеет более широкую область применения. СУБД Oracle обладает высокой производительностью, широким функционалом, уникальными технологиями (RAC, RAT и т. д.). В программировании сайтов для небольших и средних компаний применяется достаточно редко ввиду своей высокой стоимости. К тому же, довольно сложно найти хостинг с поддержкой данной СУБД.

Cвободная система управления базами данных PostgreSQL существует в редакциях для Linux, Solaris/OpenSolaris, Win32, Win x86-64, Mac OS X, FreeBSD, QNX 4.25, QNX 6. Базируется на языке SQL. Среди преимуществ PostgreSQL выделяют поддержку БД практически неограниченного размера, наличие надежных механизмов репликации, легкую расширяемость, поддержку большого набора встроенных типов данных и многое другое.

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

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

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

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

Заказать изготовление и программирование сайтов в WebStudio2U вы можете прямо сейчас!

Теги:программирование сайтов, базы данных для сайтов, обращение к бд, запросы к бд, mysql

Смотрите также

 

..:::Новинки:::..

Windows Commander 5.11 Свежая версия.

Новая версия
IrfanView 3.75 (рус)

Обновление текстового редактора TextEd, уже 1.75a

System mechanic 3.7f
Новая версия

Обновление плагинов для WC, смотрим :-)

Весь Winamp
Посетите новый сайт.

WinRaR 3.00
Релиз уже здесь

PowerDesk 4.0 free
Просто - напросто сильный upgrade проводника.

..:::Счетчики:::..