vakho

SUPERSKY BAZA

Jun 10th, 2013
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 36.19 KB | None | 0 0
  1. ------------------------------------------------------------------------------------------
  2. /*  
  3.     ვამოწმებთ ბაზის არსებობას Database–ბში
  4.     არსებობის შემთხვევაში ვშლით ბაზას და თავიდან ვქმნით
  5. */
  6. --------------------------------------------------------------[DELETE THIS]
  7. USE master
  8. ALTER DATABASE პენტიუმი SET single_user WITH ROLLBACK immediate
  9. restore DATABASE პენტიუმი
  10. ALTER DATABASE პენტიუმი SET multi_user
  11. ---------------------------------------------------------------------------
  12. USE master
  13. IF EXISTS (SELECT name FROM sys.DATABASES WHERE name=N'პენტიუმი')
  14. DROP DATABASE პენტიუმი
  15. GO
  16. CREATE DATABASE პენტიუმი
  17. GO
  18. USE პენტიუმი
  19. ------------------------------------------------------------------------------------------
  20. /*
  21. არსები:
  22.     თანამშრომელი
  23.     მომწოდებელი
  24.     კლიენტი
  25.     ნაწილები
  26.     პროდუქტი
  27. */
  28. ------------------------------------------------------------------------------------------
  29. /*
  30.     არსი [თანამშრომელი]:
  31.         კომპოზიტური ატრიბუტით [მისამართი]
  32.         და მრავალმნიშვნელოვანი ატრიბუტით [ტელეფონი]
  33. */
  34. -- თანამშრომელი:
  35. IF OBJECT_ID(N'თანამშრომელი', 'u') IS NOT NULL
  36. DROP TABLE თანამშრომელი
  37. GO
  38. CREATE TABLE თანამშრომელი
  39. (
  40.     პირადი_ნომერი INT PRIMARY KEY, /* <-PRIMARY KEY გამოყენებულია აქ */
  41.     სახელი nvarchar(50),
  42.     გვარი nvarchar(50),
  43.     დაბადების_თარიღი DATE,
  44.     --მისამართი
  45.     --ტელეფონი
  46.     თანამდებობა nvarchar(50)
  47. )
  48.  
  49. -- [მისამართი][1:1]:
  50. IF OBJECT_ID(N'თანამშრომლის_მისამართი', 'u') IS NOT NULL
  51. DROP TABLE თანამშრომლის_მისამართი
  52. GO
  53. CREATE TABLE თანამშრომლის_მისამართი
  54. (
  55.     ID INT UNIQUE, /* <-UNIQUE გამოყენებულია აქ */
  56.     ქალაქი nvarchar(50) DEFAULT(N'თბილისი'), /* <-DEFAULT გამოყენებულია აქ */
  57.     ქუჩა nvarchar(50),
  58.     სახლი INT,
  59.     ბინა INT
  60. )
  61.  
  62. ALTER TABLE თანამშრომლის_მისამართი
  63. ADD CONSTRAINT FK_თანამშრომლის_მისამართი
  64. FOREIGN KEY (ID) /* <-FOREIGN KEY გამოყენებულია აქ */
  65. REFERENCES თანამშრომელი(პირადი_ნომერი)
  66. ON DELETE cascade
  67. ON UPDATE cascade
  68.  
  69. ALTER TABLE თანამშრომლის_მისამართი
  70. DROP CONSTRAINT FK_თანამშრომლის_მისამართი
  71.  
  72. -- [ტელეფონი][1:N]:
  73. IF OBJECT_ID(N'თანამშრომლის_ტელეფონი', 'u') IS NOT NULL
  74. DROP TABLE თანამშრომლის_ტელეფონი
  75. GO
  76. CREATE TABLE თანამშრომლის_ტელეფონი
  77. (
  78.     ID INT,
  79.     ტელეფონის_ნომერი nvarchar(50)
  80. )
  81.  
  82. ALTER TABLE თანამშრომლის_ტელეფონი
  83. ADD CONSTRAINT FK_თანამშრომლის_ტელეფონი
  84. FOREIGN KEY (ID) /* <-FOREIGN KEY გამოყენებულია აქ */
  85. REFERENCES თანამშრომელი(პირადი_ნომერი)
  86. ON DELETE cascade
  87. ON UPDATE cascade
  88.  
  89. ALTER TABLE თანამშრომლის_ტელეფონი
  90. DROP CONSTRAINT FK_თანამშრომლის_ტელეფონი
  91.  
  92. /* NONCLASTERED INDEX CREATION */
  93. CREATE NONCLUSTERED INDEX IX_თანამშრომელი_თანამდებობა
  94. ON თანამშრომელი(თანამდებობა);
  95. --------------------------------
  96.  
  97. SELECT * FROM თანამშრომელი
  98. SELECT * FROM თანამშრომლის_მისამართი
  99. SELECT * FROM თანამშრომლის_ტელეფონი
  100.  
  101. INSERT INTO თანამშრომელი
  102. VALUES
  103.     (1111, N'ასლან', N'აბაშიძე', '1951-12-31', N'დირექტორი'),
  104.     (2222, N'იური', N'რუსიშვილი', '1975-07-08', N'მოადგილე'),
  105.    
  106.     (3333, N'ირაკლი', N'სხილაძე', '1987-11-28', N'ამწყობი'),
  107.     (4444, N'გიორგი', N'მიქაძე', '1982-07-25', N'ამწყობი'),
  108.     (5555, N'რამაზ', N'გიორგაძე', '1964-01-18', N'ამწყობი'),
  109.     (7777, N'ზურაბ', N'ფაფაიძე', '1990-05-22', N'ამწყობი')
  110.  
  111. INSERT INTO თანამშრომლის_მისამართი
  112. VALUES
  113.     (1111, N'თბილისი', N'დადიანი', 102, 12),
  114.     (2222, N'თბილისი', N'გურამიშვილი', 86, 7),
  115.     (3333, N'თბილისი', N'გურამიშვილი', 14, 1),
  116.     (4444, N'თბილისი', N'ბეჟანიშვილი', 25, 8),
  117.     (5555, N'თბილისი', N'ღრმაღელე', 9, 94),
  118.     (7777, N'თბილისი', N'წერეთელი', 32, 72)
  119.  
  120. INSERT INTO თანამშრომლის_ტელეფონი
  121. VALUES
  122.     (1111, '599123456'),
  123.     (1111, '577123456'),
  124.    
  125.     (2222, '591782314'),
  126.     (2222, '577782314'),
  127.     (2222, '575782314'),
  128.    
  129.     (3333, '599654321'),
  130.     (4444, '577112233'),
  131.     (5555, '591325127'),
  132.    
  133.     (7777, '597162873'),
  134.     (7777, '551232323')
  135.  
  136. -- SIMPLE JOIN (NOTHING SPECIAL)
  137. SELECT პირადი_ნომერი, თანამშრომლის_ტელეფონი.ტელეფონის_ნომერი
  138. FROM თანამშრომელი
  139. LEFT JOIN თანამშრომლის_ტელეფონი
  140. ON თანამშრომელი.პირადი_ნომერი=თანამშრომლის_ტელეფონი.ID
  141.  
  142. -- დავითვალოთ ვის რამდენი ტელეფონი აქვს:
  143. SELECT თანამშრომელი.პირადი_ნომერი AS [პირადი ნომერი], თანამშრომელი.სახელი, თანამშრომელი.გვარი, COUNT(თანამშრომლის_ტელეფონი.ID) AS [ტელეფონების რაოდენობა]
  144. FROM თანამშრომლის_ტელეფონი
  145. LEFT JOIN თანამშრომელი
  146. ON თანამშრომლის_ტელეფონი.ID=თანამშრომელი.პირადი_ნომერი
  147. GROUP BY პირადი_ნომერი, სახელი, გვარი
  148. ORDER BY COUNT(თანამშრომლის_ტელეფონი.ID) DESC -- კლებადობით დალაგება
  149.  
  150. -- END თანამშრომელი
  151. ------------------------------------------------------------------------------------------
  152. /*
  153.     არსი [მომწოდებელი]:
  154.         კომპოზიტური ატრიბუტით [მისამართი]
  155.         და მრავალმნიშვნელოვანი ატრიბუტით [ტელეფონი]
  156. */
  157. -- მომწოდებელი:
  158. IF OBJECT_ID(N'მომწოდებელი', 'u') IS NOT NULL
  159. DROP TABLE მომწოდებელი
  160. GO
  161. CREATE TABLE მომწოდებელი
  162. (
  163.     რეგისტრაციის_ნომერი  INT PRIMARY KEY IDENTITY(1, 1), /* <-IDENTITY გამოყენებულია აქ */
  164.     სახელი nvarchar(50),
  165.     ხელმძღვანელი nvarchar(50),
  166.     საკონტაქტო_პირი nvarchar(50)
  167.     --მისამართი
  168.     --ტელეფონი
  169. )
  170.  
  171. -- [მისამართი][1:1]:
  172. IF OBJECT_ID(N'მომწოდებლის_მისამართი', 'u') IS NOT NULL
  173. DROP TABLE მომწოდებლის_მისამართი
  174. GO
  175. CREATE TABLE მომწოდებლის_მისამართი
  176. (
  177.     ID INT UNIQUE, /* <-UNIQUE გამოყენებულია აქ */
  178.     ქალაქი nvarchar(50) DEFAULT(N'თბილისი'), /* <-DEFAULT გამოყენებულია აქ */
  179.     ქუჩა nvarchar(50)
  180. )
  181.  
  182. ALTER TABLE მომწოდებლის_მისამართი
  183. ADD CONSTRAINT FK_მომწოდებლის_მისამართი
  184. FOREIGN KEY (ID) /* <-FOREIGN KEY გამოყენებულია აქ */
  185. REFERENCES მომწოდებელი(რეგისტრაციის_ნომერი)
  186. ON UPDATE cascade
  187. ON DELETE cascade
  188.  
  189. ALTER TABLE მომწოდებლის_მისამართი
  190. DROP CONSTRAINT FK_მომწოდებლის_მისამართი
  191.  
  192. -- [ტელეფონი][1:N]:
  193. IF OBJECT_ID(N'მომწოდებლის_ტელეფონი', 'u') IS NOT NULL
  194. DROP TABLE მომწოდებლის_ტელეფონი
  195. GO
  196. CREATE TABLE მომწოდებლის_ტელეფონი
  197. (
  198.     ID INT,
  199.     ტელეფონის_ნომერი nvarchar(50)
  200. )
  201.  
  202. ALTER TABLE მომწოდებლის_ტელეფონი
  203. ADD CONSTRAINT FK_მომწოდებლის_ტელეფონი
  204. FOREIGN KEY (ID) /* <-FOREIGN KEY გამოყენებულია აქ */
  205. REFERENCES მომწოდებელი(რეგისტრაციის_ნომერი)
  206. ON UPDATE cascade
  207. ON DELETE cascade
  208.  
  209. ALTER TABLE მომწოდებლის_ტელეფონი
  210. DROP CONSTRAINT FK_მომწოდებლის_ტელეფონი
  211.  
  212. SELECT * FROM მომწოდებელი
  213. SELECT * FROM მომწოდებლის_მისამართი
  214. SELECT * FROM მომწოდებლის_ტელეფონი
  215.  
  216. INSERT INTO მომწოდებელი
  217. VALUES
  218.     ('ASUS', N'ნუგზარ ბლიაძე', N'ვიქტორა'),
  219.     ('NVIDIA', N'დავით გიორგაძე', N'ჯემალა'),
  220.     ('Intel', N'ჯემალი ფერაძე', N'მავთულა'),
  221.     ('AMD', N'ალექსანდრე გორდაძე', N'მჭედველა')
  222.  
  223. INSERT INTO მომწოდებლის_მისამართი
  224. VALUES
  225.     (1, N'თბილისი', N'დადიანი'),
  226.     (2, N'თბილისი', N'გურამიშვილი'),
  227.     (3, N'თბილისი', N'გურამიშვილი'),
  228.     (4, N'თბილისი', N'ბეჟანიშვილი')
  229.  
  230. INSERT INTO მომწოდებლის_ტელეფონი
  231. VALUES
  232.     (1, '599123456'),
  233.     (1, '577123456'),
  234.    
  235.     (2, '591782314'),
  236.     (2, '577782314'),
  237.     (2, '575782314'),
  238.    
  239.     (3, '599654321'),
  240.     (3, '577112233'),
  241.     (3, '591325127'),
  242.    
  243.     (4, '597162873'),
  244.     (4, '551232323')
  245.  
  246. -- END მომწოდებელი
  247. ------------------------------------------------------------------------------------------
  248. /*
  249.     არსი [კლიენტი]:
  250.         ქვეტიპებით[კლიენტი_იურიდიული_პირი] და [კლიენტი_ფიზიკური_პირი]
  251.         კომპოზიტური ატრიბუტით [მისამართი]
  252.         და მრავალმნიშვნელოვანი ატრიბუტით [ტელეფონი]
  253. */
  254. -- კლიენტი:
  255. IF OBJECT_ID(N'კლიენტი', 'u') IS NOT NULL
  256. DROP TABLE კლიენტი
  257. GO
  258. CREATE TABLE კლიენტი
  259. (
  260.     რეგისტრაციის_ნომერი  INT PRIMARY KEY IDENTITY(1, 1),/* <-PRIMARY KEY გამოყენებულია აქ */
  261.     კლიენტის_ტიპი nvarchar(50)
  262.     --მისამართი
  263.     --ტელეფონი
  264. )
  265.  
  266. -- [კლიენტი_იურიდიული_პირი][1:1]:
  267. IF OBJECT_ID(N'კლიენტი_იურიდიული_პირი', 'u') IS NOT NULL
  268. DROP TABLE კლიენტი_იურიდიული_პირი
  269. GO
  270. CREATE TABLE კლიენტი_იურიდიული_პირი
  271. (
  272.     სახელი nvarchar(50),
  273.     საგადასახადო_კოდი nvarchar(50),
  274.     ორგანიზაციის_ტიპი nvarchar(50),
  275.     ხელმძღვანელი nvarchar(50),
  276.     საკონტაქტო_პირი nvarchar(50),
  277.     რეგისტრაციის_ნომერი INT PRIMARY KEY /* <-PRIMARY KEY გამოყენებულია აქ */
  278. )
  279.  
  280. ALTER TABLE კლიენტი_იურიდიული_პირი
  281. ADD CONSTRAINT FK_კლიენტი_იურიდიული_პირი
  282. FOREIGN KEY (რეგისტრაციის_ნომერი) /* <-FOREIGN KEY გამოყენებულია აქ */
  283. REFERENCES კლიენტი(რეგისტრაციის_ნომერი)
  284. ON DELETE cascade
  285. ON UPDATE cascade
  286.  
  287. ALTER TABLE კლიენტი_იურიდიული_პირი
  288. DROP CONSTRAINT FK_კლიენტი_იურიდიული_პირი
  289.  
  290. -- [კლიენტი_ფიზიკური_პირი][1:1]:
  291. IF OBJECT_ID(N'კლიენტი_ფიზიკური_პირი', 'u') IS NOT NULL
  292. DROP TABLE კლიენტი_ფიზიკური_პირი
  293. GO
  294. CREATE TABLE კლიენტი_ფიზიკური_პირი
  295. (
  296.     პირადი_ნომერი INT,
  297.     სახელი nvarchar(50),
  298.     გვარი nvarchar(50),
  299.     რეგისტრაციის_ნომერი INT PRIMARY KEY /* <-PRIMARY KEY გამოყენებულია აქ */
  300. )
  301.  
  302. ALTER TABLE კლიენტი_ფიზიკური_პირი
  303. ADD CONSTRAINT FK_კლიენტი_ფიზიკური_პირი
  304. FOREIGN KEY (რეგისტრაციის_ნომერი) /* <-FOREIGN KEY გამოყენებულია აქ */
  305. REFERENCES კლიენტი(რეგისტრაციის_ნომერი)
  306. ON DELETE cascade
  307. ON UPDATE cascade
  308.  
  309. ALTER TABLE კლიენტი_ფიზიკური_პირი
  310. DROP CONSTRAINT FK_კლიენტი_ფიზიკური_პირი
  311.  
  312. -- [მისამართი][1:1]:
  313. IF OBJECT_ID(N'კლიენტის_მისამართი', 'u') IS NOT NULL
  314. DROP TABLE კლიენტის_მისამართი
  315. GO
  316. CREATE TABLE კლიენტის_მისამართი
  317. (
  318.     ID INT UNIQUE, /* <-UNIQUE გამოყენებულია აქ */
  319.     ქალაქი nvarchar(50) DEFAULT(N'თბილისი'), /* <-DEFAULT გამოყენებულია აქ */
  320.     ქუჩა nvarchar(50)
  321. )
  322.  
  323. ALTER TABLE კლიენტის_მისამართი
  324. ADD CONSTRAINT FK_კლიენტის_მისამართი
  325. FOREIGN KEY (ID) /* <-FOREIGN KEY გამოყენებულია აქ */
  326. REFERENCES კლიენტი(რეგისტრაციის_ნომერი)
  327. ON DELETE cascade
  328. ON UPDATE cascade
  329.  
  330. -- [ტელეფონი][1:N]:
  331. IF OBJECT_ID(N'კლიენტის_ტელეფონი', 'u') IS NOT NULL
  332. DROP TABLE კლიენტის_ტელეფონი
  333. GO
  334. CREATE TABLE კლიენტის_ტელეფონი
  335. (
  336.     ID INT,
  337.     ტელეფონის_ნომერი nvarchar(50)
  338. )
  339.  
  340. ALTER TABLE კლიენტის_ტელეფონი
  341. ADD CONSTRAINT FK_კლიენტის_ტელეფონი
  342. FOREIGN KEY (ID) /* <-FOREIGN KEY გამოყენებულია აქ */
  343. REFERENCES კლიენტი(რეგისტრაციის_ნომერი)
  344. ON DELETE cascade
  345. ON UPDATE cascade
  346.  
  347. INSERT INTO კლიენტი
  348. VALUES
  349.     (N'ფიზიკური პირი'),
  350.     (N'ფიზიკური პირი'),
  351.     (N'ფიზიკური პირი'),
  352.     (N'იურიდიული პირი')
  353.  
  354. INSERT INTO კლიენტი_ფიზიკური_პირი
  355. VALUES
  356.     (1111, N'გიორგი', N'აზუბაშვილი', 1),
  357.     (2222, N'დავით', N'დადოშვილი', 2),
  358.     (3333, N'ალეკო', N'პაპაშვილი', 3)
  359.    
  360. INSERT INTO კლიენტი_იურიდიული_პირი
  361. VALUES
  362.     (N'ტექნობუმი', '5923872364', N'მაღაზია', N'ირაკლი ხუჭუა', N'ნოდარა', 4)
  363.  
  364. SELECT * FROM კლიენტი
  365. SELECT * FROM კლიენტი_ფიზიკური_პირი
  366. SELECT * FROM კლიენტი_იურიდიული_პირი
  367.  
  368. INSERT INTO კლიენტის_მისამართი
  369. VALUES
  370.     (1, N'თბილისი', N'დადიანი'),
  371.     (2, N'თბილისი', N'გურამიშვილი'),
  372.     (3, N'თბილისი', N'გურამიშვილი'),
  373.     (4, N'თბილისი', N'ბეჟანიშვილი')
  374.  
  375. INSERT INTO კლიენტის_ტელეფონი
  376. VALUES
  377.     (1, '599123456'),
  378.     (1, '577123456'),
  379.    
  380.     (2, '591782314'),
  381.     (2, '577782314'),
  382.     (2, '575782314'),
  383.    
  384.     (3, '599654321'),
  385.     (3, '577112233'),
  386.     (3, '591325127'),
  387.    
  388.     (4, '597162873'),
  389.     (4, '551232323')
  390.  
  391. SELECT * FROM კლიენტი
  392. SELECT * FROM კლიენტის_მისამართი
  393. SELECT * FROM კლიენტის_ტელეფონი
  394.  
  395. -- მაჩვენე 'ფიზიკური პირები' მთლიანად
  396. SELECT * FROM კლიენტი
  397. INNER JOIN კლიენტი_ფიზიკური_პირი
  398. ON კლიენტი.რეგისტრაციის_ნომერი=კლიენტი_ფიზიკური_პირი.რეგისტრაციის_ნომერი
  399. WHERE კლიენტი.კლიენტის_ტიპი=N'ფიზიკური პირი'
  400.  
  401. -- მაჩვენე 'იურიდიული პირები' მთლიანად
  402. SELECT * FROM კლიენტი
  403. INNER JOIN კლიენტი_იურიდიული_პირი
  404. ON კლიენტი.რეგისტრაციის_ნომერი=კლიენტი_იურიდიული_პირი.რეგისტრაციის_ნომერი
  405. WHERE კლიენტი.კლიენტის_ტიპი=N'იურიდიული პირი'
  406.  
  407. -- END კლიენტი
  408. ------------------------------------------------------------------------------------------
  409. /*
  410.     არსი [ნაწილები]:
  411. */
  412. -- ნაწილები:
  413. IF OBJECT_ID(N'ნაწილები', 'u') IS NOT NULL
  414. DROP TABLE ნაწილები
  415. GO
  416. CREATE TABLE ნაწილები
  417. (
  418.     ნაწილის_კოდი  INT PRIMARY KEY IDENTITY(1, 1), /* <-PRIMARY KEY გამოყენებულია აქ */
  419.     დასახელება nvarchar(50),
  420.     --იყენებს_ID int,
  421.     --აწვდის_ID int not null
  422. )
  423.  
  424. INSERT INTO ნაწილები
  425. VALUES
  426.     (N'პროცესორი'),
  427.     (N'დედაპლატა'),
  428.     (N'ქულერი'),
  429.     (N'პროცესორი'),
  430.     (N'ქეისი')
  431.    
  432. SELECT * FROM ნაწილები
  433.  
  434. -- END ნაწილები
  435. ------------------------------------------------------------------------------------------
  436. /*
  437.     არსი [პროდუქტი]:
  438. */
  439. -- პროდუქტი:
  440. IF OBJECT_ID(N'პროდუქტი', 'u') IS NOT NULL
  441. DROP TABLE პროდუქტი
  442. GO
  443. CREATE TABLE პროდუქტი
  444. (
  445.     პროდუქტის_კოდი  INT PRIMARY KEY IDENTITY(1, 1), /* <-PRIMARY KEY გამოყენებულია აქ */
  446.     დასახელება nvarchar(50),
  447.     გაკეთების_თარიღი DATE,
  448.     გარანტია nvarchar(50),
  449.     ფასი INT
  450. )
  451.  
  452. SELECT * FROM თანამშრომელი
  453. SELECT * FROM პროდუქტი
  454.  
  455. -- პასუხისმგებელი ხალხი:
  456. INSERT INTO პროდუქტი
  457. VALUES
  458.     (N'პენტიუმ–3', CAST(GETDATE() AS DATE), N'1 წელი', 1000, 3333),
  459.     (N'პენტიუმ–1', CAST(GETDATE() AS DATE), N'1 წელი', 1000, 3333),
  460.     (N'პენტიუმ–2', CAST(GETDATE() AS DATE), N'1 წელი', 1000, 4444),
  461.     (N'პენტიუმ–4', CAST(GETDATE() AS DATE), N'1 წელი', 1000, 4444),
  462.     (N'პენტიუმ–4', CAST(GETDATE() AS DATE), N'1 წელი', 1000, 4444),
  463.     (N'პენტიუმ–2', CAST(GETDATE() AS DATE), N'1 წელი', 1000, 5555),
  464.     (N'პენტიუმ–3', CAST(GETDATE() AS DATE), N'1 წელი', 1000, 7777),
  465.     (N'პენტიუმ–3', CAST(GETDATE() AS DATE), N'1 წელი', 1000, 7777)
  466.  
  467. -- END პროდუქტი
  468. ------------------------------------------------------------------------------------------
  469. /*
  470. კავშირები:
  471.     თანამშრომელი <პასუხს_აგებს> პროდუქტი 1:N
  472.     თანამშრომელი <ამზადებს> პროდუქტი (თარიღი, კოდი) 1:N
  473.     თანამშრომელი <იყენებს> ნაწილები (რაოდენობა) 1:N
  474.     მომწოდებელი <აწვდის> ნაწილები (რაოდენობა) 1:N
  475.     კლიენტი <უკვეთავს> პროდუქტი (შეკვეთის_თარიღი, შეკვეთის_ნომერი) N:M
  476. */
  477.  
  478. -- თანამშრომელი <პასუხს_აგებს> პროდუქტი 1:N
  479. ALTER TABLE პროდუქტი
  480. DROP COLUMN პასუხს_აგებს_ID
  481.  
  482. ALTER TABLE პროდუქტი
  483. ADD პასუხს_აგებს_ID INT
  484.  
  485. ALTER TABLE პროდუქტი
  486. ADD CONSTRAINT FK_პასუხს_აგებს
  487. FOREIGN KEY (პასუხს_აგებს_ID) /* <-FOREIGN KEY გამოყენებულია აქ */
  488. REFERENCES თანამშრომელი(პირადი_ნომერი)
  489. ON DELETE cascade
  490. ON UPDATE cascade
  491.  
  492. ALTER TABLE პროდუქტი
  493. DROP CONSTRAINT FK_პასუხს_აგებს
  494.  
  495. SELECT * FROM პროდუქტი
  496.  
  497. /*
  498.     (3)ამოცანა:
  499.         ვაჩვენოთ ვინ რაზე აგებს პასუხს.
  500. */
  501. SELECT პირადი_ნომერი, სახელი, გვარი, პროდუქტი.დასახელება
  502. FROM თანამშრომელი
  503. JOIN პროდუქტი
  504. ON პროდუქტი.პასუხს_აგებს_ID=თანამშრომელი.პირადი_ნომერი
  505. ORDER BY თანამშრომელი.პირადი_ნომერი
  506.  
  507. -- თანამშრომელი <ამზადებს> პროდუქტი (თარიღი, კოდი) 1:N
  508. IF OBJECT_ID(N'ამზადებს', 'u') IS NOT NULL
  509. DROP TABLE ამზადებს
  510. GO
  511. CREATE TABLE ამზადებს
  512. (
  513.     დამზადების_თარიღი DATE,
  514.     დამზადების_კოდი INT PRIMARY KEY,
  515.     პირადი_ნომერი INT FOREIGN KEY REFERENCES თანამშრომელი (პირადი_ნომერი)
  516.     ON DELETE cascade
  517.     ON UPDATE cascade NOT NULL,
  518.     პროდუქტის_კოდი INT UNIQUE FOREIGN KEY REFERENCES პროდუქტი (პროდუქტის_კოდი) NOT NULL
  519. )
  520.  
  521. SELECT * FROM თანამშრომელი
  522. SELECT * FROM პროდუქტი
  523.  
  524. SELECT * FROM ამზადებს
  525.  
  526. INSERT INTO ამზადებს
  527. VALUES
  528.     (CAST(GETDATE() AS DATE), 11, 3333, 1),
  529.     (CAST(GETDATE() AS DATE), 22, 3333, 2),
  530.     (CAST(GETDATE() AS DATE), 33, 4444, 3),
  531.     (CAST(GETDATE() AS DATE), 44, 4444, 4),
  532.     (CAST(GETDATE() AS DATE), 55, 4444, 5),
  533.     (CAST(GETDATE() AS DATE), 77, 5555, 6),
  534.     (CAST(GETDATE() AS DATE), 88, 7777, 7),
  535.     (CAST(GETDATE() AS DATE), 99, 7777, 8)
  536.  
  537. -- თანამშრომელი <იყენებს> ნაწილები (რაოდენობა) 1:N
  538. IF OBJECT_ID(N'იყენებს', 'u') IS NOT NULL
  539. DROP TABLE იყენებს
  540. GO
  541. CREATE TABLE იყენებს
  542. (
  543.     რაოდენობა INT NOT NULL,
  544.     პირადი_ნომერი INT UNIQUE FOREIGN KEY REFERENCES თანამშრომელი (პირადი_ნომერი)
  545.     ON DELETE cascade
  546.     ON UPDATE cascade NOT NULL,
  547.     ნაწილის_კოდი INT FOREIGN KEY REFERENCES ნაწილები (ნაწილის_კოდი)
  548.     ON DELETE cascade
  549.     ON UPDATE cascade NOT NULL
  550. )
  551.  
  552. -- მომწოდებელი <აწვდის> ნაწილები (რაოდენობა) 1:N
  553. IF OBJECT_ID(N'აწვდის', 'u') IS NOT NULL
  554. DROP TABLE აწვდის
  555. GO
  556. CREATE TABLE აწვდის
  557. (
  558.     რაოდენობა INT NOT NULL,
  559.     რეგისტრაციის_ნომერი INT UNIQUE FOREIGN KEY REFERENCES მომწოდებელი (რეგისტრაციის_ნომერი)
  560.     ON DELETE cascade
  561.     ON UPDATE cascade NOT NULL,
  562.     ნაწილის_კოდი INT FOREIGN KEY REFERENCES ნაწილები (ნაწილის_კოდი)
  563.     ON DELETE cascade
  564.     ON UPDATE cascade NOT NULL
  565. )
  566.  
  567. /*
  568.     (1)ამოცანა:
  569.         ვაჩვენოთ რომელმა ფირმამ რამდენი ნაწილი მოგვაწოდა.
  570. */
  571. SELECT აწვდის.რეგისტრაციის_ნომერი, მომწოდებელი.სახელი, რაოდენობა
  572. FROM აწვდის
  573. JOIN მომწოდებელი
  574. ON აწვდის.რეგისტრაციის_ნომერი=მომწოდებელი.რეგისტრაციის_ნომერი
  575. ORDER BY აწვდის.რეგისტრაციის_ნომერი
  576.  
  577. /*
  578.     (2)ამოცანა:
  579.         ვაჩვენოთ რომელმა ფირმამ რა ნაწილი მოგვაწოდა.
  580. */
  581. SELECT რეგისტრაციის_ნომერი, მომწოდებელი.სახელი, ნაწილები.დასახელება
  582. FROM მომწოდებელი
  583. JOIN ნაწილები
  584. ON  მომწოდებელი.რეგისტრაციის_ნომერი=ნაწილები.ნაწილის_კოდი
  585. ORDER BY მომწოდებელი.რეგისტრაციის_ნომერი
  586.  
  587. INSERT INTO აწვდის
  588. VALUES
  589.     (5, 3, 1),
  590.     (10, 1, 2),
  591.     (25, 4, 4),
  592.     (5, 2, 3)
  593.  
  594. SELECT * FROM აწვდის
  595.  
  596. -- კლიენტი <უკვეთავს> პროდუქტი (შეკვეთის_თარიღი, შეკვეთის_ნომერი) N:M
  597. IF OBJECT_ID(N'უკვეთავს', 'u') IS NOT NULL
  598. DROP TABLE უკვეთავს
  599. GO
  600. CREATE TABLE უკვეთავს
  601. (
  602.     შეკვეთის_ნომერი INT PRIMARY KEY IDENTITY(1, 1), /* <-PRIMARY KEY გამოყენებულია აქ */
  603.     შეკვეთის_თარიღი DATE,
  604.     პროდუქტი_ID INT FOREIGN KEY REFERENCES პროდუქტი(პროდუქტის_კოდი) NOT NULL,
  605.     კლიენტი_ID INT FOREIGN KEY REFERENCES კლიენტი(რეგისტრაციის_ნომერი) NOT NULL
  606. )
  607. ------------------------------------------------------------------------------------------
  608.  
  609. -- თანამშრომლის დამატება [თანამშრომელი ცხრილში]:
  610. IF OBJECT_ID(N'ამწყობის_შეყვანა', 'p') IS NOT NULL
  611. DROP PROCEDURE ამწყობის_შეყვანა
  612. GO
  613. CREATE PROCEDURE ამწყობის_შეყვანა
  614.     @პირადი_ნომერი INT,
  615.     @სახელი nvarchar(50),
  616.     @გვარი nvarchar(50),
  617.     @დაბადების_თარიღი DATE
  618. --  @თანამდებობა nvarchar(50)
  619. AS
  620. INSERT INTO თანამშრომელი
  621. VALUES
  622.     (@პირადი_ნომერი,@სახელი,@გვარი,@დაბადების_თარიღი, N'ამწყობი')
  623.  
  624. EXECUTE ამწყობის_შეყვანა  8888, N'ვახტანგ', N'ლალუაშვილი', '1993-05-14'
  625. SELECT * FROM თანამშრომელი
  626.  
  627. -- თანამშრომლის წაშლა სახელისა და გვარის მიხედვით [თანამშრომელი ცხრილიდან]:
  628. IF OBJECT_ID(N'თანამშრომლის_წაშლა', 'p') IS NOT NULL
  629. DROP PROCEDURE თანამშრომლის_წაშლა
  630. GO
  631. CREATE PROCEDURE თანამშრომლის_წაშლა  @name nvarchar(50), @surname nvarchar(50)
  632. AS
  633. BEGIN
  634.     DELETE FROM თანამშრომელი
  635.     WHERE თანამშრომელი.სახელი=@name AND თანამშრომელი.გვარი=@surname
  636. END
  637.  
  638. EXECUTE თანამშრომლის_წაშლა N'ვახტანგ', N'ლალუაშვილი'
  639. SELECT * FROM თანამშრომელი
  640.  
  641. -- ჩვენება ამწყობი თანამშრომლებისა [თანამშრომლები ცხრილიდან]
  642. IF OBJECT_ID(N'მაჩვენე_ამწყობი_თანამშრომლები', 'p') IS NOT NULL
  643. DROP PROCEDURE მაჩვენე_ამწყობი_თანამშრომლები
  644. GO
  645. CREATE PROCEDURE მაჩვენე_ამწყობი_თანამშრომლები
  646. AS
  647. SELECT * FROM თანამშრომელი
  648. WHERE თანამდებობა=N'ამწყობი'
  649. ORDER BY პირადი_ნომერი
  650.  
  651. EXEC მაჩვენე_ამწყობი_თანამშრომლები
  652.  
  653. -- TRIGGERS:
  654. IF OBJECT_ID('ფიზიკური_პირის_წაშლის_შეფერხება', 'tr') IS NOT NULL
  655. DROP TRIGGER ფიზიკური_პირის_წაშლის_შეფერხება
  656. GO
  657. CREATE TRIGGER ფიზიკური_პირის_წაშლის_შეფერხება
  658. ON კლიენტი_ფიზიკური_პირი
  659. after DELETE
  660. AS
  661. print(N'შეცდომა! არ შეგიძლიათ კლიენტის ქვეტიპის წაშლა.');
  662. ROLLBACK tran -- მოქმედების უკან დაბრუნება
  663.  
  664. DELETE FROM კლიენტი_ფიზიკური_პირი WHERE სახელი=N'იგორა'
  665. --
  666. IF OBJECT_ID('იურიდიული_პირის_წაშლის_შეფერხება', 'tr') IS NOT NULL
  667. DROP TRIGGER იურიდიული_პირის_წაშლის_შეფერხება
  668. GO
  669. CREATE TRIGGER იურიდიული_პირის_წაშლის_შეფერხება
  670. ON კლიენტი_იურიდიული_პირი
  671. after DELETE
  672. AS
  673. print(N'შეცდომა! არ შეგიძლიათ კლიენტის ქვეტიპის წაშლა.');
  674. ROLLBACK tran -- მოქმედების უკან დაბრუნება
  675.  
  676. DELETE FROM კლიენტი_იურიდიული_პირი WHERE სახელი=N'ALTA'
  677.  
  678. /* FUNCTION */
  679. IF OBJECT_ID(N'დამიბრუნე_კონკრეტული_თანამშრომლის_ტელეფონების_რაოდენობა') IS NOT NULL
  680. DROP FUNCTION დამიბრუნე_კონკრეტული_თანამშრომლის_ტელეფონების_რაოდენობა
  681. GO
  682. CREATE FUNCTION დამიბრუნე_კონკრეტული_თანამშრომლის_ტელეფონების_რაოდენობა(@ID nvarchar(50))
  683. RETURNS INT
  684. AS
  685. BEGIN
  686.     DECLARE @num INT
  687.         SELECT @num=COUNT(თანამშრომლის_ტელეფონი.ID)
  688.         FROM თანამშრომლის_ტელეფონი
  689.         WHERE თანამშრომლის_ტელეფონი.ID=@ID
  690.     RETURN @num
  691. END
  692.  
  693. print(dbo.დამიბრუნე_კონკრეტული_თანამშრომლის_ტელეფონების_რაოდენობა('2222'));
  694.  
  695. /* INLINE TABLE VALUED FUNCTION */
  696. IF OBJECT_ID(N'დამიბრუნე_ცხრილი_ფიზიკური_კლიენტის') IS NOT NULL
  697. DROP FUNCTION დამიბრუნე_ცხრილი_ფიზიკური_კლიენტის
  698. GO
  699. CREATE FUNCTION დამიბრუნე_ცხრილი_ფიზიკური_კლიენტის(@რეგისტრაციის_ID INT)
  700. RETURNS TABLE
  701. AS
  702.     RETURN
  703.         SELECT კლიენტი.რეგისტრაციის_ნომერი, კლიენტის_ტიპი, სახელი, გვარი
  704.         FROM კლიენტი, კლიენტი_ფიზიკური_პირი
  705.         WHERE კლიენტი.რეგისტრაციის_ნომერი=@რეგისტრაციის_ID AND @რეგისტრაციის_ID=კლიენტი_ფიზიკური_პირი.რეგისტრაციის_ნომერი
  706.  
  707. SELECT * FROM dbo.დამიბრუნე_ცხრილი_ფიზიკური_კლიენტის(3);
  708.  
  709. /* MULTI STATEMENT TABLE VALUED FUNCTION */
  710. IF OBJECT_ID(N'დამიბრუნე_ჩემებური_თანამშრომლების_ცხრილი') IS NOT NULL
  711. DROP FUNCTION დამიბრუნე_ჩემებური_თანამშრომლების_ცხრილი
  712. GO
  713. CREATE FUNCTION დამიბრუნე_ჩემებური_თანამშრომლების_ცხრილი(@ID INT)
  714. RETURNS @ჩემებური_ცხრილი TABLE
  715. (
  716.     თანამდებობა nvarchar(50),
  717.     გვარი nvarchar(50),
  718.     სახელი nvarchar(50),
  719.     დაბადების_თარიღი DATE
  720. )
  721. AS
  722. BEGIN
  723.     INSERT @ჩემებური_ცხრილი
  724.         SELECT თანამდებობა, გვარი, სახელი, დაბადების_თარიღი
  725.         FROM თანამშრომელი
  726.         WHERE თანამშრომელი.პირადი_ნომერი=@ID
  727.     RETURN
  728. END
  729.  
  730. SELECT * FROM dbo.დამიბრუნე_ჩემებური_თანამშრომლების_ცხრილი(1111);
  731.  
  732. -- ფუნქციები:
  733. print(getdate());
  734. print(CONVERT(DATE, getdate()));
  735. print(CONVERT(TIME, getdate()));
  736.  
  737. print(ascii('a'));
  738.  
  739. print(len('vakho'));
  740. print(UPPER('vakho'));
  741. print(LOWER('VAKHO'));
  742.  
  743. print(rtrim('vakho   ') + 'asd');
  744. print(ltrim('    vakho'));
  745. print('a' + ltrim(rtrim('     vakho   ')) + 'a');
  746.  
  747. print(CAST('15' AS INT) + 17);
Advertisement
Add Comment
Please, Sign In to add comment