|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Реферат: Реляционная алгебра Кодда. Реляционная алгебра рефератРеферат - Реляционная алгебра КоддаОбработку данных реляционной модели можно реализовать методами реляционной алгебры. Реляционная алгебра, определена Коддом и содержит 8 операций, разделенных на две группы: 1. Теоретико – множественные операции — объединение, пересечение, вычитание и декартово произведение. 2. Специальные реляционные операции – выборка, проекция, соединение, деление
Теоретико-множественные операции
Реляционный оператор представляет собой функцию с отношениями в качестве аргументов и возвращающую отношение в качестве результата.
R=f(R1, R2…… Rn) В качестве аргументов в реляционные операторы могут быть проставлены другие реляционные операторы, подходящие по типу. R=f(f1(R11, R21…… Rn1), f2(R21, R22…… R2n)….) В силу этого реляционная алгебра является замкнутой. Отношения называются совместимыми по типу, если они имеют идентичные заголовки, а именно: 1. отношения имеют одно и тоже множество имен атрибутов, т.е. для любого атрибута в одном отношении найдется атрибут с таким же наименованием в другом отношении. 2. атрибуты с одинаковыми именами определены на одних и тех же доменах. Некоторые отношения не являются совместимыми по типу, но становятся таковыми после переименования атрибутов. Оператор переименования R rename A1,A2,… as new A1, new A2…, Например: R rename student as starosta
Объединение Объединением двух совместимых по типу отношений называется отношение с тем же заголовком, что и у R1 и R2, и телом, включающим все кортежи операндов, за исключением повторяющихся. Синтаксис R1 union R2
R1
R2
Объединение
Операторы не передают результату никаких данных о потенциальных ключах.
Пересечение Пересечением двух совместимых по типу отношений R1 и R2 называется отношение с тем же заголовком, что и у отношений R1 и R2, и телом, состоящим из кортежей, принадлежащих одновременно обоим отношениям R1 и R2. Синтаксис
R1 intersect R2
Вычитание Вычитанием двух совместимых по типу отношений R1 и R2, называется отношение с тем же заголовком, что и у отношений R1 и R2, и телом, состоящим из кортежей, принадлежащих отношению R1 и не принадлежащих R2. Синтаксис R1 minus R2
Декартово произведение
Декартовым произведением двух отношений R1(R11, R12, R13…) и R2(R21,R22,R23,…) называется отношение, заголовок которого является сцеплением заголовком отношений R1 и R2: (R11, R12, R13… R21,R22,R23,…), а тело состоит из кортежей, являющихся сцеплением кортежей отношений R1 и R2 (r11, r12, r13… r21, r22, r23….), таких что (r11, r12, r13…) принадлежит R1, а (r21, r22, r23….) принадлежит R2/ Синтаксис R1 times R2
Мощность произведения равна произведению мощностей. Если атрибуты R1 и R2 имеют атрибуты с одинаковыми наименованиями, то перед выполнением операции декартового произведения такие атрибуты необходимо переименовать. Совместимость по типу не требуется. R1
R2
R1 times R2
Специальные реляционные операторы
Выборка (ограничение, селекция) Выборку называют горизонтальным срезом отношения по некоторому условию. Выборкой на отношении R с условием С называется отношение с тем же заголовком, что и у отношения R, и телом, состоящим из кортежей, значения атрибутов которых при подстановке в условие С дают значение ИСТИНА. Обычно условие С имеет вид R11Q R12, где Q принадлежит {=<>¹³£}, а R11 и R12 атрибуты отношения R или скалярные значения. Такие выборки называются Q — выборки. Синтаксис R where C или R where R11Q R12
Выборка R where стипендия >250
Проекция
Проекцией отношения R по атрибутам R1, R2, R3…Rn, где каждый атрибут принадлежит R, называется отношение с заголовком (R1, R2, R3…Rn) и телом, содержащим множество кортежей вида (r1,r2,r3,…rn). При этом дубликаты кортежи удаляются. Проекцию называют вертикальным срезом отношения. Синтаксис R[R1, R2, R3…Rn]
R[факультет]
Соединение Обычно рассматривают несколько разновидностей операции соединения. Общая операция соединения Q-соединение Экви-соединение Естественное соединение Наиболее важным из этих операций является операция естественного соединения. Так как остальные разновидности соединения являются частными случаями общей операции соединения.
Общая операция соединения: Соединением отношений R1 и R2 по условию называется отношение (R1 times R2) where C, где С представляет собой логическое выражение, в которое могут входить атрибуты отношений R1 и R2 и/или скалярные выражения. То есть, чтобы выполнить операцию соединения, необходимо выполнить последовательно операцию декартова произведения и выборки. Если в отношениях R1 и R2 имеются атрибуты с одинаковыми наименованиями, то перед выполнением соединения такие атрибуты необходимо переименовать. Q-соединение (R1 times R2) where R11QR21 — Q-соединение отношения R1 по атрибуту R11 с отношением R2 по атрибуту R21. Записывают и R1 [R11QR21] R2
R1
R2
Какие экзамены должны быть сданы студентами, закончившими учебный год R1[семестр <=2*курс]R2
Экви соединение это соединение, когда Q есть равенство.
Естественное соединение Пусть даны отношения R1(R11,R12,R13,..R1n,Z1,Z2,…Zn) и R2(Z1,Z2,…Zn, R21,R22,R23,..,R2m). Тогда естественным соединением отношений R1 и R2 называется отношение с заголовком (R11,R12,R13,..R1n,Z1,Z2,…Zn, R21,R22,R23,..,R2m) и телом, содержащим множество кортежей (r11,r12,r13,…r1n,z1,z2,z3,…zn, r21, r22,…r2m), таких что (r11,r12,r13,…r1n,z1,z2,z3,…zn) принадлежит R1, а (z1,z2,z3,…zn, r21, r22,…r2m) принадлежит R2 Синтаксис R1 join R2 Соединение производится по одинаковым атрибутам. R1
R2
R3
R1 join R2 join R3
Деление У операции деления два операнда бинарное и унарное. Результативное отношение состоит из одноатрибутивных кортежей, включающих значения первого атрибута кортежей первого операнда-отношения, таких что множество значений второго атрибута совпадает со множеством значений единственного атрибута второго операнда-отношения. Синтаксис R1 divideby R2 R1
R2
R1 divideby R2
Для работы с БД, которые частично или полностью используют реляционную модель данных предназначен язык SQL. Язык разработан на основе реляционной алгебры и относится к непроцедурным языкам программирования (можно определить то, что необходимо выполнить, а не то как это сделать). Язык оперирует отношениями и в результате инструкций языка получается отношение. Первый стандарт языка разработан в 1989 году Национальным институтом стандартизации США (ANSI). В 1992 году появилась версия SQL92, в 1999 году SQL3. Сегодня различают различные типы диалектов, расширяющие стандарт языка. Существуют две формы языка: Интерактивный — создание запросов в режиме диалога Встроенный — инструкции языка, которые встраиваются внутрь программ, написанных на другом языке (например, при разработке приложений, обрабатывающих данные, расположенные в БД). Рассмотрим интерактивную форму.
Типы команд языка
DDl- язык определения данных CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE VIEW, ALTER VIEW, DROP VIEW, CREATE INDEX, DROP INDEX DML – язык манипулирования данными INSERT, UPDATE, DELETE DQL – язык запросов к данным SELECT DCL – язык управления данными, либо команды администрирования данных CREATE DATABASE, ALTER DATABASE, DROP DATABASE, GRANT (предоставление прав доступа для действий над заданными объектами БД), REVOKE (лишение прав доступа для действий над заданными объектами БД) и др. Команды администрирования данных- предоставляют возможность аудита и анализа операций внутри БД. Могут использоваться при анализе производительности системы данных в целом. START AUDIT, STOP AUDIT Команды управления транзакциями – позволяют выполнить обработку информации, объединенной в транзакцию COMMIT, ROLLBACK, SAVE POINT, SET TRANSACTION (назначение имени транзакции) Процедурный язык DECLARE, OPEN, FETCH, CLOSE, EXECUTE и др.
www.ronl.ru Лекция - Реляционная алгебра КоддаОбработку данных реляционной модели можно реализовать методами реляционной алгебры. Реляционная алгебра, определена Коддом и содержит 8 операций, разделенных на две группы: 1. Теоретико – множественные операции — объединение, пересечение, вычитание и декартово произведение. 2. Специальные реляционные операции – выборка, проекция, соединение, деление
Теоретико-множественные операции
Реляционный оператор представляет собой функцию с отношениями в качестве аргументов и возвращающую отношение в качестве результата.
R=f(R1, R2…… Rn) В качестве аргументов в реляционные операторы могут быть проставлены другие реляционные операторы, подходящие по типу. R=f(f1(R11, R21…… Rn1), f2(R21, R22…… R2n)….) В силу этого реляционная алгебра является замкнутой. Отношения называются совместимыми по типу, если они имеют идентичные заголовки, а именно: 1. отношения имеют одно и тоже множество имен атрибутов, т.е. для любого атрибута в одном отношении найдется атрибут с таким же наименованием в другом отношении. 2. атрибуты с одинаковыми именами определены на одних и тех же доменах. Некоторые отношения не являются совместимыми по типу, но становятся таковыми после переименования атрибутов. Оператор переименования R rename A1,A2,… as new A1, new A2…, Например: R rename student as starosta
Объединение Объединением двух совместимых по типу отношений называется отношение с тем же заголовком, что и у R1 и R2, и телом, включающим все кортежи операндов, за исключением повторяющихся. Синтаксис R1 union R2
R1
R2
Объединение
Операторы не передают результату никаких данных о потенциальных ключах.
Пересечение Пересечением двух совместимых по типу отношений R1 и R2 называется отношение с тем же заголовком, что и у отношений R1 и R2, и телом, состоящим из кортежей, принадлежащих одновременно обоим отношениям R1 и R2. Синтаксис
R1 intersect R2
Вычитание Вычитанием двух совместимых по типу отношений R1 и R2, называется отношение с тем же заголовком, что и у отношений R1 и R2, и телом, состоящим из кортежей, принадлежащих отношению R1 и не принадлежащих R2. Синтаксис R1 minus R2
Декартово произведение
Декартовым произведением двух отношений R1(R11, R12, R13…) и R2(R21,R22,R23,…) называется отношение, заголовок которого является сцеплением заголовком отношений R1 и R2: (R11, R12, R13… R21,R22,R23,…), а тело состоит из кортежей, являющихся сцеплением кортежей отношений R1 и R2 (r11, r12, r13… r21, r22, r23….), таких что (r11, r12, r13…) принадлежит R1, а (r21, r22, r23….) принадлежит R2/ Синтаксис R1 times R2
Мощность произведения равна произведению мощностей. Если атрибуты R1 и R2 имеют атрибуты с одинаковыми наименованиями, то перед выполнением операции декартового произведения такие атрибуты необходимо переименовать. Совместимость по типу не требуется. R1
R2
R1 times R2
Специальные реляционные операторы
Выборка (ограничение, селекция) Выборку называют горизонтальным срезом отношения по некоторому условию. Выборкой на отношении R с условием С называется отношение с тем же заголовком, что и у отношения R, и телом, состоящим из кортежей, значения атрибутов которых при подстановке в условие С дают значение ИСТИНА. Обычно условие С имеет вид R11Q R12, где Q принадлежит {=<>¹³£}, а R11 и R12 атрибуты отношения R или скалярные значения. Такие выборки называются Q — выборки. Синтаксис R where C или R where R11Q R12
Выборка R where стипендия >250
Проекция
Проекцией отношения R по атрибутам R1, R2, R3…Rn, где каждый атрибут принадлежит R, называется отношение с заголовком (R1, R2, R3…Rn) и телом, содержащим множество кортежей вида (r1,r2,r3,…rn). При этом дубликаты кортежи удаляются. Проекцию называют вертикальным срезом отношения. Синтаксис R[R1, R2, R3…Rn]
R[факультет]
Соединение Обычно рассматривают несколько разновидностей операции соединения. Общая операция соединения Q-соединение Экви-соединение Естественное соединение Наиболее важным из этих операций является операция естественного соединения. Так как остальные разновидности соединения являются частными случаями общей операции соединения.
Общая операция соединения: Соединением отношений R1 и R2 по условию называется отношение (R1 times R2) where C, где С представляет собой логическое выражение, в которое могут входить атрибуты отношений R1 и R2 и/или скалярные выражения. То есть, чтобы выполнить операцию соединения, необходимо выполнить последовательно операцию декартова произведения и выборки. Если в отношениях R1 и R2 имеются атрибуты с одинаковыми наименованиями, то перед выполнением соединения такие атрибуты необходимо переименовать. Q-соединение (R1 times R2) where R11QR21 — Q-соединение отношения R1 по атрибуту R11 с отношением R2 по атрибуту R21. Записывают и R1 [R11QR21] R2
R1
R2
Какие экзамены должны быть сданы студентами, закончившими учебный год R1[семестр <=2*курс]R2
Экви соединение это соединение, когда Q есть равенство.
Естественное соединение Пусть даны отношения R1(R11,R12,R13,..R1n,Z1,Z2,…Zn) и R2(Z1,Z2,…Zn, R21,R22,R23,..,R2m). Тогда естественным соединением отношений R1 и R2 называется отношение с заголовком (R11,R12,R13,..R1n,Z1,Z2,…Zn, R21,R22,R23,..,R2m) и телом, содержащим множество кортежей (r11,r12,r13,…r1n,z1,z2,z3,…zn, r21, r22,…r2m), таких что (r11,r12,r13,…r1n,z1,z2,z3,…zn) принадлежит R1, а (z1,z2,z3,…zn, r21, r22,…r2m) принадлежит R2 Синтаксис R1 join R2 Соединение производится по одинаковым атрибутам. R1
R2
R3
R1 join R2 join R3
Деление У операции деления два операнда бинарное и унарное. Результативное отношение состоит из одноатрибутивных кортежей, включающих значения первого атрибута кортежей первого операнда-отношения, таких что множество значений второго атрибута совпадает со множеством значений единственного атрибута второго операнда-отношения. Синтаксис R1 divideby R2 R1
R2
R1 divideby R2
Для работы с БД, которые частично или полностью используют реляционную модель данных предназначен язык SQL. Язык разработан на основе реляционной алгебры и относится к непроцедурным языкам программирования (можно определить то, что необходимо выполнить, а не то как это сделать). Язык оперирует отношениями и в результате инструкций языка получается отношение. Первый стандарт языка разработан в 1989 году Национальным институтом стандартизации США (ANSI). В 1992 году появилась версия SQL92, в 1999 году SQL3. Сегодня различают различные типы диалектов, расширяющие стандарт языка. Существуют две формы языка: Интерактивный — создание запросов в режиме диалога Встроенный — инструкции языка, которые встраиваются внутрь программ, написанных на другом языке (например, при разработке приложений, обрабатывающих данные, расположенные в БД). Рассмотрим интерактивную форму.
Типы команд языка
DDl- язык определения данных CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE VIEW, ALTER VIEW, DROP VIEW, CREATE INDEX, DROP INDEX DML – язык манипулирования данными INSERT, UPDATE, DELETE DQL – язык запросов к данным SELECT DCL – язык управления данными, либо команды администрирования данных CREATE DATABASE, ALTER DATABASE, DROP DATABASE, GRANT (предоставление прав доступа для действий над заданными объектами БД), REVOKE (лишение прав доступа для действий над заданными объектами БД) и др. Команды администрирования данных- предоставляют возможность аудита и анализа операций внутри БД. Могут использоваться при анализе производительности системы данных в целом. START AUDIT, STOP AUDIT Команды управления транзакциями – позволяют выполнить обработку информации, объединенной в транзакцию COMMIT, ROLLBACK, SAVE POINT, SET TRANSACTION (назначение имени транзакции) Процедурный язык DECLARE, OPEN, FETCH, CLOSE, EXECUTE и др.
www.ronl.ru Курсовая работа - Реляционная алгебра КоддаОбработку данных реляционной модели можно реализовать методами реляционной алгебры. Реляционная алгебра, определена Коддом и содержит 8 операций, разделенных на две группы: 1. Теоретико – множественные операции — объединение, пересечение, вычитание и декартово произведение. 2. Специальные реляционные операции – выборка, проекция, соединение, деление
Теоретико-множественные операции
Реляционный оператор представляет собой функцию с отношениями в качестве аргументов и возвращающую отношение в качестве результата.
R=f(R1, R2…… Rn) В качестве аргументов в реляционные операторы могут быть проставлены другие реляционные операторы, подходящие по типу. R=f(f1(R11, R21…… Rn1), f2(R21, R22…… R2n)….) В силу этого реляционная алгебра является замкнутой. Отношения называются совместимыми по типу, если они имеют идентичные заголовки, а именно: 1. отношения имеют одно и тоже множество имен атрибутов, т.е. для любого атрибута в одном отношении найдется атрибут с таким же наименованием в другом отношении. 2. атрибуты с одинаковыми именами определены на одних и тех же доменах. Некоторые отношения не являются совместимыми по типу, но становятся таковыми после переименования атрибутов. Оператор переименования R rename A1,A2,… as new A1, new A2…, Например: R rename student as starosta
Объединение Объединением двух совместимых по типу отношений называется отношение с тем же заголовком, что и у R1 и R2, и телом, включающим все кортежи операндов, за исключением повторяющихся. Синтаксис R1 union R2
R1
R2
Объединение
Операторы не передают результату никаких данных о потенциальных ключах.
Пересечение Пересечением двух совместимых по типу отношений R1 и R2 называется отношение с тем же заголовком, что и у отношений R1 и R2, и телом, состоящим из кортежей, принадлежащих одновременно обоим отношениям R1 и R2. Синтаксис
R1 intersect R2
Вычитание Вычитанием двух совместимых по типу отношений R1 и R2, называется отношение с тем же заголовком, что и у отношений R1 и R2, и телом, состоящим из кортежей, принадлежащих отношению R1 и не принадлежащих R2. Синтаксис R1 minus R2
Декартово произведение
Декартовым произведением двух отношений R1(R11, R12, R13…) и R2(R21,R22,R23,…) называется отношение, заголовок которого является сцеплением заголовком отношений R1 и R2: (R11, R12, R13… R21,R22,R23,…), а тело состоит из кортежей, являющихся сцеплением кортежей отношений R1 и R2 (r11, r12, r13… r21, r22, r23….), таких что (r11, r12, r13…) принадлежит R1, а (r21, r22, r23….) принадлежит R2/ Синтаксис R1 times R2
Мощность произведения равна произведению мощностей. Если атрибуты R1 и R2 имеют атрибуты с одинаковыми наименованиями, то перед выполнением операции декартового произведения такие атрибуты необходимо переименовать. Совместимость по типу не требуется. R1
R2
R1 times R2
Специальные реляционные операторы
Выборка (ограничение, селекция) Выборку называют горизонтальным срезом отношения по некоторому условию. Выборкой на отношении R с условием С называется отношение с тем же заголовком, что и у отношения R, и телом, состоящим из кортежей, значения атрибутов которых при подстановке в условие С дают значение ИСТИНА. Обычно условие С имеет вид R11Q R12, где Q принадлежит {=<>¹³£}, а R11 и R12 атрибуты отношения R или скалярные значения. Такие выборки называются Q — выборки. Синтаксис R where C или R where R11Q R12
Выборка R where стипендия >250
Проекция
Проекцией отношения R по атрибутам R1, R2, R3…Rn, где каждый атрибут принадлежит R, называется отношение с заголовком (R1, R2, R3…Rn) и телом, содержащим множество кортежей вида (r1,r2,r3,…rn). При этом дубликаты кортежи удаляются. Проекцию называют вертикальным срезом отношения. Синтаксис R[R1, R2, R3…Rn]
R[факультет]
Соединение Обычно рассматривают несколько разновидностей операции соединения. Общая операция соединения Q-соединение Экви-соединение Естественное соединение Наиболее важным из этих операций является операция естественного соединения. Так как остальные разновидности соединения являются частными случаями общей операции соединения.
Общая операция соединения: Соединением отношений R1 и R2 по условию называется отношение (R1 times R2) where C, где С представляет собой логическое выражение, в которое могут входить атрибуты отношений R1 и R2 и/или скалярные выражения. То есть, чтобы выполнить операцию соединения, необходимо выполнить последовательно операцию декартова произведения и выборки. Если в отношениях R1 и R2 имеются атрибуты с одинаковыми наименованиями, то перед выполнением соединения такие атрибуты необходимо переименовать. Q-соединение (R1 times R2) where R11QR21 — Q-соединение отношения R1 по атрибуту R11 с отношением R2 по атрибуту R21. Записывают и R1 [R11QR21] R2
R1
R2
Какие экзамены должны быть сданы студентами, закончившими учебный год R1[семестр <=2*курс]R2
Экви соединение это соединение, когда Q есть равенство.
Естественное соединение Пусть даны отношения R1(R11,R12,R13,..R1n,Z1,Z2,…Zn) и R2(Z1,Z2,…Zn, R21,R22,R23,..,R2m). Тогда естественным соединением отношений R1 и R2 называется отношение с заголовком (R11,R12,R13,..R1n,Z1,Z2,…Zn, R21,R22,R23,..,R2m) и телом, содержащим множество кортежей (r11,r12,r13,…r1n,z1,z2,z3,…zn, r21, r22,…r2m), таких что (r11,r12,r13,…r1n,z1,z2,z3,…zn) принадлежит R1, а (z1,z2,z3,…zn, r21, r22,…r2m) принадлежит R2 Синтаксис R1 join R2 Соединение производится по одинаковым атрибутам. R1
R2
R3
R1 join R2 join R3
Деление У операции деления два операнда бинарное и унарное. Результативное отношение состоит из одноатрибутивных кортежей, включающих значения первого атрибута кортежей первого операнда-отношения, таких что множество значений второго атрибута совпадает со множеством значений единственного атрибута второго операнда-отношения. Синтаксис R1 divideby R2 R1
R2
R1 divideby R2
Для работы с БД, которые частично или полностью используют реляционную модель данных предназначен язык SQL. Язык разработан на основе реляционной алгебры и относится к непроцедурным языкам программирования (можно определить то, что необходимо выполнить, а не то как это сделать). Язык оперирует отношениями и в результате инструкций языка получается отношение. Первый стандарт языка разработан в 1989 году Национальным институтом стандартизации США (ANSI). В 1992 году появилась версия SQL92, в 1999 году SQL3. Сегодня различают различные типы диалектов, расширяющие стандарт языка. Существуют две формы языка: Интерактивный — создание запросов в режиме диалога Встроенный — инструкции языка, которые встраиваются внутрь программ, написанных на другом языке (например, при разработке приложений, обрабатывающих данные, расположенные в БД). Рассмотрим интерактивную форму.
Типы команд языка
DDl- язык определения данных CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE VIEW, ALTER VIEW, DROP VIEW, CREATE INDEX, DROP INDEX DML – язык манипулирования данными INSERT, UPDATE, DELETE DQL – язык запросов к данным SELECT DCL – язык управления данными, либо команды администрирования данных CREATE DATABASE, ALTER DATABASE, DROP DATABASE, GRANT (предоставление прав доступа для действий над заданными объектами БД), REVOKE (лишение прав доступа для действий над заданными объектами БД) и др. Команды администрирования данных- предоставляют возможность аудита и анализа операций внутри БД. Могут использоваться при анализе производительности системы данных в целом. START AUDIT, STOP AUDIT Команды управления транзакциями – позволяют выполнить обработку информации, объединенной в транзакцию COMMIT, ROLLBACK, SAVE POINT, SET TRANSACTION (назначение имени транзакции) Процедурный язык DECLARE, OPEN, FETCH, CLOSE, EXECUTE и др.
www.ronl.ru |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|