Основные типы данных
Таблицы могут содержать не только строки. Рассмотрим основные типы данных в БД Oracle.
Varchar2
Строковый тип. При создании таблицы всегда нужно указывать размер строки. Размер может указываться в байтах либо в символах. По-умолчанию максимальный размер строки равен 4000 байт, либо 4000 символов. Этот размер может быть изменен дополнительной настройкой БД.
country(100);-- строка из 100 байт
country(100 char); -- строка из 100 символов
country(100);-- строка из 100 байт
country(100 char); -- строка из 100 символов
Number
Числовой тип данных. Используется для хранения как целых чисел, так и дробных чисел. Тип Number может хранить положительные или отрицательные числа, размер которых ограничен 38 цифрами. Размер числового типа можно ограничивать:
age number(3); -- максимальное число = 999; минимальное= -999
price number(5,3); -- максимальное число = 99.999; минимальное= -99,999
must_print number(1); -- максимальное число = 9; минимальное= -9
rounded_price number(5, -2); -- Число, округленное до 2-символа влево, начиная от разделителя дроби
age number(3); -- максимальное число = 999; минимальное= -999
price number(5,3); -- максимальное число = 99.999; минимальное= -99,999
must_print number(1); -- максимальное число = 9; минимальное= -9
rounded_price number(5, -2); -- Число, округленное до 2-символа влево, начиная от разделителя дроби
Рассмотрим последний пример: rounded_price number(5, -2)
. Значение -2 здесь означает, что любое дробное число, которое будет записываться в эту колонку, будет округлено, включая две предшествующих резделителю дроби цифры. Ниже показаны примеры входных чисел и числа, в которые они будут преобразованы при сохранении их в колонке rounded_price
:
Входное число | Выходное число |
---|---|
3245.3 | 3200 |
12.345 | 0 |
Date
Тип Date предназначен для хранения даты и времени. Данный тип данных хранить в себе следующую информацию:
- Год
- Месяц
- День(Число)
- Часы
- Минуты
- Секунды
Не всегда бизнес-логика приложения требует хранения даты вплоть до секунды или до дня - иногда нас может интересовать лишь конкретный месяц в году, или только год. В таких случаях незначимая информация как правило устанавливается в некое начальное значение, например:
Что нам нужно хранить | Что мы сохраняем в |
---|---|
Дату вплоть до числа | 20.05.2019 |
Определенный месяц в году | 01.10.2019 |
Время, до минут | 01.01.1900 20:48 |
Во втором случае нас интересует только месяц и год, но мы не можем игнорировать число, поэтому мы сами решили использовать в качестве дня первый день месяца. Здесь могло быть и 3, и 30, и 20 число месяца. Просто при работе с такими колонками следует знать, для чего они используются и использовать только ту часть даты, которая должна использоваться согласно бизнес-логике.
В третьем случае дата как таковая нас вообще не интересует - нам важно знать только время, поэтому год, месяц и число можно выбрать любые. Конечно, чтобы использовать только время, нужно будет производить определенные манипуляции со значением такого столбца(например отделение значения часов и/или минут, приведение числа, месяца и года к определенным значениям, и т.п.). Также, если известно, что придется работать только определенной частью даты, можно использовать тип number. Как пример - колонка release_year
, которая хранит в себе год выпуска определенной модели авто. Здесь месяц, число и время скорее всего не понадобятся совсем.
Boolean
Логического типа данных в БД Oracle нет. Но вместо него можно использовать уже знакомые типы number или
varchar2:
create table questions(
is_right_n number(1), --<1>
is_right_c varchar2(1) --<2>
);
create table questions(
is_right_n number(1), --<1>
is_right_c varchar2(1) --<2>
);
<1> - значение, равное 1 трактуем как истину, иначе - ложь(или наоборот) <2> значение, равное символу 'Y' - истинно, 'N' - ложно