· 2 years ago · May 06, 2023, 03:40 AM
1-- Exported from QuickDBD: https://www.quickdatabasediagrams.com/
2-- Link to schema: https://app.quickdatabasediagrams.com/#/d/U9egaW
3-- NOTE! If you have used non-SQL datatypes in your design, you will have to change these here.
4
5-- Esquema de banco de dados da laqus
6-- Versão 1 de 2022-08-29
7-- Exceções às regras de integridade referencial
8-- Como nesta versão inicial do schema não foi previsto mecanismo para representar a criação ou eliminação de quantidades de instrumentos, aceita-se que a Laqus envie movimentações que utilizem conta fictícia do instrumento, inexistente no arquivo de investidores.
9
10
11USE tempdb;
12
13GO
14
15DECLARE @SQL nvarchar(1000);
16IF EXISTS (SELECT 1 FROM sys.databases WHERE [name] = N'laqus')
17BEGIN
18 SET @SQL = N'USE [laqus];
19
20 ALTER DATABASE laqus SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
21 USE [tempdb];
22
23 DROP DATABASE laqus;';
24 EXEC (@SQL);
25END;
26
27GO
28
29CREATE DATABASE laqus;
30
31GO
32
33USE laqus;
34
35GO
36
37SET XACT_ABORT ON
38
39BEGIN TRANSACTION QUICKDBD
40
41-- Todos os participantes que foram custodiantes e/ou emissores na data de referência.
42CREATE TABLE [participante] (
43 -- Identificador Sequencial da tabela
44 [id_participante] INT IDENTITY(1,1) NOT NULL ,
45 [data_carga] dateTime NOT NULL CONSTRAINT [DF_participante_data_carga] DEFAULT (getutcdate()),
46 [id] VARCHAR(50) NOT NULL ,
47 -- pode ser um cod_participante? ter cnpj ou cpf? FK >- participante.data_alteracao
48 [cnpj] INT NOT NULL ,
49 -- pode ser nome participante?
50 [razao_social] VARCHAR(255) NOT NULL ,
51 [data_inclusao] dateTime NOT NULL ,
52 [data_alteracao] dateTime NOT NULL ,
53 [funcoes] VARCHAR(MAX) NOT NULL ,
54 CONSTRAINT [PK_participante] PRIMARY KEY CLUSTERED (
55 [id_participante] ASC
56 )
57)
58
59GO
60
61ALTER TABLE dbo.participante
62 ADD CONSTRAINT uk_participante UNIQUE (id, cnpj, data_alteracao)
63
64GO
65-- 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.
66CREATE TABLE [conta_investidor] (
67 -- Identificador Sequencial da tabela
68 [id_conta_investidor] INT IDENTITY(1,1) NOT NULL ,
69 [data_carga] dateTime NOT NULL CONSTRAINT [DF_conta_investidor_data_carga] DEFAULT (getutcdate()),
70 -- Campo exclusivo de CNPJ
71 [atividade_principal] VARCHAR(200) NOT NULL ,
72 [bairro] VARCHAR(200) NOT NULL ,
73 [cep] INT NOT NULL ,
74 [cidade] VARCHAR(100) NOT NULL ,
75 [complemento] VARCHAR(200) NOT NULL ,
76 -- Campo que mescla CNPJ e CPF
77 [cpf_cnpj] INT NOT NULL ,
78 [data_atualizacao] date NOT NULL ,
79 -- Campo que mescla CNPJ e CPF
80 [data_cadastro] date NOT NULL ,
81 -- Campo que mescla CNPJ e CPF
82 [data_nascimento_constituicao] date NOT NULL ,
83 [email] VARCHAR(100) NOT NULL ,
84 [id_custodiante] VARCHAR(50) UNIQUE NOT NULL ,
85 [logradouro] VARCHAR(200) NOT NULL ,
86 [nome_razao_social] VARCHAR(100) NOT NULL ,
87 [numero] INT NOT NULL ,
88 [numero_conta] VARCHAR(100) UNIQUE NOT NULL ,
89 [ocupacao] VARCHAR(100) NOT NULL ,
90 [pesso_politicamente_exposta] BIT NOT NULL ,
91 [pessoa_vinculada] BIT NOT NULL ,
92 [suspenso] BIT NOT NULL ,
93 [telefones] VARCHAR(200) NOT NULL ,
94 [uf] CHAR(2) NOT NULL ,
95 CONSTRAINT [PK_conta_investidor] PRIMARY KEY CLUSTERED (
96 [id_conta_investidor] ASC
97 )
98)
99
100GO
101
102ALTER TABLE dbo.conta_investidor
103 ADD CONSTRAINT uk_conta_investidor_all UNIQUE (cpf_cnpj, data_atualizacao)
104
105GO
106
107-- Todos os instrumentos referenciados em Posicoes ou Movimentacoes na data de referência.
108CREATE TABLE [instrumento_financeiro] (
109 -- Identificador Sequencial da tabela
110 [id_instrumento_financeiro] INT IDENTITY(1,1) NOT NULL ,
111 [data_carga] dateTime NOT NULL CONSTRAINT [DF_instrumento_financeiro_data_carga] DEFAULT (getutcdate()),
112 [data_atualizacao] date NOT NULL ,
113 [data_emissao] date NOT NULL ,
114 [data_vencimento] date NOT NULL ,
115 [distribuicao_publica] BIT NOT NULL ,
116 [id] VARCHAR(50) UNIQUE NOT NULL ,
117 [id_emissor] VARCHAR(50) NOT NULL ,
118 [numero_emissao] INT NOT NULL ,
119 [numero_serie] VARCHAR(100) NOT NULL ,
120 -- é o melhor tipo de dados?
121 [preco_emissao] DECIMAL(14,8) NOT NULL ,
122 -- ?
123 [quantidade_depositada] INT NOT NULL ,
124 -- ?
125 [quantidade_emitida] INT NOT NULL ,
126 [tipo] BIT NOT NULL ,
127 CONSTRAINT [PK_instrumento_financeiro] PRIMARY KEY CLUSTERED (
128 [id_instrumento_financeiro] ASC
129 )
130)
131
132GO
133
134ALTER TABLE dbo.instrumento_financeiro
135 ADD CONSTRAINT uk_instrumento_financeiro UNIQUE (id, data_atualizacao)
136
137GO
138
139-- REGRA
140-- quantidadeAutorizada >= quantidade(.*)
141-- Posições em depósitos de instrumentos financeiros
142CREATE TABLE [posicao_instrumento] (
143 -- Identificador Sequencial da tabela
144 [id_posicao_instrumento] INT IDENTITY(1,1) NOT NULL ,
145 [data_carga] dateTime NOT NULL CONSTRAINT [DF_posicao_instrumento_data_carga] DEFAULT (getutcdate()),
146 [id_instrumento] VARCHAR(50) NOT NULL ,
147 [numero_conta] VARCHAR(100) NOT NULL ,
148 -- é o melhor tipo de dados?
149 [quantidade_livre] INT NOT NULL ,
150 -- é o melhor tipo de dados?
151 [quantidade_total] INT NOT NULL ,
152 CONSTRAINT [PK_posicao_instrumento] PRIMARY KEY CLUSTERED (
153 [id_posicao_instrumento] ASC
154 )
155)
156
157GO
158
159ALTER TABLE dbo.posicao_instrumento
160 ADD CONSTRAINT uk_posicao_instrumento UNIQUE (numero_conta, id_instrumento)
161
162GO
163
164-- REGRA
165-- quantidadeTotal >= quantidadeLivre
166-- Movimentações de depósitos de instrumentos financeiros
167CREATE TABLE [movimentacao] (
168 -- Identificador Sequencial da tabela
169 [id_movimentacao] INT IDENTITY(1,1) NOT NULL ,
170 [data_carga] dateTime NOT NULL CONSTRAINT [DF_movimentacao_data_carga] DEFAULT (getutcdate()),
171 [hora] TIME NOT NULL ,
172 [id] INT NOT NULL ,
173 [id_Instrumento] VARCHAR(50) NOT NULL ,
174 [motivo] VARCHAR(200) NOT NULL ,
175 [numero_conta_cedente] VARCHAR(100) NOT NULL ,
176 [numero_conta_cessionaria] VARCHAR(100) NOT NULL ,
177 [quantidade] INT NOT NULL ,
178 CONSTRAINT [PK_movimentacao] PRIMARY KEY CLUSTERED (
179 [id_movimentacao] ASC
180 ),
181 CONSTRAINT [UK_movimentacao_id] UNIQUE (
182 [id]
183 )
184)
185
186GO
187
188ALTER TABLE [conta_investidor] WITH CHECK ADD CONSTRAINT [FK_conta_investidor_id_custodiante] FOREIGN KEY([id_custodiante])
189REFERENCES [participante] ([id])
190
191ALTER TABLE [conta_investidor] CHECK CONSTRAINT [FK_conta_investidor_id_custodiante]
192
193ALTER TABLE [instrumento_financeiro] WITH CHECK ADD CONSTRAINT [FK_instrumento_financeiro_id_emissor] FOREIGN KEY([id_emissor])
194REFERENCES [participante] ([id])
195
196ALTER TABLE [instrumento_financeiro] CHECK CONSTRAINT [FK_instrumento_financeiro_id_emissor]
197
198-- ???
199ALTER TABLE [posicao_instrumento] WITH CHECK ADD CONSTRAINT [FK_posicao_instrumento_id_instrumento] FOREIGN KEY([id_instrumento])
200REFERENCES [instrumento_financeiro] ([id])
201
202ALTER TABLE [posicao_instrumento] CHECK CONSTRAINT [FK_posicao_instrumento_id_instrumento]
203
204ALTER TABLE [posicao_instrumento] WITH CHECK ADD CONSTRAINT [FK_posicao_instrumento_numero_conta] FOREIGN KEY([numero_conta])
205REFERENCES [conta_investidor] ([numero_conta])
206
207ALTER TABLE [posicao_instrumento] CHECK CONSTRAINT [FK_posicao_instrumento_numero_conta]
208
209ALTER TABLE [movimentacao] WITH CHECK ADD CONSTRAINT [FK_movimentacao_id_Instrumento] FOREIGN KEY([id_Instrumento])
210REFERENCES [instrumento_financeiro] ([id])
211
212ALTER TABLE [movimentacao] CHECK CONSTRAINT [FK_movimentacao_id_Instrumento]
213
214ALTER TABLE [movimentacao] WITH CHECK ADD CONSTRAINT [FK_movimentacao_numero_conta_cedente] FOREIGN KEY([numero_conta_cedente])
215REFERENCES [conta_investidor] ([numero_conta])
216
217ALTER TABLE [movimentacao] CHECK CONSTRAINT [FK_movimentacao_numero_conta_cedente]
218
219ALTER TABLE [movimentacao] WITH CHECK ADD CONSTRAINT [FK_movimentacao_numero_conta_cessionaria] FOREIGN KEY([numero_conta_cessionaria])
220REFERENCES [conta_investidor] ([numero_conta])
221
222ALTER TABLE [movimentacao] CHECK CONSTRAINT [FK_movimentacao_numero_conta_cessionaria]
223
224COMMIT TRANSACTION QUICKDBD