Структура базы данных

 

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

 

Свойства полей. Типы полей

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

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

От размера поля зависит, сколько информации в нем может поместиться.

Уникальным свойством любого поля является его Имя. Одна база данных не может иметь двух полей с одинаковыми именами.

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

При работе с базой данных Access допустимы следующие типы полей:

1. Текстовый — одна строка текста (до 255 символов)

2. Поле МЕМО

 — текст, состоящий из нескольких строк, которые затем можно будет просмотреть при помощи полос прокрутки (до 65 535 символов).

3. Числовой — число любого типа (целое, вещественное и т.д.).

4. Дата/время — поле, содержащее дату или время.

5. Денежный — поле, выраженное в денежных единицах (р., $ и т.д.)

6. Счетчик — поле, которое вводится автоматически с вводом каждой записи.

7. Логический — содержит одно из значений TRUE (истина) или FALSE (ложно) и применяется в логических операциях.

8. Поле объекта OLE — содержит рисунки, звуковые файлы, таблицы Excel, документ Word и т.д.

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

Объекты Access

1. Таблицы — основные объекты базы данных. В них хранятся данные. Реляционная база данных может иметь много взаимосвязанных полей.

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

3. Формы — это объекты, с помощью которых в базу вводят новые данные или просматривают имеющиеся.

4. Отчеты — это формы «наоборот». С их помощью данные выдают на принтер в удобном и наглядном виде.

5. Макросы — это макрокоманды. Если какие-то операции с базой производятся особенно часто, имеет смысл сгруппировать несколько команд в один макрос и назначить его выделенной комбинации клавиш.

6. Модули — это программные процедуры, написанные на языке Visual Basic.

Кроме шести вкладок для основных объектов стартовое окно базы данных Access содержит три командные кнопки: Открыть, Конструктор, Создать. С их помощью выбирается режим работы с базой.

1. Кнопка Открыть — открывает избранный объект для просмотра, внесения новых записей или изменения тех, что были внесены ранее.

2. Кнопка Конструктор — режим, в котором осуществляется построение таблицы или формы.

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

 

ЗАДАНИЕ

Проектирование и разработка средствами MS Access информационной системы «Заказчики на товар». Разработка состоит из нескольких этапов.

 

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

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

Входными данными в БД являются:

  • данные о заказчиках;

  • данные о заказах;

  • данные о товарах и их типах;

  • данные о том, что заказано.

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

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

3 этап.

 Синтез компьютерной модели и технология создания базы данных «Заказчики на товар». Это практическая часть нашей работы.

УПРАЖНЕНИЕ № 1. Запуск Access. Создание файла новой базы данных.

1. Пуск Программы Microsoft Access

2. После запуска на экране появляется окно Access, в котором необходимо щелкнуть по ссылке Новая база данных

3. На экране появляется окно Файл новой базы данных. В поле Папка откройте личную папку в папке своей группы

 на сетевом диске Е. В текстовом поле Имя файла вместо db1 введите zakaz tovarov. Щелкните Создать.

УПРАЖНЕНИЕ 2. Создание таблиц

Наша база данных состоит из пяти таблиц. Начнем работу с создания исходной таблицы «Заказчики».

1. В окне zakaz tovarov выделите объект Таблицы и щелкните Создать.

2. В появившемся окне Новая таблица выберите пункт Конструктор и щелкните ОК

3. В окне Таблица 1: таблица в графу Имя поля введите имена полей, а в графу Тип данных введите их тип:

Имя поля

Тип данных

Код заказчика

Название

Адрес

Телефон

Представитель

Счетчик

Текстовый

Текстовый

Текстовый

Текстовый

4. Закройте окно Таблица1:таблица, щелкнув по кнопке Закрыть.

5. На вопрос Сохранить изменения макета или структуры таблицы? Щелкните Да.

6. Введите в окне Сохранение имя таблицы — «Заказчики«, ОК.

7.На вопрос Задать ключевые поля? щелкните Да, затем правой кнопкой мыши по строке «Код заказчика» Ключевое поле.

При этом созданная таблица «Заказчики» будет иметь такой вид в режиме конструктора:

8. Повторите пункты 1-7 для создания остальных таблиц.

Таблица «Товары»

Имя поля

Тип данных

Код товара (ключевое поле)

Название товара

Тип товара

Ед изм

Цена

Числовой

Текстовый

Текстовый

Текстовый

Числовой

При этом созданная таблица «Товары» будет иметь такой вид в режиме конструктора:

Таблица «Заказы»

Имя поля

Тип данных

Код заказа (ключевое поле)

Дата заказа

Дата исполнения

Код заказчика

Оплачено

Счетчик

Дата/время

Дата/время

Числовой

Логический

При этом созданная таблица «Заказы» будет иметь такой вид в режиме конструктора:

Таблица «Что заказано»

Имя поля

Тип данных

Код заказа

Код товара

Количество

Числовой

Числовой

Числовой

При этом созданная таблица «Что заказано» будет иметь такой вид в режиме конструктора:

Таблица «Типы товаров»

Имя поля

Тип данных

Тип товара (ключевое поле)

Текстовый

При этом созданная таблица «Типы товаров» будет иметь такой вид в режиме конструктора:

УПРАЖНЕНИЕ № 3. Создание связей между таблицами

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

Сервис Схема данных.

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

Наша схема данных с установленными связями будет иметь вид:

УПРАЖНЕНИЕ № 4. Заполнение таблиц

1. В окне zakaz tovarov: база данных щелкните Открыть для таблицы «Заказчики». На экране появится окно Заказчики: таблица

2. Установите курсор в поле Название и введите «Звездный стиль, ип». Для перемещения в следующее поле нажмите клавишу Enter или Tab.

3.     В поле Адрес введите «ул. Фритаун, 35»

4.     В поле Телефон введите «+380501234556».

5.     В поле Представитель введите «Харитонов Олег Васильевич»

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

6. Таким же способом занесите по одной записи в остальные таблицы.

 

УПРАЖНЕНИЕ № 5. Создание формы.

1. Переключите окно zakaz tovarov: база данных на объект Формы и щелкните кнопку Создать.

2. На экране появилось окно Новая форма, в котором в качестве источника данных выберите таблицу Заказчики.

3. Выберите пункт Мастер форм и щелкните ОК.

4. Следуя подсказкам Мастера форм выполните следующий алгоритм:

— В окне Создание форм, нажимая кнопку >>, перенесите все поля в форму. Щелкните Далее.

— Выберите внешний вид формы Ленточный. Щелкните Далее.

— Выберите стиль  Диффузный Щелкните Далее.

— Оставьте имя Заказчики. Щелкните Готово.

В результате проделанных операций форма БД Заказчики в режиме формы будет иметь вид:

Повторите пункты 1-4 для таблиц Типы товаров и Товары

Для таблиц Заказы и Что заказано необходимо будет так же повторить пункты 1-4, только при этом в типе представления данных выбрать Подчиненные формы (Форма на основании таблицы Что заказано будет являться подчиненной) выбрать внешний вид Ленточный

УПРАЖНЕНИЕ № 6. Заполнение базы данных.

1. Для перехода из режима Конструктор в режим Форма щелкните кнопку Режим формы.

2. Начнем заполнение всех полей формы. Установите переключатель записей (слева внизу экрана) на вторую запись и заполните все поля данными.

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

4. Закройте Access.

 

УПРАЖНЕНИЕ № 7. Создание запросов базы данных.

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

Запросы в режиме конструктора:

 

УПРАВЖНЕНИЕ № 8. Подготовка отчета.

1. Для создания отчета выберите объект Отчет в окне zakaz tovarov: база данных. Щелкните Создать.

2. На экране появится окно, аналогичное окну создания формы. Выберите источник данных Запрос Стоимость заказа и Мастер отчетов. Щелкните ОК.

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

4. После этого вы получите отчет, выполненный по одному из заданных шаблонов (строгий, формальный, выделенный, простой, черно-белый).

Отчет будет иметь вид:

  1. Закройте отчет.

  2. Аналогично создайте отчеты «Оплаченные заказы» и «Неоплаченные заказы» с подведением итогов по оплаченным и неоплаченным заказам. Они будут иметь вид:

База данных Oracle.

Структура и основные понятия СУБД Oracle

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

Базы данных Oracle: экземпляры и сущности

СУБД Oracle Database включает в себя физические и логические компоненты. Особого упоминания заслуживает понятие экземпляра. Замечено, что некоторые используют термины «база данных» и «экземпляр» в качестве синонимов. Да, это взаимосвязанные, но всё же разные вещи. База данных в терминологии Oracle — это физическое хранилище информации, а экземпляр — это программное обеспечение, которое работает на сервере и предоставляет доступ к информации, содержащейся в базе данных Oracle. Экземпляр исполняется на конкретном сервере либо компьютере, в то самое время как база данных хранится на дисках, подключённых к этому серверу:

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

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

Если упрощённо, то экземпляр — это мост к базе данных, а сама БД – это остров. Когда экземпляр запущен, мост работает, а данные способны попадать в базу данных Oracle и покидать её. Если мост перекрыт (экземпляр остановлен), пользователи не могут обращаться к базе данных, несмотря на то, что физически она никуда не исчезла.

Структура базы данных Oracle

База данных Oracle включает в себя: — табличные пространства; — управляющие файлы; — журналы; — архивные журналы; — файлы трассировки изменения блоков; — ретроспективные журналы; — файлы резервных копий (RMAN).

Табличные пространства Oracle

Любые данные, которые хранятся в базе данных Oracle, просто обязаны существовать в каком-либо табличном пространстве. Под табличным пространством (tablespace) понимают логическую структуру, то есть вы не сможете попросить ОС показать вам табличное пространство Oracle.

При этом каждое табличное пространство включает в себя физические структуры, называемые файлами данных (data files). Одно табличное пространство Oracle способно содержать один либо несколько файлов данных, в то время как каждый файл данных может принадлежать лишь одному tablespace. Создавая таблицу, мы можем указать, в какое именно табличное пространство мы её поместим — Oracle находит для неё место в каком-нибудь из файлов данных, которые составляют указанное табличное пространство.

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

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

Файлы базы данных Oracle

База данных Oracle может включать в себя физические файлы 3-х основных типов: • control files — управляющие файлы; • data files — файлы данных; • redo log files — журнальные файлы либо журналы.

Посмотрим на отношения между ними:

В управляющих файлах содержится информация о местонахождении других физических файлов, которые составляют базу данных Oracle, — речь идёт о файлах данных и журналов. Также там хранится важная информация о содержимом и состоянии БД Oracle. Что это за информация: • имя базы данных Oracle; • время создания БД; • имена и местонахождение журнальных файлов и файлов данных; • информация о табличных пространствах; • информация об архивных журналах; • история журналов, порядковый номер текущего журнала; • информация о файлах данных в автономном режиме; • информация о резервных копиях, контрольных точках, копиях файлов данных.

При этом функция управляющих файлов не ограничивается хранением важной информации, нужной при запуске экземпляра, — полезны они и в процессе удалении БД Oracle. К примеру, уже с версии Oracle Database 10g можно посредством команды DROP DATABASE удалить все файлы, которые перечислены в управляющем файле БД, включая сам управляющий файл.

Инициализация СУБД Oracle

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

Как правило, инициализационные параметры хранятся в файле параметров инициализации экземпляра (обычно это INIT.ORA) либо, начиная с Oracle9i, в репозитории, называемом файлом параметров сервера (SPFILE). С выходом каждой новой версии Oracle число обязательных параметров инициализации уменьшается.

Кстати, в дистрибутиве Oracle можно найти пример файла инициализации, который пригоден для запуска базы данных. Также можно воспользоваться специальной программой Database Configuration Assistant (DCA) — она подскажет обязательные значения.

Вот, к примеру, как выглядит список обязательных параметров инициализации для СУБД Oracle Database 11g: 1. Местонахождение управляющих файлов — CONTROLFILES. 2. Локальное имя БД — DB_NAME. 3. Имя домена БД Oracle — DBDOMAIN. 4. Местонахождение архивного журнала — LOGARCHIVEDEST. 5. Параметр, который включает архивирование журналов — LOG_ARCHIVE_DEST_STATE. 6. Местонахождение области быстрого восстановления — DBRECOVERYFILEDEST. 7. Наибольший размер области быстрого восстановления БД Oracle в байтах —DBRECOVERYFILEDESTSIZE. 8. Размер блока БД в байтах — DBBLOCKSIZE. 9. Наибольшее количество процессов ОС, которые обслуживают одновременный доступ к СУБД Oracle — PROCESSES. 10. Наибольшее число сеансов работы с БД — SESSIONS. 11. Наибольшее количество открытых курсоров в базе данных — OPEN_CURSORS. 12. Наименьшее количество разделяемых серверов базы данных Oracle — SHARED_SERVERS. 13. Имя удалённого прослушивателя — REM O TE_LI S TENER. 14. Версия СУБД Oracle, с которой должна поддерживаться совместимость — COMPATIBLE. 15. Размер области памяти, которая автоматически выделяется для PGA и SGA экземпляра — MEMORY_TARGET. 16. Время ожидания возможности установить монопольную блокировку до отправки сообщения об ошибке (для команд DDL) — DDLLOCKTIMEOUT. 17. Язык, который определён в подсистеме поддержки национальных языков для базы данных Oracle — NLS_LANGUAGE. 18. Территория, которая определена в подсистеме поддержки национальных языков для БД — NLS_TERRITORY.

Более подробную информацию смотрите в официальной документации для СУБД Oracle Database.

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


Краткий обзор структуры данных
Сложность? Влияние на производительность? Сохраняет в базе данных? Папка конфигурации? Entity Framework? Поведение папки? Отслеживание процесса?
Низкий Низкий Да Да, но не по умолчанию

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

Длина текста по умолчанию

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


Создать структуру базы данных

  1. В проекте конструктора щелкните СОЗДАТЬ ТИПЫ ДАННЫХ/ИНТЕГРАЦИЯ и выберите Структура базы данных .
  2. В окне создания структуры базы данных назовите структуру и снабдите ее полями данных, указав имя и тип данных каждого из них. Нажмите СОХРАНИТЬ.

    Параметр пакетной загрузки

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


Настройки создания структуры базы данных

9094538
Название настройки Описание
РАСШИРЕННЫЕ

Включить кэширование

Включает загрузку объекта в кэш

8
Скрыть в поиске Скрывает тип данных от отображения при поиске

Включить ID в ключ кэша потока Добавляет GUID в ключ шага кэша для облегчения поиска

Type Name Space Создает уникальный идентификатор для Entity (namespace.typename) для генерации имени таблицы SQL для Entity (namespace_typename)

Audit Changes таблицу Объекты аудита. Этот параметр используется, когда для этого объекта требуется мониторинг данных.

Порядок категорий Позволяет организовывать категории полей данных с помощью Designer

Включить пакетную загрузку Позволяет выполнять некоторые действия по вставке пакетов на серверной части созданный тип для использования в качестве супер- class для подклассов

Включить имя типа в описание Это включает или отключает видимость пространства имен Type

Является ли список поиска Указывает, будут ли данные списком поиска
ДЕЙСТВИЯ

Эта настройка позволяет создавать дополнительные действия для папки и папки1 900 быть принятым .

Для получения дополнительной информации о структурах данных посетите форум решений.

Была ли эта статья полезной?

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

Система управления базами данных (СУБД) — это программное обеспечение, которое позволяет получить доступ к данным, хранящимся в базе данных, и обеспечивает простой и эффективный метод — 

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

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

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

Система базы данных разделена на три компонента: обработчик запросов, диспетчер хранилища и дисковое хранилище. Они объясняются следующим образом.

Архитектура СУБД

1. Обработчик запросов:  Интерпретирует запросы (запросы), полученные от конечного пользователя через прикладную программу, в инструкции. Он также выполняет пользовательский запрос, полученный от компилятора DML.
Процессор запросов содержит следующие компоненты:

  • Компилятор DML: Он преобразует операторы DML в инструкции низкого уровня (машинный язык), чтобы их можно было выполнить.
  • Интерпретатор DDL: Преобразует операторы DDL в набор таблиц, содержащих метаданные (данные о данных).
  • Встроенный прекомпилятор DML: Преобразует операторы DML, встроенные в прикладную программу, в процедурные вызовы.
  • Оптимизатор запросов: Выполняет инструкцию, сгенерированную компилятором DML.

2. Storage Manager: Storage Manager — это программа, обеспечивающая интерфейс между данными, хранящимися в базе данных, и полученными запросами. Она также известна как система управления базами данных. Он поддерживает согласованность и целостность базы данных, применяя ограничения и выполняя операторы DCL. Он отвечает за обновление, хранение, удаление и извлечение данных в базе данных.
Содержит следующие компоненты –

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

3. Дисковое хранилище:  Содержит следующие компоненты:

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

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

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

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

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