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:

Tabela: cliente

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).
Tabela: vendedor

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).
Tabela: 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).
Tabela: produto

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: 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.