Материал: ЛР 5

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

Министерство образования Республики Беларусь

Учреждение образования

БелорусскиЙ государственный университет

информатики и радиоэлектроники

Инженерно-экономический факультет

Кафедра экономической информатики

ОТЧЕТ

по лабораторной работе №5

« Создание базы данных и ее объектов с помощью команд языка Transact-sql »

Студент

Проверил

А. И. Рудак

Минск 2022

Общая постановка задачи

Цель работы

  1. Ознакомиться с процессом создания базы данных и ее объектов

  2. Освоить способы управления пользователями и правами доступа к данным.

Задачи

  1. Создание новой базы данных.

  2. Создание правил, умолчаний, пользовательских типов данных.

  3. Создание таблиц базы данных, индексов и представлений.

  4. Ввод данных в таблицы базы данных.

  5. Предоставление доступа к серверу учетным записям Windows.

  6. Создание новых пользователей и пользовательских ролей.

  7. Предоставление привилегий доступа к объектам базы данных.

Методические указания

При помощи пользовательского меню Windows запустите утилиту SQL Server Management Studio, после чего на панели Object Explorer в древовидной структуре раскройте папку Databases.

С помощью команды меню FileOpenFile загрузите сценарий из файла D:\Work\X7230ХХХ\script.sql в окно Query.

Выполните сценарий, нажав на панели инструментов кнопку Execute (или клавишу F5). В результате будет создана база данных Склад_ХХХ.

Обновите данные на панели Object Explorer. Для этого используйте команду Refresh в контекстном меню папку Databases или соответствующую кнопку в верхней части панели. В результате база данных Склад_ХХХ станет видимой на панели Object Explorer.

Закройте окно Query, содержащее сценарий script.sql. Затем на панели инструментов нажмите кнопку New Query, и откройте новое пустое окно Query, предназначенное для формирования нового сценария.

Готовые к исполнению команды (пакеты) языка Transact-SQL, из которых будет формироваться сценарий, выделены ниже при помощи стрелок ( и (.

1. Создание новой базы данных. Синтаксис команды (в нотации Бэкуса-Наура):

CREATE DATABASE database_name 
[ ON 
    [ < filespec > [ ,...n ] ] 
    [ , < filegroup > [ ,...n ] ] 
] 
[ LOG ON { < filespec > [ ,...n ] } ] 
[ COLLATE collation_name ] [ FOR LOAD | FOR ATTACH ]

< filespec > ::=

[ PRIMARY ] ( [ NAME = logical_file_name , ]     FILENAME = 'os_file_name' 
    [ , SIZE = size ] 
    [ , MAXSIZE = { max_size | UNLIMITED } ] 
    [ , FILEGROWTH = growth_increment ] ) [ ,...n ]

< filegroup > ::=

FILEGROUP filegroup_name < filespec > [ ,...n ]

На русском языке подробное разъяснение синтаксических конструкций этой команды приведено в [1], стр. 892.

Конкретная команда создания базы данных Склад_ХХХ, которую нужно вставить в окно Query, имеет следующий вид:

(

CREATE DATABASE Склад_ХХХ -- Вместо ХХХ подставьте свою комбинацию цифр

ON PRIMARY -- Путь D:\Work\X7230XXX\ к файлам

( NAME = Склад_data, -- базы данных уже должен существовать

FILENAME = 'D:\Work\X7230XXX\Склад_XXX_data.mdf',

SIZE = 5MB,

MAXSIZE = 75MB,

FILEGROWTH = 3MB ),

FILEGROUP Secondary

( NAME = Склад2_data,

FILENAME = 'D:\Work\X7230XXX\Склад_XXX_data2.ndf',

SIZE = 3MB,

MAXSIZE = 50MB,

FILEGROWTH = 15% ),

( NAME = Склад3_data,

FILENAME = 'D:\Work\X7230XXX\Склад_XXX_data3.ndf',

SIZE = 4MB,

FILEGROWTH = 4MB )

LOG ON

( NAME = Склад_log,

FILENAME = 'D:\Work\X7230XXX\Склад_XXX_log.ldf',

SIZE = 1MB,

MAXSIZE = 10MB,

FILEGROWTH = 20% ),

( NAME = Склад2_log,

FILENAME = 'D:\Work\X7230XXX\Склад_XXX_log2.ldf',

SIZE = 512KB,

MAXSIZE = 15MB,

FILEGROWTH = 10% )

GO

(

Примечание. Команда GO используется для указания конца пакета (см. [1], стр. 1087). Команды, образующие пакет, обрабатываются сервером за один раз, после чего он возвращает клиенту (в нашем случае – пользователю SQL Server Management Studio) результат. После этого клиент может отправить следующий пакет и т.д. В данном случае пакет содержит всего одну команду, предназначенную для создания базы данных.

2. Подключение к базе данных. Синтаксис команды (см. [1], стр. 1086):

USE { database }

(

USE Склад_ХХХ

GO

(

Примечание. При обращении к объектам текущей базы данных (т.е. выбранной с помощью команды USE) не требуется указание ее имени. Но когда работа ведется в контексте иной базы данных, то необходимо указывать также имя базы данных.

3. Создание правила. Синтаксис команды (см. [1], стр. 836):

CREATE RULE rule AS condition_expression

(

CREATE RULE Logical_rule AS @value IN ('Нет', 'Да')

GO

(

4. Создание умолчания. Синтаксис команды (см. [1], стр. 828):

CREATE DEFAULT default AS constant_expression

(

CREATE DEFAULT Logical_default AS 'Нет'

GO

5. Создание пользовательского типа данных. Синтаксис системной хранимой процедуры (см. [1], стр. 840):

sp_addtype [ @typename = ] type, 
    [ @phystype = ] system_data_type 
    [ , [ @nulltype = ] 'null_type' ] 
    [ , [ @owner = ] 'owner_name' ]

(

EXEC sp_addtype Logical, 'char(3)', 'NOT NULL'

GO

(

Примечание. Для выполнения (запуска) хранимой процедуры используется команда, имеющая следующий синтаксис:

[ [ EXEC [ UTE ] ] 
    { 
        [ @return_status = ] 
       { procedure_name [ ;number ] | @procedure_name_var 
    } 
    [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ]    [ ,...n ] 
 [ WITH RECOMPILE ]

6. Связывание правила с пользовательским типом данных. Синтаксис системной хранимой процедуры (см. [1], стр. 837):

sp_bindrule [ @rulename = ] 'rule' , 
    [ @objname = ] 'object_name' 
    [ , [ @futureonly = ] 'futureonly_flag' ]

(

EXEC sp_bindrule 'Logical_rule', 'Logical'

GO

(

7. Связывание умолчания с пользовательским типом данных. Синтаксис системной хранимой процедуры (см. [1], стр. 829):

sp_bindefault [ @defname = ] 'default' , 
    [ @objname = ] 'object_name' 
    [ , [ @futureonly = ] 'futureonly_flag' ]

(

EXEC sp_bindefault 'Logical_default', 'Logical'

GO

(

Примечание. Последние три пакета можно было бы объединить в один пакет (с единственной командой GO в конце) и выполнить за один раз. Необходимо отметить, что не всякие пакеты можно объединять с другими пакетами в единый пакет. С другой стороны команды, составляющие любой пакет, всегда можно выполнить по отдельности, дополняя каждую из них командой GO.

8. Создание таблицы базы данных. Синтаксис команды (см. [1], стр. 958):

CREATE TABLE 
    [ database_name. [ owner ] . | owner. ] table_name     ( { < column_definition >         | column_name AS computed_column_expression         | < table_constraint > ::= [ CONSTRAINT constraint_name ] }

         | [ { PRIMARY KEY | UNIQUE } [ ,...n ]     ) [ ON { filegroup | DEFAULT } ] [ TEXTIMAGE_ON { filegroup | DEFAULT } ] < column_definition > ::= { column_name data_type }     [ COLLATE < collation_name > ]     [ [ DEFAULT constant_expression ]         | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]     ]     [ ROWGUIDCOL]     [ < column_constraint > ] [ ...n ] < column_constraint > ::= [ CONSTRAINT constraint_name ]     { [ NULL | NOT NULL ]         | [ { PRIMARY KEY | UNIQUE }             [ CLUSTERED | NONCLUSTERED ]             [ WITH FILLFACTOR = fillfactor ]             [ON {filegroup | DEFAULT} ] ]         ]         | [ [ FOREIGN KEY ]             REFERENCES ref_table [ ( ref_column ) ]             [ ON DELETE { CASCADE | NO ACTION } ]             [ ON UPDATE { CASCADE | NO ACTION } ]             [ NOT FOR REPLICATION ]         ]         | CHECK [ NOT FOR REPLICATION ]         ( logical_expression )     }

< table_constraint > ::= [ CONSTRAINT constraint_name ]     { [ { PRIMARY KEY | UNIQUE }         [ CLUSTERED | NONCLUSTERED ]         { ( column [ ASC | DESC ] [ ,...n ] ) }         [ WITH FILLFACTOR = fillfactor ]         [ ON { filegroup | DEFAULT } ]     ]     | FOREIGN KEY         [ ( column [ ,...n ] ) ]         REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] 
        [ ON DELETE { CASCADE | NO ACTION } ] 
        [ ON UPDATE { CASCADE | NO ACTION } ] 
        [ NOT FOR REPLICATION ] 
    | CHECK [ NOT FOR REPLICATION ] 
        ( search_conditions ) 
    }

Выполнение работы

 /* Регион */

 CREATE TABLE Регион (          

   КодРегиона   INT  PRIMARY KEY,

   Страна       VARCHAR(20)  DEFAULT 'Беларусь'  NOT NULL,

   Область  VARCHAR(20)  NOT NULL,

   Город        VARCHAR(20)  NOT NULL,

   Адрес        VARCHAR(50)  NOT NULL,

   Телефон  CHAR(15)  NULL,

   Факс     CHAR(15)  NOT NULL  CONSTRAINT CIX_Регион2

     UNIQUE  ON Secondary,

   CONSTRAINT CIX_Регион  UNIQUE (Страна, Область, Город, Адрес)

     ON Secondary� )

 /* Поставщик */

 CREATE TABLE Поставщик (          

   КодПоставщика    INT  PRIMARY KEY,

   ИмяПоставщика    VARCHAR(40)  NOT NULL,

   УсловияОплаты    VARCHAR(30)  DEFAULT 'Предоплата'  NULL,

   КодРегиона       INT  NULL,

   Заметки      VARCHAR(MAX)  NULL,

   CONSTRAINT  FK_Поставщик_Регион  FOREIGN KEY (КодРегиона)

     REFERENCES  Регион  ON UPDATE CASCADE

 )

 /* Клиент */

 CREATE TABLE Клиент (              

   КодКлиента       INT  IDENTITY(1,1)  PRIMARY KEY,

   ИмяКлиента       VARCHAR(40)  NOT NULL,

   ФИОРуководителя  VARCHAR(60)  NULL,

   КодРегиона       INT  NULL,

   CONSTRAINT  FK_Клиент_Регион  FOREIGN KEY (КодРегиона)

     REFERENCES  Регион  ON UPDATE CASCADE

 )

 /* Валюта */

 CREATE TABLE Валюта (              

   КодВалюты        CHAR(3)  PRIMARY KEY,

   ИмяВалюты        VARCHAR(30)  NOT NULL,

   ШагОкругления    NUMERIC(10, 4)  DEFAULT 0.01  NULL

     CHECK (ШагОкругления IN (50, 1, 0.01)),

   КурсВалюты   SMALLMONEY  NOT NULL  CHECK (КурсВалюты > 0)

 )

/*Товар*/

 CREATE TABLE Товар (          

   КодТовара        INT  PRIMARY KEY,

   Наименование VARCHAR(50)  NOT NULL,

   ЕдиницаИзм   CHAR(10)  DEFAULT 'штука'  NULL,

   Цена         MONEY  NULL  CHECK (Цена > 0),

   КодВалюты        CHAR(3)  DEFAULT 'BYR'  NULL,

   Расфасован       LOGICAL  NOT NULL,

   CONSTRAINT  FK_Товар_Валюта  FOREIGN KEY (КодВалюты)

     REFERENCES  Валюта  ON UPDATE CASCADE

 )

 /* Заказ */

 CREATE TABLE Заказ (              

   КодЗаказа        INT  IDENTITY(1,1)  NOT NULL,

   КодКлиента       INT  NOT NULL,

   КодТовара    INT  NOT NULL,

   Количество       NUMERIC(12, 3)  NULL  CHECK (Количество > 0),

   ДатаЗаказа       DATETIME  DEFAULT getdate()  NULL,

   СрокПоставки DATETIME  DEFAULT getdate() + 14  NULL,

   КодПоставщика    INT  NULL,                      

   PRIMARY KEY (КодЗаказа, КодКлиента, КодТовара),

   CONSTRAINT  FK_Заказ_Товар  FOREIGN KEY (КодТовара)  

     REFERENCES  Товар  ON UPDATE CASCADE ON DELETE CASCADE,

   CONSTRAINT  FK_Заказ_Клиент  FOREIGN KEY (КодКлиента)

     REFERENCES  Клиент  ON UPDATE CASCADE ON DELETE CASCADE,

   CONSTRAINT  FK_Заказ_Поставщик  FOREIGN KEY (КодПоставщика)

     REFERENCES  Поставщик

 )

 GO

/*Вставка данных в таблицу Регион*/

 INSERT INTO Регион

 VALUES (101, 'Россия', 'Московская', 'Королев', 'ул.Мира, 15',

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