-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathСкрипт создания БД.sql
152 lines (116 loc) · 4.84 KB
/
Скрипт создания БД.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/******************************************************************************/
/*** Generated by IBExpert 2017.8.22.1 08.11.2017 16:36:26 ***/
/******************************************************************************/
/******************************************************************************/
/*** Generators ***/
/******************************************************************************/
CREATE GENERATOR GEN_PEOPLE_ID;
SET GENERATOR GEN_PEOPLE_ID TO 230;
/******************************************************************************/
/*** Exceptions ***/
/******************************************************************************/
CREATE EXCEPTION EXIST_PEOPLE 'Òàêîé ÷åëîâåê óæå ñóùåñòâóåò';
/******************************************************************************/
/*** Tables ***/
/******************************************************************************/
CREATE TABLE CHAT_INFO (
ID BIGINT NOT NULL,
FULL_NAME VARCHAR(50),
NICKNAME VARCHAR(50)
);
CREATE TABLE CHATS (
ID BIGINT NOT NULL,
FULL_NAME VARCHAR(50) NOT NULL,
NIKNAME VARCHAR(50),
TIME_LAST_SENDING TIMESTAMP,
TIME_NEXT_SENDING TIMESTAMP,
TIME_SENDING TIME DEFAULT '8:00:00',
NEED_IN_SENDING COMPUTED BY ((IIF((CURRENT_TIMESTAMP>TIME_NEXT_SENDING),1,0)))
);
CREATE TABLE DIALOGS (
CHAT BIGINT NOT NULL,
STATUS INTEGER DEFAULT 0 NOT NULL
);
CREATE TABLE DIALOGS_DATA (
CHAT BIGINT NOT NULL,
FAMILIYA VARCHAR(50),
IMYA VARCHAR(50),
OTCHESTVO VARCHAR(50),
TELEFON VARCHAR(15),
BIRTHDAY DATE,
DESCRIPTION VARCHAR(100)
);
CREATE TABLE PEOPLE (
ID INTEGER NOT NULL,
FAMILIYA VARCHAR(20),
IMYA VARCHAR(20) CHARACTER SET WIN1251,
OTCHESTVO VARCHAR(20),
TELEFON VARCHAR(20),
BIRTHDAY DATE,
DESCRIPTION VARCHAR(100),
VOZRAST COMPUTED BY (( EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM BIRTHDAY)
- IIF((EXTRACT(MONTH FROM CURRENT_DATE) < EXTRACT(MONTH FROM BIRTHDAY)),
1, IIF((EXTRACT(MONTH FROM CURRENT_DATE) = EXTRACT(MONTH FROM BIRTHDAY))
AND ((EXTRACT(DAY FROM CURRENT_DATE) < EXTRACT(DAY FROM BIRTHDAY))),1,0))))
);
/******************************************************************************/
/*** Primary keys ***/
/******************************************************************************/
ALTER TABLE CHATS ADD CONSTRAINT PK_CHATS PRIMARY KEY (ID);
ALTER TABLE CHAT_INFO ADD CONSTRAINT PK_CHAT_INFO PRIMARY KEY (ID);
ALTER TABLE DIALOGS ADD CONSTRAINT PK_DIALOGS PRIMARY KEY (CHAT);
ALTER TABLE DIALOGS_DATA ADD CONSTRAINT PK_DIALOGS_DATA PRIMARY KEY (CHAT);
ALTER TABLE PEOPLE ADD CONSTRAINT PK_PEOPLE PRIMARY KEY (ID);
/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/
/* Trigger: CHATS_BI0 */
CREATE TRIGGER CHATS_BI0 FOR CHATS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if(new.time_sending>current_time)
then new.time_next_sending=current_date+new.time_sending;
else new.time_next_sending=(current_date+1)+new.time_sending;
end
^
/* Trigger: CHATS_BU0 */
CREATE TRIGGER CHATS_BU0 FOR CHATS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
if(new.time_last_sending<>old.time_last_sending)
then new.time_next_sending=(current_date+1)+new.time_sending;
else if(new.time_sending<>old.time_sending)
then if(new.time_sending>current_time)
then new.time_next_sending=current_date+new.time_sending;
else new.time_next_sending=(current_date+1)+new.time_sending;
end
^
/* Trigger: PEOPLE_BI */
CREATE TRIGGER PEOPLE_BI FOR PEOPLE
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id is null) then
new.id = gen_id(gen_people_id,1);
end
^
/* Trigger: PEOPLE_BI0 */
CREATE TRIGGER PEOPLE_BI0 FOR PEOPLE
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE X BIGINT;
begin
select COUNT (*) FROM people as P
where P.FAMILIYA = NEW.familiya AND
P.IMYA = NEW.imya and P.OTCHESTVO = NEW.otchestvo AND P.BIRTHDAY = NEW.birthday
INTO X;
if (X>0) then exception exist_people;
end
^
SET TERM ; ^