Материал: Using_MySql,_MS_SQL_Server_and_Oracle

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Модель для MS SQL Server

1.3. Модель для MS SQL Server

Модель базы данных для MS SQL Server представлена на рисунках 1.d и 1 .e. Обратите внимание на следующие важные моменты:

Первичные ключи представлены знаковыми целыми числами, т.к. в MS SQL Server нет возможности сделать bigint, int и smallint беззнаковыми (а tinyint, наоборот, бывает только беззнаковым).

Строки представлены типом nvarchar длиной до 150 символов (как из соображений аналогии с MySQL, так и чтобы гарантированно уложиться в ограничение 900 байт на длину индекса; 150*2 = 300, MS SQL Server для хранения и сравнения символов в национальных кодировках использует два байта на символ).

Поле sb_is_active представлено типом char длиной в один символ (т.к.

в

MS SQL Server нет типа данных enum), а для соблюдения аналогии с MySQL на это поле наложено ограничение check со значением [sb_is_active]

IN ('Y', 'N').

Как и в MySQL, поля sb_start и sb_finish представлены типом date (а не более полными, например, datetime), т.к. мы храним дату выдачи и воз-

врата книги с точностью до дня.

erd MSSQL schema у*

genres

«column»

*PK g_id: int

* g name: nvarchar(150)

«PK»

+PK_genres(int)

«unique»

+UQ_genres_g_name(nvarchar)

+PK_genres/l\ 1

(g_id = g_id)

«FK»

+FK_m2m_boote_genres_genresl 0 *

m2m_books_genres

 

 

 

 

subscriptions

 

 

 

 

books

 

 

 

 

 

subscribers

 

 

«column»

 

 

 

 

 

 

 

 

 

«column»

 

'PK sb_id: int

 

 

«column»

+PK_books

'FK sb_subscriber: int

 

 

*PK s_id: int

*PK b_id: int

 

 

 

 

 

+PK_subscribers

*J4 e name. nvarchar(150)

*

b_name: nvarchar(150)

 

'FK sb_book int sb_start:

 

(sb_su bsriber =. s_Ld,)s_Su bscriben^

*

b_year: smallint

 

 

date sb_finish: date

 

 

 

1

a

*

b_quantity: smallint

 

 

sb_is_active: char(1)

0.."TFK»

 

«PK»

 

 

«FK»

 

 

 

 

0..*

 

 

*

 

+ PK_subscribers(int)

«PK»

 

 

 

 

 

 

+FK_subscriptions_books

FK»

 

 

 

+ PK_books(int)

 

 

 

 

 

 

 

FK_subscriptions_books(int)

 

 

 

 

 

 

 

 

 

 

_book^

1+PK_books

 

 

FK_subscriptions_subscribers(int)

 

 

+PK

 

 

 

PK»

 

 

 

 

 

 

 

PK_subscriptions(int)

 

 

 

 

 

 

«check»

 

 

 

(b_id = b_id)

 

 

+ check_enum(char)

 

 

 

« F K»

(b_id = b_id)

 

 

«FK»

0..* +FK_m2m_books_genres_books

 

0..* +FK_m2m_books_authors_books

«column»

*pfK b_id: int *pfK g_id: int

:FK»

FK_m2m_books_genres_books(int) FK_m2m_books_genres_genres(int)

:PK»

PK_m2m_books_genres(int, int)

m2m_books_authors S

«column»

*pfK b_id: int *pfK a_id: int

«FK»

+FK_m2m_books_authors_authors(int)

+FK_m2m_books_authors_books(int)

«PK»

+PK_m2m_books_authors(int, int)

 

 

 

 

authors

В

+FK_m2m_books_authors_authors

 

«column»

 

 

 

 

*PK a_id: int

 

 

(a id = a id) +PK_authors

*

a_name: nvarchar(150)

 

0..*

«FK»

"7

«PK»

 

 

 

 

 

 

 

 

+

PK_authors(int)

 

 

 

 

 

 

 

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 10/545

Модель для MS SQL Server

Рисунок 1.d — Модель базы данных для MS SQL Server в Sparx EA

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 11/545

Модель для MS SQL Server

Condensed Type

Condensed Type Length

int

4

nvarchar(150) 150

condensed Type

150

Рисунок 1.e — Модель базы данных для MS SQL Server в MS SQL Server Management Studio

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 12/545

Модель для Oracle

1.4. Модель для Oracle

Модель базы данных для Oracle представлена на рисунках 1.f и 1 .g. Обратите внимание на следующие важные моменты:

Целочисленные поля представлены типом number с указанием длины — это наиболее простой способ эмуляции целочисленных типов из других СУБД.

Строки представлены типом nvarchar2 длиной до 150 символов (как из соображений аналогии с MySQL и MS SQL Server, так и чтобы гарантированно уложиться в ограничение 758-6498 байт на длину индекса; 150*2 = 300, Oracle для хранения и сравнения символов в национальных кодировках использует два байта на символ, и максимальная длина индекса может зависеть от разных условий, но минимум — 758 байт).

Поле sb_is_active представлено типом char длиной в один символ (т.к.

в

Oracle нет типа данных enum), а для соблюдения аналогии с MySQL применено то же решение, что и в случае с MS SQL Server: на это поле наложено ограничение check со значением "sb_is_active" IN ('Y', 'N').

Для полей sb_start и sb_finish выбран тип date как «самый простой» из имеющихся в Oracle типов хранения даты. Да, он всё равно сохраняет

часы, минуты и секунды, но мы можем вписать туда нулевые значения.

erd Oracle_schema

Рисунок 1 .f — Модель базы данных для Oracle в Sparx EA

Рисунок 1 .g — Модель базы данных для Oracle в Oracle SQL Developer Data Modeler

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 13/545

Генерация и наполнение базы данных

1.5. Генерация и наполнение базы данных

На основе созданных в Sparx Enterprise Architect моделей получим DDLскрипты{4} для каждой СУБД и выполним их, чтобы создать базы данных (обратитесь к документации по Sparx EA за информацией о том, как на основе модели базы данных получить скрипт её генерации).

Наполним имеющиеся базы данных следующими данными.

Таблица books:

b_id

b_name

 

b_year

b_quantity

1

Евгений Онегин

1985

2

2

Сказка о рыбаке и рыбке

1990

3

3

Основание и империя

2000

5

4

Психология программирования

1998

1

5

Язык программирования С++

1996

3

6

Курс теоретической физики

1981

12

7

Искусство программирования

1993

7

Таблица authors:

 

 

 

 

 

 

 

 

a_id

a_name

 

 

 

1Д. Кнут

2А. Азимов

3Д. Карнеги

4Л.Д. Ландау

5Е.М. Лифшиц

6Б. Страуструп

7А.С. Пушкин

Таблица genres:

g_id

g_name

1Поэзия

2Программирование

3Психология

4Наука

5Классика

6Фантастика

 

Таблица subscribers:

s_id

s_name

 

1Иванов И.И.

2Петров П.П.

3Сидоров С.С.

4Сидоров С.С.

Присутствие двух читателей с именем «Сидоров С.С.» — не ошибка. Нам понадобится такой вариант полных тёзок для демонстрации нескольких типичных ошибок в запросах.

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 14/545

Источник: https://studfile.net/preview/16420333/