Advertisement
Ladies_Man

#DB Lab6 (Constraints) COMPLETE

Nov 10th, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 6.21 KB | None | 0 0
  1. --Лабораторная работа №6. Ключи, ограничения, значения по умолчанию
  2.  
  3. --1.Создать таблицу с автоинкрементным первичным ключом.
  4. --2.Добавить поля, для которых используются ограничения (CHECK), значения по умолчанию(DEFAULT), также использовать функции для вычисления.
  5. --3.Создать таблицу с первичным ключом на основе глобального уникального идентификатора.
  6. --4.Создать таблицу с первичным ключом на основе последовательности.
  7. --5.Создать две связанные таблицы, и протестировать на них различные варианты действий для ограничений ссылочной целостности (NO ACTION| CASCADE | SET NULL | SET DEFAULT).
  8.  
  9. --create db
  10. use master;
  11. go
  12. if DB_ID (N'lab6') is null
  13.     create database lab6
  14.     on (
  15.         NAME = lab6dat,
  16.         FILENAME = 'C:\Users\me\Documents\DB_Labs\lab6\lab6dat.mdf',
  17.         SIZE = 10,
  18.         MAXSIZE = UNLIMITED,
  19.         FILEGROWTH = 5
  20.         )
  21.     log on (
  22.         NAME = lab6log,
  23.         FILENAME = 'C:\Users\me\Documents\DB_Labs\lab6\lab6log.ldf',
  24.         SIZE = 5,
  25.         MAXSIZE = 20,
  26.         FILEGROWTH = 5
  27.         );
  28. go
  29.  
  30.  
  31. use lab6;
  32. go
  33. --1.Создать таблицу с автоинкрементным первичным ключом.
  34. --2.Добавить поля, для которых используются ограничения (CHECK), значения по умолчанию(DEFAULT), также использовать функции для вычисления.
  35. if OBJECT_ID(N'owners', N'U') is not null
  36.     drop table owners
  37. go
  38. create table owners (
  39.     oid         int IDENTITY(100,100)       not null,
  40.     firstname       varchar(35)         not null,
  41.     lastname        varchar(35)         null,
  42.     ostatus         int             null
  43.         CONSTRAINT DF_owners_status DEFAULT (1),
  44.     controlvalue        int             not null,
  45.     createdate      datetime            not null
  46.         CONSTRAINT DF_owners_createdate DEFAULT (getdate()),
  47.  
  48.     PRIMARY KEY (oid),
  49.     CONSTRAINT CHK_owners_controlvalue
  50.         CHECK (controlvalue > 500)
  51.     );
  52. go
  53.  
  54. insert into owners(firstname, controlvalue)
  55.     values
  56.     ('me', 3405),
  57.     ('Andrew', 1203),
  58.     ('Johan', 501);
  59.    
  60. go
  61. select * from owners;
  62.  
  63. select IDENT_CURRENT ('owners') AS current_id;
  64. --300
  65.  
  66. insert into owners(firstname, controlvalue)
  67.     values
  68.         ('Rico', 5553535),
  69.         ('Sam', 8800),
  70.         ('Jo', 3222),
  71.         ('Q', 1007);
  72. go
  73.  
  74.  
  75. --3.Создать таблицу с первичным ключом на основе глобального уникального идентификатора.
  76. if OBJECT_ID(N'usergroups', N'U') is not null
  77.     drop table usergroups
  78. go
  79. create table usergroups (
  80.     gid     UNIQUEIDENTIFIER DEFAULT NEWID(),
  81.     groupname   varchar(35),
  82.     usersnumber     int
  83.         CONSTRAINT DF_usergroups_usersnumber DEFAULT (0),
  84.  
  85.     PRIMARY KEY (gid),
  86.     CONSTRAINT CHK_usergroups_usersnumber
  87.         CHECK (usersnumber >= 0)
  88.     );
  89. go
  90.  
  91. insert into usergroups(groupname, usersnumber)
  92.     values
  93.         ('admins', 1),
  94.         ('stdandardusers', 100500);
  95. go
  96. insert into usergroups values (NEWID(), 'superusers', 2);
  97.  
  98. select * from usergroups;
  99.  
  100.  
  101. --4.Создать таблицу с первичным ключом на основе последовательности.
  102. if OBJECT_ID(N'math', N'U') is not null
  103.     drop table math
  104. go
  105. create table math (
  106.     multiplication  varchar(5)  not null,
  107.     firstnum    varchar(5)  not null,
  108.     secondnum   int     not null,
  109.  
  110.     PRIMARY KEY (multiplication)
  111.     );
  112. go
  113.  
  114.  
  115. --drop SEQUENCE lab6schema.incmul;
  116. if EXISTS(select * from sys.objects where object_id = OBJECT_ID(N'lab6schema.incmul') and type = 'SO')
  117.     drop SEQUENCE lab6schema.incmul;
  118.        
  119. if SCHEMA_ID(N'lab6schema') is not null
  120.     drop schema lab6schema;
  121. go
  122. create schema lab6schema;
  123. go
  124.  
  125. create SEQUENCE lab6schema.incmul
  126.     START WITH 0
  127.     INCREMENT BY 2
  128.     MAXVALUE 10;
  129. go
  130.  
  131. insert math values
  132.         ('0 = ', '0 * ', NEXT VALUE FOR lab6schema.incmul),
  133.         ('2 = ', '1 * ', NEXT VALUE FOR lab6schema.incmul),
  134.         ('8 = ', '2 * ', NEXT VALUE FOR lab6schema.incmul);
  135.  
  136. select * from math;
  137.  
  138.  
  139.  
  140.  
  141.  
  142. use lab6;
  143. go
  144. --5.Создать две связанные таблицы, и протестировать на них различные варианты действий
  145. --для ограничений ссылочной целостности (NO ACTION| CASCADE | SET NULL | SET DEFAULT).
  146. if (OBJECT_ID(N'FK_books_bwid', N'F') is not null)
  147. begin
  148.     alter table books
  149.         drop CONSTRAINT FK_books_bwid
  150. end
  151. go
  152. /*C = CHECK constraint
  153. D = DEFAULT (constraint or stand-alone)
  154. F = FOREIGN KEY constraint
  155. PK = PRIMARY KEY constraint
  156. UQ = UNIQUE constraint*/
  157.  
  158. if OBJECT_ID(N'writers', N'U') is not null
  159.     drop table writers
  160. go
  161. create table writers (
  162.     wid     int         not null,
  163.     firstname   varchar(35)     not null,
  164.     midname     varchar(35)     null,
  165.     lastname    varchar(35)     not null,
  166.     tmp     int
  167.  
  168.     PRIMARY KEY (wid)
  169.     );
  170. go
  171.  
  172. insert writers values
  173.     (1, 'john', 'r.r.', 'tolkien', 1),
  174.     (2, 'george', 'r.r.', 'martin', 2),
  175.     (3, 'herbert', 'g.', 'wells', 3),
  176.     (4, 'george', '', 'orwell', 4),
  177.     (5, 'raymond', 'd.', 'bradbury', 5);
  178. go
  179.  
  180. select * from writers;
  181.  
  182.  
  183. --=====from lab7
  184. --if OBJECT_ID(N'bookshelf_ix_view', N'V') is not null
  185. --  drop view bookshelf_ix_view;
  186. --go
  187. --=====
  188. if OBJECT_ID(N'books', N'U') is not null
  189.     drop table books
  190. go
  191. create table books (
  192.     bid int IDENTITY(1, 1)  not null,
  193.     name    varchar(254)        not null,
  194.     bwid    int         not null
  195.         CONSTRAINT DF_books_bwid DEFAULT (3),
  196.     year    int         null,
  197.  
  198.     PRIMARY KEY (bid),
  199.     CONSTRAINT FK_books_bwid
  200.         FOREIGN KEY (bwid)
  201.         REFERENCES writers(wid)
  202.         ON DELETE SET DEFAULT
  203.     );
  204. go
  205.  
  206. insert into books(name, bwid, year)
  207.     values
  208.         ('the lord of the rings', 1, 1954),
  209.         ('the hobbit, or there and back again', 1, 1937),
  210.         ('a song of ice and fire', 2, 1996),
  211.         ('1984', 4, 1949),
  212.         ('fahrenheit 451', 5, 1953);
  213. go
  214.  
  215. select * from books;
  216.  
  217.  
  218. /*
  219.     NO ACTION -> Error
  220.     SET DEAFULT -> set VALID deafult
  221.     SET NULL -> -||- (CARE OF "NOT_NULL" value in books.bwid)
  222.     CASCADE (del) -> -||-
  223. */
  224.  
  225. --delete from writers where writers.tmp = 1;
  226. --go
  227.  
  228. select * from writers;
  229. select * from books;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement