Visão Geral da Modelagem
A modelagem de dados define como as informações do Sistema de Vendas serão armazenadas e relacionadas no banco de dados PostgreSQL. Seguimos estritamente o modelo fornecido no arquivo `script_vendas.sql`, que consiste nas cinco tabelas principais: `cliente`, `vendedor`, `pedido`, `produto` e `item_pedido`.
Diagrama Entidade-Relacionamento (Conceitual)
O diagrama ER abaixo representa visualmente as cinco entidades do sistema e seus relacionamentos principais, conforme o script:
+-----------+ 1 N +----------+ N 1 +------------+
| VENDEDOR |----------| PEDIDO |----------| CLIENTE |
+-----------+ +----------+ +------------+
| PK codigo | | PK num | | PK codigo |
| nome | | prazo | | nome |
| salario | | FK cli | | endereco |
| comissao | | FK vend | | ... |
+-----------+ +----+-----+ +------------+
| N
|
| 1
+----+-----+
| ITEM_PED |
+----------+
| PK num |
| PK prod |
| qtd |
+----+-----+
| 1
|
| N
+-----------+ +----+-----+
| PRODUTO |----------| ITEM_PED |
+-----------+ +----------+
| PK codigo |
| unidade |
| descricao |
| valor |
+-----------+
Nota: Este é um diagrama textual simplificado para ilustrar os relacionamentos principais (Vendedor faz Pedido, Cliente faz Pedido, Pedido contém Itens, Item se refere a Produto).
Descrição das Tabelas (Conforme `script_vendas.sql`)
A seguir, detalhamos cada uma das cinco tabelas do banco de dados PostgreSQL, seus campos e relacionamentos, exatamente como definido no script fornecido:
Armazena informações sobre os clientes.
create table cliente(
codigo_cliente integer not null unique,
nome_cliente varchar(40),
endereco varchar(50),
cidade varchar(30),
cep char(10),
uf char(2),
cnpj char(16),
ie char(20),
constraint pk_cliente primary key (codigo_cliente)
);
Campos:
- codigo_cliente: Identificador único do cliente (chave primária).
- nome_cliente: Nome do cliente.
- endereco: Endereço do cliente.
- cidade: Cidade do cliente.
- cep: CEP do cliente.
- uf: Unidade Federativa (Estado) do cliente.
- cnpj: CNPJ do cliente.
- ie: Inscrição Estadual do cliente.
Relacionamentos:
- Um cliente pode ter vários pedidos (1:N com pedido).
Armazena informações sobre os vendedores.
create table vendedor(
codigo_vendedor integer not null unique,
nome_vendedor varchar(40),
salario_fixo numeric(10,2),
faixa_comissao char(1),
constraint pk_vendedor primary key(codigo_vendedor)
);
Campos:
- codigo_vendedor: Identificador único do vendedor (chave primária).
- nome_vendedor: Nome do vendedor.
- salario_fixo: Salário base do vendedor.
- faixa_comissao: Faixa de comissão do vendedor (Ex: A, B, C).
Relacionamentos:
- Um vendedor pode registrar vários pedidos (1:N com pedido).
Armazena informações sobre os pedidos realizados.
create table pedido(
num_pedido integer not null unique,
prazo_entrega smallint not null,
codigo_cliente integer not null,
codigo_vendedor integer not null,
constraint pk_pedido primary key (num_pedido),
constraint fk_pedido_cli foreign key (codigo_cliente) references cliente,
constraint fk_pedido_ven foreign key (codigo_vendedor) references vendedor
);
Campos:
- num_pedido: Número identificador único do pedido (chave primária).
- prazo_entrega: Prazo de entrega em dias.
- codigo_cliente: Referência ao cliente que fez o pedido (chave estrangeira).
- codigo_vendedor: Referência ao vendedor que registrou o pedido (chave estrangeira).
Relacionamentos:
- Um pedido pertence a um cliente (N:1 com cliente).
- Um pedido é registrado por um vendedor (N:1 com vendedor).
- Um pedido pode conter vários itens (1:N com item_pedido).
Armazena informações sobre os produtos.
create table produto(
codigo_produto integer not null unique,
unidade char(3),
descricao_produto varchar(30),
val_unit numeric(10,2),
constraint pk_produto primary key (codigo_produto)
);
Campos:
- codigo_produto: Identificador único do produto (chave primária).
- unidade: Unidade de medida do produto (Ex: Kg, Bar, L, M).
- descricao_produto: Descrição do produto.
- val_unit: Valor unitário do produto.
Relacionamentos:
- Um produto pode estar em vários itens de pedido (1:N com item_pedido).
Tabela associativa que detalha os produtos contidos em cada pedido.
create table item_pedido(
num_pedido integer not null,
codigo_produto integer not null,
quantidade numeric(10,2),
constraint pk_item_pedido primary key (num_pedido,codigo_produto),
constraint fk_item_pedido_ped foreign key (num_pedido) references pedido,
constraint fk_item_pedido_pro foreign key (codigo_produto) references produto
);
Campos:
- num_pedido: Referência ao pedido (parte da chave primária composta, chave estrangeira).
- codigo_produto: Referência ao produto (parte da chave primária composta, chave estrangeira).
- quantidade: Quantidade do produto neste item do pedido.
Relacionamentos:
- Um item de pedido pertence a um pedido (N:1 com pedido).
- Um item de pedido refere-se a um produto (N:1 com produto).
Próximos Passos
Com a modelagem definida, podemos avançar para a definição da arquitetura da aplicação.