· 2 years ago · May 10, 2023, 06:50 PM
1-- ESSE SCRIPT ESTÁ FUNFANDO
2
3USE tempdb;
4
5GO
6
7DECLARE @SQL nvarchar(1000);
8IF EXISTS (SELECT 1 FROM sys.databases WHERE [name] = N'laqus')
9BEGIN
10 SET @SQL = N'USE [laqus];
11
12 ALTER DATABASE laqus SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
13 USE [tempdb];
14
15 DROP DATABASE laqus;';
16 EXEC (@SQL);
17END;
18
19GO
20
21CREATE DATABASE laqus;
22
23GO
24
25USE laqus;
26
27GO
28
29
30SET XACT_ABORT ON
31
32BEGIN TRANSACTION QUICKDBD
33
34-- Todos os participantes que foram custodiantes e/ou emissores na data de referência.
35CREATE TABLE [participante] (
36 -- Identificador Sequencial da tabela
37 [id_participante] INT IDENTITY(1,1) NOT NULL ,
38 [data_carga] DATETIME NOT NULL CONSTRAINT [DF_participante_data_carga] DEFAULT (getutcdate()),
39 -- ?? PEDINDO INTEGRIDADE AO CRIAR
40 [id] VARCHAR(100) UNIQUE NOT NULL ,
41 -- pode ser um cod_participante? ter cnpj ou cpf? FK >- participante.data_alteracao
42 [cnpj] numeric(14,0) NOT NULL ,
43 -- pode ser nome participante?
44 [razao_social] VARCHAR(200) NOT NULL ,
45 [data_inclusao] DATE NOT NULL ,
46 [data_alteracao] DATE NOT NULL ,
47 [funcao] VARCHAR(200) NOT NULL ,
48 CONSTRAINT [PK_participante] PRIMARY KEY CLUSTERED (
49 [id] ASC,[cnpj] ASC
50 )
51)
52
53-- ALTER TABLE dbo.participante
54-- ADD CONSTRAINT uk_participante UNIQUE (id, cnpj, data_alteracao)
55-- Contas de investidores. Todas as contas com situação não encerrada em algum momento durante a data de referência. Este tabela tem registros que mesclam CPF e CNPJ.
56CREATE TABLE [investidor_cpf] (
57 -- Identificador Sequencial da tabela
58 [id_investidor_cpf] INT IDENTITY(1,1) NOT NULL ,
59 [data_carga] DATETIME NOT NULL CONSTRAINT [DF_investidor_cpf_data_carga] DEFAULT (getutcdate()),
60 [tipo_investidor] SMALLINT NOT NULL CONSTRAINT [DF_investidor_cpf_tipo_investidor] DEFAULT (1),
61 [cpf] INT NOT NULL ,
62 [nome_investidor] VARCHAR(200) NOT NULL ,
63 [id_custodiante] VARCHAR(100) NOT NULL ,
64 -- ?? PK ou UQ
65 [numero_conta] VARCHAR(100) NOT NULL ,
66 [ocupacao] VARCHAR(100) NOT NULL ,
67 [pessoa_politicamente_exposta] BIT NOT NULL ,
68 [pessoa_vinculada] BIT NOT NULL ,
69 [suspenso] BIT NOT NULL ,
70 [logradouro] VARCHAR(100) NOT NULL ,
71 [numero] SMALLINT NOT NULL ,
72 [bairro] VARCHAR(100) NOT NULL ,
73 [cep] INT NOT NULL ,
74 [cidade] VARCHAR(100) NOT NULL ,
75 [complemento] VARCHAR(100) NOT NULL ,
76 [uf] CHAR(2) NOT NULL ,
77 [data_atualizacao] DATE NOT NULL ,
78 [data_cadastro] DATE NOT NULL ,
79 [data_nascimento] DATE NOT NULL ,
80 [email] VARCHAR(100) NOT NULL ,
81 [telefones] VARCHAR(200) NOT NULL ,
82 CONSTRAINT [PK_investidor_cpf] PRIMARY KEY CLUSTERED (
83 [id_custodiante] ASC,[numero_conta] ASC
84 )
85)
86
87-- Contas de investidores. Todas as contas com situação não encerrada em algum momento durante a data de referência. Este tabela tem registros que mesclam CPF e CNPJ.
88CREATE TABLE [investidor_cnpj] (
89 -- Identificador Sequencial da tabela
90 [id_investidor_cpnj] INT IDENTITY(1,1) NOT NULL ,
91 [data_carga] DATETIME NOT NULL CONSTRAINT [DF_investidor_cnpj_data_carga] DEFAULT (getutcdate()),
92 [tipo_investidor] SMALLINT NOT NULL CONSTRAINT [DF_investidor_cnpj_tipo_investidor] DEFAULT (2),
93 [cnpj] INT NOT NULL ,
94 [razao_social] VARCHAR(200) NOT NULL ,
95 [id_custodiante] VARCHAR(100) NOT NULL ,
96 -- PK ou UQ
97 [numero_conta] VARCHAR(100) NOT NULL ,
98 [atividade_principal] VARCHAR(100) NOT NULL ,
99 [pessoa_vinculada] BIT NOT NULL ,
100 [suspenso] BIT NOT NULL ,
101 [logradouro] VARCHAR(100) NOT NULL ,
102 [numero] SMALLINT NOT NULL ,
103 [bairro] VARCHAR(100) NOT NULL ,
104 [cep] INT NOT NULL ,
105 [cidade] VARCHAR(100) NOT NULL ,
106 [complemento] VARCHAR(100) NOT NULL ,
107 [uf] CHAR(2) NOT NULL ,
108 [data_atualizacao] DATE NOT NULL ,
109 [data_cadastro] DATE NOT NULL ,
110 [data_constituicao] DATE NOT NULL ,
111 [email] VARCHAR(100) NOT NULL ,
112 [telefones] VARCHAR(200) NOT NULL ,
113 CONSTRAINT [PK_investidor_cnpj] PRIMARY KEY CLUSTERED (
114 [cnpj] ASC,[id_custodiante] ASC
115 ),
116 CONSTRAINT [UK_investidor_cnpj_numero_conta] UNIQUE (
117 [numero_conta]
118 )
119)
120
121-- ALTER TABLE dbo.conta_investidor
122-- ADD CONSTRAINT uk_conta_investidor UNIQUE (cpf_cnpj, data_atualizacao)
123-- Todos os instrumentos referenciados em Posicoes ou Movimentacoes na data de referência.
124CREATE TABLE [instrumento_financeiro] (
125 -- Identificador Sequencial da tabela
126 [id_instrumento_financeiro] INT IDENTITY(1,1) NOT NULL ,
127 [data_carga] DATETIME NOT NULL CONSTRAINT [DF_instrumento_financeiro_data_carga] DEFAULT (getutcdate()),
128 [id] VARCHAR(100) UNIQUE NOT NULL ,
129 [id_emissor] VARCHAR(100) NOT NULL ,
130 [numero_emissao] INT NOT NULL ,
131 [numero_serie] VARCHAR(100) NOT NULL ,
132 -- é o melhor tipo de dados?
133 [preco_emissao] DECIMAL(14,8) NOT NULL ,
134 [quantidade_depositada] INT NOT NULL ,
135 [quantidade_emitida] INT NOT NULL ,
136 [tipo_instrumento_financeiro] VARCHAR(100) NOT NULL ,
137 [distribuicao_publica] BIT NOT NULL ,
138 [data_atualizacao] DATE NOT NULL ,
139 [data_emissao] DATE NOT NULL ,
140 [data_vencimento] DATE NOT NULL ,
141 CONSTRAINT [PK_instrumento_financeiro] PRIMARY KEY CLUSTERED (
142 [id_instrumento_financeiro] ASC
143 ),
144 CONSTRAINT [UK_instrumento_financeiro_id_emissor] UNIQUE (
145 [id_emissor]
146 )
147)
148
149-- ALTER TABLE dbo.instrumento_financeiro
150-- ADD CONSTRAINT uk_instrumento_financeiro UNIQUE (id, data_atualizacao)
151-- REGRA
152-- quantidadeAutorizada >= quantidade(.*)
153-- Posições em depósitos de instrumentos financeiros
154CREATE TABLE [posicao_instrumento] (
155 -- Identificador Sequencial da tabela
156 [id_posicao_instrumento] INT IDENTITY(1,1) NOT NULL ,
157 [data_carga] DATETIME NOT NULL CONSTRAINT [DF_posicao_instrumento_data_carga] DEFAULT (getutcdate()),
158 [id_instrumento] VARCHAR(100) NOT NULL ,
159 [numero_conta] VARCHAR(100) NOT NULL ,
160 -- é o melhor tipo de dados?
161 [quantidade_livre] INT NOT NULL ,
162 -- é o melhor tipo de dados?
163 [quantidade_total] INT NOT NULL ,
164 CONSTRAINT [PK_posicao_instrumento] PRIMARY KEY CLUSTERED (
165 [id_instrumento] ASC,[numero_conta] ASC
166 )
167)
168
169-- ALTER TABLE dbo.posicao_instrumento
170-- ADD CONSTRAINT uk_posicao_instrumento UNIQUE (numero_conta, id_instrumento)
171-- REGRA
172-- quantidadeTotal >= quantidadeLivre
173-- Movimentações de depósitos de instrumentos financeiros
174CREATE TABLE [movimentacao] (
175 -- Identificador Sequencial da tabela
176 [id_movimentacao] INT IDENTITY(1,1) NOT NULL ,
177 [data_carga] DATETIME NOT NULL CONSTRAINT [DF_movimentacao_data_carga] DEFAULT (getutcdate()),
178 [hora] TIME NOT NULL ,
179 [id] INT NOT NULL ,
180 [id_instrumento] VARCHAR(100) NOT NULL ,
181 [motivo] VARCHAR(200) NOT NULL ,
182 -- UNIQUE JUNTO COM A COLUNA DE BAIXO FK >- investidor_cpf.numero_conta
183 [numero_conta_cedente] VARCHAR(100) NOT NULL ,
184 [numero_conta_cessionaria] VARCHAR(100) NOT NULL ,
185 [quantidade] INT NOT NULL ,
186 CONSTRAINT [PK_movimentacao] PRIMARY KEY CLUSTERED (
187 [numero_conta_cedente] ASC,[numero_conta_cessionaria] ASC
188 ),
189 CONSTRAINT [UK_movimentacao_numero_conta_cedente] UNIQUE (
190 [numero_conta_cedente]
191 ),
192 CONSTRAINT [UK_movimentacao_numero_conta_cessionaria] UNIQUE (
193 [numero_conta_cessionaria]
194 )
195)
196
197/*
198ALTER TABLE [investidor_cpf] WITH CHECK ADD CONSTRAINT [FK_investidor_cpf_id_custodiante] FOREIGN KEY([id_custodiante])
199REFERENCES [participante] ([id])
200
201ALTER TABLE [investidor_cpf] CHECK CONSTRAINT [FK_investidor_cpf_id_custodiante]
202
203ALTER TABLE [investidor_cnpj] WITH CHECK ADD CONSTRAINT [FK_investidor_cnpj_id_custodiante] FOREIGN KEY([id_custodiante])
204REFERENCES [participante] ([id])
205
206ALTER TABLE [investidor_cnpj] CHECK CONSTRAINT [FK_investidor_cnpj_id_custodiante]
207
208ALTER TABLE [instrumento_financeiro] WITH CHECK ADD CONSTRAINT [FK_instrumento_financeiro_id_emissor] FOREIGN KEY([id_emissor])
209REFERENCES [participante] ([id])
210
211ALTER TABLE [instrumento_financeiro] CHECK CONSTRAINT [FK_instrumento_financeiro_id_emissor]
212
213ALTER TABLE [posicao_instrumento] WITH CHECK ADD CONSTRAINT [FK_posicao_instrumento_id_instrumento] FOREIGN KEY([id_instrumento])
214REFERENCES [instrumento_financeiro] ([id])
215
216ALTER TABLE [posicao_instrumento] CHECK CONSTRAINT [FK_posicao_instrumento_id_instrumento]
217
218ALTER TABLE [posicao_instrumento] WITH CHECK ADD CONSTRAINT [FK_posicao_instrumento_numero_conta] FOREIGN KEY([numero_conta])
219REFERENCES [investidor_cnpj] ([numero_conta])
220
221ALTER TABLE [posicao_instrumento] CHECK CONSTRAINT [FK_posicao_instrumento_numero_conta]
222
223ALTER TABLE [movimentacao] WITH CHECK ADD CONSTRAINT [FK_movimentacao_id_instrumento] FOREIGN KEY([id_instrumento])
224REFERENCES [instrumento_financeiro] ([id])
225
226ALTER TABLE [movimentacao] CHECK CONSTRAINT [FK_movimentacao_id_instrumento]
227
228ALTER TABLE [movimentacao] WITH CHECK ADD CONSTRAINT [FK_movimentacao_numero_conta_cessionaria] FOREIGN KEY([numero_conta_cessionaria])
229REFERENCES [investidor_cpf] ([numero_conta])
230
231ALTER TABLE [movimentacao] CHECK CONSTRAINT [FK_movimentacao_numero_conta_cessionaria]
232*/
233COMMIT TRANSACTION QUICKDBD