345 lines
12 KiB
Transact-SQL
345 lines
12 KiB
Transact-SQL
use AnP
|
|
|
|
if object_id(N'dbo.groups_tables_delete', N'P') is not null drop procedure dbo.groups_tables_delete
|
|
go
|
|
create procedure dbo.groups_tables_delete as begin
|
|
|
|
set nocount on;
|
|
|
|
-- Level 3.
|
|
if object_id(N'dbo.GroupsIps', N'U') is not null drop table dbo.GroupsIps
|
|
if object_id(N'dbo.GroupsUsers', N'U') is not null drop table dbo.GroupsUsers
|
|
|
|
-- Level 1.
|
|
if object_id(N'dbo.Groups', N'U') is not null drop table dbo.Groups
|
|
|
|
-- Level 0.
|
|
if object_id(N'dbo.GroupsTypes', N'U') is not null drop table dbo.GroupsTypes
|
|
|
|
-- Level historical.
|
|
if object_id(N'dbo.GroupsIpsData', N'U') is not null drop table dbo.GroupsIpsData
|
|
if object_id(N'dbo.GroupsUsersData', N'U') is not null drop table dbo.GroupsUsersData
|
|
if object_id(N'dbo.GroupsData', N'U') is not null drop table dbo.GroupsData
|
|
if object_id(N'dbo.GroupsTypesData', N'U') is not null drop table dbo.GroupsTypesData
|
|
|
|
end
|
|
go
|
|
|
|
if object_id(N'dbo.groups_tables_create', N'P') is not null drop procedure dbo.groups_tables_create
|
|
go
|
|
create procedure dbo.groups_tables_create as begin
|
|
|
|
set nocount on;
|
|
|
|
-- Level historical.
|
|
if object_id(N'dbo.GroupsTypesData', N'U') is null create table dbo.GroupsTypesData(
|
|
id integer not null identity(1,1),
|
|
entity integer not null,
|
|
[name] varchar(32) not null,
|
|
[description] varchar(256),
|
|
date_in datetime not null,
|
|
date_out datetime,
|
|
constraint pk_groups_types primary key clustered(id)
|
|
)
|
|
|
|
if object_id(N'dbo.GroupsData', N'U') is null create table dbo.GroupsData(
|
|
id integer not null identity(1,1),
|
|
entity integer not null,
|
|
[procedure] integer not null,
|
|
[session] integer not null,
|
|
[type] integer not null,
|
|
[name] varchar(32) not null,
|
|
[description] varchar(256),
|
|
date_in datetime not null,
|
|
date_out datetime,
|
|
constraint pk_groups_data primary key clustered (id)
|
|
)
|
|
|
|
if object_id(N'dbo.GroupsIpsData', N'U') is null create table dbo.GroupsIpsData(
|
|
id integer not null identity(1,1),
|
|
entity integer not null,
|
|
[procedure] integer not null,
|
|
[session] integer not null,
|
|
[group] integer not null,
|
|
[ip] integer not null,
|
|
belongs bit not null,
|
|
date_in datetime not null,
|
|
constraint pk_groups_ips_data primary key clustered (id)
|
|
)
|
|
|
|
if object_id(N'dbo.GroupsUsersData', N'U') is null create table dbo.GroupsUsersData(
|
|
id integer not null identity(1,1),
|
|
entity integer not null,
|
|
[procedure] integer not null,
|
|
[session] integer not null,
|
|
[group] integer not null,
|
|
[user] integer not null,
|
|
belongs bit not null,
|
|
date_in datetime not null,
|
|
constraint pk_groups_users_data primary key clustered (id)
|
|
)
|
|
|
|
-- Level 0.
|
|
if object_id(N'dbo.GroupsTypes', N'U') is null create table dbo.GroupsTypes(
|
|
id integer not null identity(1,1),
|
|
[name] varchar(32) not null,
|
|
[description] varchar(256),
|
|
date_in datetime not null constraint df_groups_types_date_in default getdate(),
|
|
date_out datetime,
|
|
constraint pk_groups_types primary key clustered (id),
|
|
constraint uk_groups_types_name unique nonclustered ([name] asc) with (fillfactor = 90),
|
|
constraint ck_groups_types_name check ([name] != '')
|
|
)
|
|
|
|
-- Level 1.
|
|
if object_id(N'dbo.Groups', N'U') is null begin
|
|
create table dbo.Groups(
|
|
id integer not null identity(1,1),
|
|
[type] integer not null,
|
|
[name] varchar(32) not null,
|
|
[description] varchar(256),
|
|
date_in datetime not null constraint df_groups_date_in default getdate(),
|
|
date_out datetime,
|
|
constraint pk_groups primary key clustered (id),
|
|
constraint fk_groups_type foreign key ([type]) references dbo.GroupsTypes(id),
|
|
constraint uk_groups_type_name unique([name], [type]),
|
|
constraint ck_groups_type check ([type] > 0),
|
|
constraint ck_groups_name check ([name] != '')
|
|
)
|
|
create nonclustered index ix_groups_type on dbo.Groups([type] asc) include ([name]) with (fillfactor = 90)
|
|
create nonclustered index ix_groups_name on dbo.Groups([name] asc) include ([type]) with (fillfactor = 90)
|
|
end
|
|
|
|
-- Level 2.
|
|
if object_id(N'dbo.GroupsIps', N'U') is null begin
|
|
create table dbo.GroupsIps(
|
|
id integer not null identity(1,1),
|
|
[group] integer not null,
|
|
[ip] integer not null,
|
|
belongs bit not null constraint df_groups_ips_belongs default 1,
|
|
date_in datetime not null constraint df_groups_ips_date_in default getdate(),
|
|
constraint pk_groups_ips primary key clustered (id),
|
|
constraint fk_groups_ips_group foreign key ([group]) references dbo.Groups(id),
|
|
constraint fk_groups_ips_ip foreign key ([ip]) references dbo.Ips(id),
|
|
constraint uk_groups_ips_group_ip unique([group], [ip]),
|
|
constraint ck_groups_ips_group check ([group] > 0),
|
|
constraint ck_groups_ips_ip check ([ip] > 0)
|
|
)
|
|
create nonclustered index ix_groups_ips_group on dbo.GroupsIps([group] asc) include ([ip], belongs) with (fillfactor = 90)
|
|
create nonclustered index ix_groups_ips_ip on dbo.GroupsIps([ip] asc) include ([group], belongs) with (fillfactor = 90)
|
|
end
|
|
|
|
if object_id(N'dbo.GroupsUsers', N'U') is null begin
|
|
create table dbo.GroupsUsers(
|
|
id integer not null identity(1,1),
|
|
[group] integer not null,
|
|
[user] integer not null,
|
|
belongs bit not null constraint df_groups_users_belongs default 1,
|
|
date_in datetime not null constraint df_groups_users_date_in default getdate(),
|
|
constraint pk_groups_users primary key clustered (id),
|
|
constraint fk_groups_users_group foreign key ([group]) references dbo.Groups(id),
|
|
constraint fk_groups_users_user foreign key ([user]) references dbo.Users(id),
|
|
constraint uk_groups_users_group_user unique([group], [user]),
|
|
constraint ck_groups_users_group check ([group] > 0),
|
|
constraint ck_groups_users_user check ([user] > 0)
|
|
)
|
|
create nonclustered index ix_groups_users_group on dbo.GroupsUsers([group] asc) include ([user], belongs) with (fillfactor = 90)
|
|
create nonclustered index ix_groups_users_user on dbo.GroupsUsers([user] asc) include ([group], belongs) with (fillfactor = 90)
|
|
end
|
|
|
|
end
|
|
go
|
|
|
|
if object_id(N'dbo.groups_tables_update', N'P') is not null drop procedure dbo.groups_tables_update
|
|
go
|
|
create procedure dbo.groups_tables_update as begin
|
|
|
|
set nocount on;
|
|
|
|
end
|
|
go
|
|
|
|
execute dbo.groups_tables_delete
|
|
go
|
|
execute dbo.groups_tables_create
|
|
go
|
|
execute dbo.groups_tables_update
|
|
go
|
|
|
|
if object_id(N'dbo.groups_trigger_update', N'TR') is not null drop trigger dbo.groups_trigger_update
|
|
go
|
|
create trigger dbo.groups_trigger_update on dbo.Groups after insert, update as begin
|
|
|
|
declare @database varchar(64)
|
|
declare @procedure varchar(64)
|
|
declare @procedure_id integer
|
|
declare @session integer
|
|
declare @id integer
|
|
declare @name varchar(32)
|
|
declare @description varchar(256)
|
|
declare @date_in datetime
|
|
declare @date_out datetime
|
|
declare groups_cursor cursor local for (
|
|
select id, [name], [description], date_in, date_out from inserted
|
|
)
|
|
|
|
set nocount on
|
|
|
|
execute dbo.sql_get @database output, @procedure output, @session output
|
|
execute dbo.procedure_get @database, @procedure, @procedure_id output
|
|
|
|
open groups_cursor
|
|
while 1 = 1 begin
|
|
fetch next from groups_cursor into @id, @procedure, @session, @name, @description, @date_in, @date_out
|
|
if @@fetch_status != 0
|
|
break
|
|
insert into dbo.GroupsData(entity, [procedure], [session], [name], [description], date_in, date_out) values
|
|
(@id, @procedure, @session, @name, @description, @date_in, @date_out)
|
|
update dbo.Groups set data_id = scope_identity() where id = @id
|
|
end
|
|
close groups_cursor
|
|
deallocate groups_cursor
|
|
|
|
end
|
|
go
|
|
|
|
if object_id(N'dbo.groups_ips_trigger_update', N'TR') is not null drop trigger dbo.groups_ips_trigger_update
|
|
go
|
|
create trigger dbo.groups_ips_trigger_update on dbo.GroupsIps after insert, update as begin
|
|
|
|
declare @database varchar(64)
|
|
declare @procedure varchar(64)
|
|
declare @procedure_id integer
|
|
declare @session integer
|
|
declare @id integer
|
|
declare @group integer
|
|
declare @ip integer
|
|
declare @belongs bit
|
|
declare @date_in datetime
|
|
declare groups_ips_cursor cursor local for (
|
|
select id, [group], [ip], belongs, date_in from inserted
|
|
)
|
|
|
|
set nocount on
|
|
|
|
execute dbo.sql_get @database output, @procedure output, @session output
|
|
execute dbo.procedure_get @database, @procedure, @procedure_id output
|
|
|
|
open groups_ips_cursor
|
|
while 1 = 1 begin
|
|
fetch next from groups_ips_cursor into @id, @group, @ip, @belongs, @date_in
|
|
if @@fetch_status != 0
|
|
break
|
|
insert into dbo.GroupsIpsData(entity, [procedure], [session], [group], [ip], belongs, date_in) values
|
|
(@id, @procedure_id, @session_id, @group, @ip, @belongs, @date_in)
|
|
end
|
|
close groups_ips_cursor
|
|
deallocate groups_ips_cursor
|
|
|
|
end
|
|
go
|
|
|
|
if object_id(N'dbo.groups_users_trigger_update', N'TR') is not null drop trigger dbo.groups_users_trigger_update
|
|
go
|
|
create trigger dbo.groups_users_trigger_update on dbo.GroupsUsers after insert, update as begin
|
|
|
|
declare @database varchar(64)
|
|
declare @procedure varchar(64)
|
|
declare @procedure_id integer
|
|
declare @session integer
|
|
declare @id integer
|
|
declare @group integer
|
|
declare @user integer
|
|
declare @belongs bit
|
|
declare @date_in datetime
|
|
declare groups_users_cursor cursor local for (
|
|
select id, [group], [user], belongs, date_in from inserted
|
|
)
|
|
|
|
set nocount on
|
|
|
|
execute dbo.sql_get @database output, @procedure output, @session output
|
|
execute dbo.procedure_get @database, @procedure, @procedure_id output
|
|
|
|
open groups_users_cursor
|
|
while 1 = 1 begin
|
|
fetch next from groups_users_cursor into @id, @procedure, @session, @group, @user, @belongs, @date_in
|
|
if @@fetch_status != 0
|
|
break
|
|
insert into dbo.GroupsUsersData(entity, [procedure], [session], [group], [user], belongs, date_in) values
|
|
(@id, @procedure, @session, @group, @user, @belongs, @date_in)
|
|
update dbo.GroupsUsers set data_id = scope_identity() where id = @id
|
|
end
|
|
close groups_users_cursor
|
|
deallocate groups_users_cursor
|
|
|
|
end
|
|
go
|
|
|
|
execute dbo.groups_tables_fill
|
|
go
|
|
|
|
if object_id(N'dbo.IpsView', N'V') is not null drop view dbo.IpsView
|
|
go
|
|
create view dbo.IpsView as select
|
|
ips.id as id,
|
|
ips.[ip] as [ip],
|
|
ips.date_in as date_in
|
|
from dbo.Ips ips
|
|
where ips.date_out is null
|
|
go
|
|
|
|
if object_id(N'dbo.UsersView', N'V') is not null drop view dbo.UsersView
|
|
go
|
|
create view dbo.UsersView as select
|
|
users.id as id,
|
|
users.nick as nick,
|
|
users.date_in as date_in
|
|
from dbo.Users users
|
|
where users.date_out is null
|
|
go
|
|
|
|
if object_id(N'dbo.GroupsView', N'V') is not null drop view dbo.GroupsView
|
|
go
|
|
create view dbo.GroupsView as select
|
|
groups.id as id,
|
|
groups.name as [name],
|
|
groups.description as [description],
|
|
groups.date_in as date_in
|
|
from dbo.Groups groups
|
|
where groups.date_out is null
|
|
go
|
|
|
|
if object_id(N'dbo.GroupsIpsView', N'V') is not null drop view dbo.GroupsIpsView
|
|
go
|
|
create view dbo.GroupsIpsView as select
|
|
groups_ips.id as id,
|
|
groups.id as group_id,
|
|
groups.[name] as [group],
|
|
ips.id as ip_id,
|
|
ips.[ip] as [ip],
|
|
isnull(groups_ips.belongs, 0) as belongs,
|
|
groups_ips.date_in as date_in
|
|
from dbo.GroupsViews groups
|
|
join dbo.IpsViews ips on 1 = 1
|
|
left join dbo.GroupsIps groups_ips on
|
|
groups_ips.[group] = groups.id
|
|
groups_ips.[ip] = ips.id
|
|
go
|
|
|
|
if object_id(N'dbo.GroupsUsersView', N'V') is not null drop view dbo.GroupsUsersView
|
|
go
|
|
create view dbo.GroupsUsersView as select
|
|
groups_users.id as id,
|
|
groups.id as group_id,
|
|
groups.[name] as [group],
|
|
users.id as user_id,
|
|
users.nick as [user],
|
|
isnull(groups_users.belongs, 0) as belongs,
|
|
groups_users.date_in as date_in
|
|
from dbo.GroupsViews groups
|
|
join dbo.UsersViews users on 1 = 1
|
|
left join dbo.GroupsUsers groups_users on
|
|
groups_users.[group] = groups.id
|
|
groups_users.[user] = users.id
|
|
go |