## Контрольная работа №1 по БД
### __1. Опишите информацию, которая находится в столбце `ROWID` и форму её хранения__
`ROWID` - это псевдостолбец, содержащий физический (следовательно, уникальный) адрес (двоичные данные) строки в базе данных. Используются следующие типы данных:
- `UROWID` (universal `ROWID`) для индексно-организованных таблиц и внешних таблиц
- `ROWID` для прочих таблиц
обычных строка длины 18, в индексно-организованных - 13, в внешних - 23
Фактически `ROWID` представляется строкой.
https://docs.oracle.com/cd/A58617_01/server.804/a58241/ch5.htm
### __2. Перечислите интервальные типы данных Oracle и перечислите их свойства__
- `INTERVAL YEAR [(year_precision)] TO MONTH` - представляет период времени с точностью до лет и месяцев (по умолчаию year_precision = 2)
- `INTERVAL [DAY [(days_precision)]] [TO HOUR | MINUTE | SECOND [(seconds_precision)]]` - представляет период времени с точностью до дней, часов, минут и секунд (по умолчанию y_p = 2, s_p = 6)
http://www.java2s.com/Book/Oracle/Data-Types/INTERVAL_YEAR_TO_MONTH.htm
http://www.java2s.com/Book/Oracle/Data-Types/INTERVAL_DAY_TO_SECOND.htm
### __3. Перечислите типы синонимов в Oracle и опишите особенности__
Синоним - альтернативное имя для объектов БД(таблицы, представления, последовательности и т.д.)
Типы синонимов:
* `PUBLIC`
* Доступны всем пользователям, имеющим соответствующие привелегии на базовый объект
* `PRIVATE`
* Доступен в рамках своей схемы
* Имя такого синонима должно быть уникальным в своей схеме
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7001.htm
### __4. Каковы отличия в функционировании и использовании B-tree и Bitmap индексов?__
B-tree:
- В основе структуры индекса используется сбалансированное дерево поиска
- Блоки верхнего уровня - branch (ветка), нижнего - leaf (лист)
- Листовые блоки содержат 2 элемента - индексированное значение столбца и идентификатор ROWID для строки содержащей значение столбца
- Сканирование индекса даёт быструю возможность обратиться к нужной строке через ROWID
- лучше использовать для множества с хорошим распределением и большимм количеством уникальных значений
Bitmap:
- Используют битовые карты для указания значения индексированного столбца (состоят из битового потока 0 и 1 для каждого столбца индекса)
- Хорошо использовать для таблиц с низким числом уникальных значений и при этом большого размера таблицы
Использование:


https://docs.oracle.com/cd/E11882_01/server.112/e25554/indexes.htm#DWHSG006
https://oracle-dba.ru/docs/architecture/indexes/
https://habr.com/ru/post/102785/
https://docs.oracle.com/cd/E11882_01/server.112/e25554/indexes.htm#DWHSG8131
### __5. Каковы отличия в хранении стандартных и кластерных таблиц в Oracle?__
*Кластерами называют две или более таблиц, которые физически хранятся вместе*, чтобы использовать преимущества совпадающих между таблицами столбцов. Если две таблицы имеют идентичный столбец и вам, к примеру, часто приходится соединять таблицы по нему, то становится выгодно хранить значения общих столбцов в одном и том же блоке данных. Целью такой организации является сокращение объема ввода-вывода с увеличением скорости доступа при соединении связанных таблиц. Однако кластеры понижают производительность операторов INSERT, поскольку для хранения данных нескольких таблиц требуется больше блоков.
Обычные таблицы Oracle, в которых данные хранятся без какого-то определенного порядка.
https://oracle-patches.com/oracle/begin/3008-%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D1%8B-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86
https://oracle-patches.com/oracle/prof/3002-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B-oracle#view
### __6. Каковы отличия в хранении стандартных и индексно-организованных таблиц в Oracle?__
Индекс-таблицы (index-organized table — IOT) в базе данных Oracle Database представляют собой некоторый гибрид, потому что им присущи свойства как индексов, так и таблиц. Таблицы IOT — это таблицы, в которых данные хранятся в виде индексной структуры B-дерева (в отсортированном по первичному ключу виде), но они отличаются от традиционных, или организованных в куче, таблиц тем, что последние не упорядочивают данные.
https://oracle-patches.com/oracle/prof/3004-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B-oracle
### __7. Какое максимальное число можно хранить в столбце таблицы с типом данных `NUMBER(5, -2)`?__
9999900
__8. Какому виду ограничений в представлениях словаря данных соответствует обозначение `V` и как действует данный вид ограничений?__
Обозначение `V` соответствует ограничениям `CHECK`, накладываемым на представления. Это ограничение не позволяет работать со строками, которые не относятся к представлению.
https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm#i1576022
### __9. Перечислите источники данных для представлений словаря данных типа `V$`__
- конфигурация сервера баз данных
- дисковые структуры, используемые сервером (например, `V$FILESTAT`)
- оперативная память
- специальные файлы управления ORACLE
### __10. Каково назначение опции `CACHE` при создании последовательности и каково значение этой опции по умолчанию?__
`CACHE n` позволяет заранее сгенерировать `n` значений для ускоренного получения, при этом сгенерированные значения теряются при отключении сервера баз данных.
Значение по умолчанию - 20.
### __11. Опишите задачи, которые решает TopN анализ__
Запросы Top-N полезны в сценариях, где требуется отображать только n самых верхних или n самых нижних записей из таблицы на основе условия. Этот результирующий набор можно использовать для дальнейшего анализа.
http://dwhlaureate.blogspot.com/2012/08/how-to-do-top-n-analysis-in-oracle.html
### __12. Перечислите условия, при которых представление допускает вставку данных в таблицу__
Все поля таблицы-источника, не присутствующие в представлении, имеют значения по умолчанию.
Если представление использует несколько таблиц, то вставка должна происходить ровно в одну таблицу.
### __13. В чем разница в синтаксисе коррелированного и некоррелированного подзапросов__
Существуют два типаподзапросов:
- **Коррелированный** - выбирает данные из таблицы со ссылкой на внешний запрос. Он не считается независимым запросом, поскольку ссылается на другую таблицу или столбец в таблице.
```
SELECT last_name
FROM s_emp one
WHERE 'Ngao' IN (SELECT last_name
FROM s_emp
WHERE salary=one.salary);
```
Коррелированный подзапрос содержит ссылку на данные внешнего запроса и выполняется не один раз, а для каждой строки внешнего запроса.
- **Некоррелированный** - является независимым запросом, в котором выходные данные подзапроса подставляются в основной запрос.
```
SELECT last_name
FROM s_emp
WHERE start_date < (SELECT MIN(startdate)
FROM semp
WHERE title='Warehouse Manager');
```
Данные, выбираемые некоррелированным подзапросом, никак не зависят от внешнего запроса.
Также подзапрос выполняется один раз.
https://studopedia.ru/3_52779_korrelirovannie-i-nekorrelirovannie-podzaprosi.html
### __14. В чем разница в хранении данных в столбцах с типами данных `BFILE` и `BLOB`__
Данные типа `BFILE` хранятся в отдельных от базы данных файлах, а `BLOB` - в файлах базы данных.
### __15. Какие ограничения в таблице можно установить при создании таблицы только на уровне столбца?__
`NOT NULL`.
### __16. Напишите команду которая позволяет найти записи в таблице Employees содержащие текст `SA_` в столбце `JOB_ID`__
```sql
SELECT *
FROM EMPLOYEES
WHERE JOB_ID LIKE 'SA\_%' ESCAPE '\';
```
### __17. Перечислите дополнительные возможности которые обеспечивает тип данных Timestamp по сравнению с типом данных Date__
`TIMESTAMP` имеет следующие особенности:
- данный тип данных имеет большую точность (доли секунды) 0 - 9, по умолчанию - 6
- имеет несколько расширений:
- TIMESTAMP WITH TIME ZONE - Хранит вместе со значением даты и времени информацию о часовом поясе
- TIMESTAMP WITH LOCAL TIME ZONE - Значения этого типа автоматически преобразуются между часовым поясом базы данных и местным (сеансовым) часовым поясом. При хранении в базе данных значения преобразуются к часовому поясу базы данных, а при выборке они преобразуются к местному (сеансовому) часовому поясу.
- из DATE c помощью EXTRACT можно вытащить только YEAR, MONTH, DAY; В то время как из
TIMESTAMP можно вытащить также и всё остальное HOUR, MINUTE, SECOND
> имеет ограничение `NOT NULL` - > что это [color=#ff0000]
>
> имеет значение по умолчанию, равное текущему времени (`NOW()`)
https://oracle-patches.com/db/sql/3407-%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B4%D0%B0%D1%82%D1%8B-%D0%B8-%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8-%D0%B2-pl-sql
### __18. Расставьте операторы в порядке убывания их приоритетов (мее)__
- `+, ||`
- `IS NULL`
- `BETWEEN`
- `=, <>`
### __19. Перечислите различия в возможностях операторов Decode и Case__
- `DECODE` считает, что `NULL` равно `NULL`, а `CASE` - нет
- `CASE` может использоваться в WHERE, `DECODE` - нет
### __20. Опишите процесс обеспечения сервером Oracle согласованности по чтению при одновременной работе нескольких пользователей__
Согласованность чтения:
- Гарантирует непротиворечивое представление данных в любой момент времени
- Изменения, сделанные одним пользователем, не вступают в противоречие с изменениями, сделанными другим пользователем.
- Читатели не блокируют писателей, и наоборот (Select for Update - в этом случае не работает)

https://oracle-patches.com/oracle/prof/1436-%D1%81%D0%BE%D0%B3%D0%BB%D0%B0%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BD%D0%B5%D0%B1%D0%BB%D0%B0%D0%BA%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B5-%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F-oracle
### __21. Какой модификатор формата следует использовать чтобы вводимый литерал в точности соотвествовал заданному шаблону? Приведите пример__
Модификатор `FX`. Пример:
```sql
SELECT TO_DATE('01-01-2020', 'FXDD-MM-YYYY')
FROM DUAL;
```
выполнится корректно, а
```sql
SELECT TO_DATE('1-01-2020', 'FXDD-MM-YYYY')
FROM DUAL;
```
нет, поскольку во втором строковом литерале опущены ведущие нули.
### __22. Опишите различия между ограничениями PRIMARY KEY и UNIQUE__
- столбец с ограничением PRIMARY KEY не может принимать значение NULL, а столбец
с ограничением UNIQUE может принимать одно значение NULL
- В одной таблице может быть только один PRIMARY KEY, но может быть несколько ограничений UNIQUE
- При создании PRIMARY KEY автоматически генерируется кластеризованный индекс, а при UNIQUE - некластеризованный (миллион раз подумать прежде чем это писать)
https://www.geeksforgeeks.org/difference-between-primary-key-and-unique-key/
(кому не лень - прочитайте это и допишите что-нибудь полезное)
### __23. Каково значение, расположение и свойства сегмента в базе данных ORACLE__
**Сегмент** - это набор экстентов, содержащих все данные для определенной логической структуры хранения в табличном пространстве.
- Для каждой таблицы Oracle выделяет один или несколько экстентов для формирования сегмента данных этой таблицы
- Для каждого индекса Oracle выделяет один или несколько экстентов для формирования своего сегмента индекса.
В базах данных Oracle используются четыре типа сегментов:
- сегмент данных (data segments)
- сегмент индекса (index segments)
- сегмент отката (rollback segments)
- временные сегменты (temporary segments)
(учитывая что говорили только про сегмент отката, про него подробнее)
- Каждая база данных содержит один или несколько сегментов отката.
- **Сегмент отката** - это часть базы данных, которая записывает действия транзакций, если транзакция должна быть откатана (отменена).
- Сегменты отката используются для обеспечения согласованности чтения, транзакций отката и восстановления базы данных.
https://docs.oracle.com/cd/A57673_01/DOC/server/doc/SCN73/ch3.htm#segments
### __24. Каков будет результат выполнения команды__
```sql
SELECT ROUND(TRUNC(MOD(1600, 10), -1), 2)
FROM DUAL;
```
Результат: 0.
- MOD - остаток от деления.
- TRUNC - возвращает число, усеченное до определенного количества знаков после запятой.
- ROUND - возвращает число, округленное до определенного количества знаков после запятой.
Разница между ROUND и TRUNC
[
](https://)[](https://)
### __25. Сколько строк будет выбрано командой__
```sql
SELECT *
FROM EMPLOYEES
WHERE ROWNUM > 2;
```
Будет выбрано 0 строк, поскольку `ROWNUM` присваивается только строкам, удовлетворяющим предикату в `WHERE`.
### __26. Перечислите виды ограничений для которых Oracle неяно создает уникальный индекс__
- `PRIMARY KEY`
- `UNIQUE`
### __27. Столбец Col в таблице my_table содержит значения от 1 до 10 и NULL. Строки с какими значениями в столбце Col будут выбраны командой__
Никакие.
### __28. Какое максимальное число можно хранить в столбце таблицы с типом данных Number(3, -3)__
999000
### __29. Какому виду ограничений в представлениях словаря данных соответствует обозначение O и как действует данный вид ограничений__
WITH READ ONLY.
Данное ограничение означает что данная таблица или представление не могут быть изменены.
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8004.htm
https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm#i1576022
### __30. Перечислите условия, при которых представление допускает изменение данных в таблице__
Если простое представление(?)