> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fixr.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Modelo Físico

> Estrutura de armazenamento físico, tipos de dados, índices e otimizações.

<Tabs>
  <Tab title="1. Criação das tabelas">
    ```sql Tabela "Clientes" theme={null}
    CREATE TABLE clientes (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128) NOT NULL,
        email varchar(128),
        cpf varchar(11) UNIQUE NOT NULL,
        telefone varchar(11),
        id_empresa int NOT NULL
    );
    ```

    ```sql Tabela "Atendimentos" theme={null}
    CREATE TABLE atendimentos (
        id int PRIMARY KEY AUTO_INCREMENT,
        descricao varchar(1024),
        id_cliente int NOT NULL,
        id_funcionario int NOT NULL,
        id_empresa int NOT NULL
    );
    ```

    ```sql Tabela "Funcionarios" theme={null}
    CREATE TABLE funcionarios (
        id int PRIMARY KEY AUTO_INCREMENT,
        cpf varchar(11) UNIQUE NOT NULL,
        nome varchar(128) NOT NULL,
        telefone varchar(11),
        id_empresa int NOT NULL,
        id_cargo int NOT NULL,
        id_usuario int
    );
    ```

    ```sql Tabela "OrdensServico" theme={null}
    CREATE TABLE ordens_servico (
        id int PRIMARY KEY AUTO_INCREMENT,
        data_abertura date,
        data_conclusao date,
        numero_serie varchar(256),
        id_atendimento int NOT NULL,
        id_responsavel int NOT NULL,
        id_criador int NOT NULL,
        id_modelo int,
        id_empresa int,
        id_categoria int
    );
    ```

    ```sql Tabela "Servicos" theme={null}
    CREATE TABLE servicos (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128),
        descricao varchar(256),
        valor decimal(15,2),
        id_empresa int NOT NULL
    );
    ```

    ```sql Tabela "PecaServico" theme={null}
    CREATE TABLE peca_servico (
        id int PRIMARY KEY AUTO_INCREMENT,
        id_servico int,
        id_peca int,
        quantidade int
    );
    ```

    ```sql Tabela "ServicoOs" theme={null}
    CREATE TABLE servico_os (
        id int PRIMARY KEY AUTO_INCREMENT,
        id_os int,
        id_servico int
    );
    ```

    ```sql Tabela "PecaOs" theme={null}
    CREATE TABLE peca_os (
        id int PRIMARY KEY AUTO_INCREMENT,
        id_os int,
        id_peca int,
        quantidade int
    );
    ```

    ```sql Tabela "Empresa" theme={null}
    CREATE TABLE empresa (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128),
        descricao varchar(256),
        endereco varchar(256),
        cnpj varchar(14) UNIQUE NOT NULL,
        margem_lucro float DEFAULT 1
    );
    ```

    ```sql Tabela "Usuarios" theme={null}
    CREATE TABLE usuarios (
        id int PRIMARY KEY AUTO_INCREMENT,
        email varchar(256),
        passwordHash varchar(512)
    );
    ```

    ```sql Tabela "Cargos" theme={null}
    CREATE TABLE cargos (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128)
    );
    ```

    ```sql Tabela "Pecas" theme={null}
    CREATE TABLE pecas (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128),
        valor decimal(15,2),
        quantidade_unitaria varchar(128),
        ean13 varchar(13),
        id_modelo int,
        id_empresa int
    );
    ```

    ```sql Tabela "PedidoCompra" theme={null}
    CREATE TABLE pedido_compra (
        id int PRIMARY KEY AUTO_INCREMENT,
        id_fornecedor int,
        id_empresa int
    );
    ```

    ```sql Tabela "PecaPedidoCompra" theme={null}
    CREATE TABLE peca_pedido_compra (
        id int PRIMARY KEY AUTO_INCREMENT,
        id_pedido_compra int,
        id_peca int,
        quantidade int
    );
    ```

    ```sql Tabela "Fornecedores" theme={null}
    CREATE TABLE fornecedores (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128),
        cnpj varchar(14) UNIQUE NOT NULL,
        endereco varchar(256),
        telefone varchar(11),
        id_empresa int
    );
    ```

    ```sql Tabela "Estoques" theme={null}
    CREATE TABLE estoques (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128),
        id_empresa int
    );
    ```

    ```sql Tabela "PecaEstocada" theme={null}
    CREATE TABLE peca_estocada (
        id int PRIMARY KEY AUTO_INCREMENT,
        id_peca int,
        id_estoque int,
        quantidade int,
        em_transito boolean,
        id_tecnico int
    );
    ```

    ```sql Tabela "Orcamentos" theme={null}
    CREATE TABLE orcamentos (
        id int PRIMARY KEY AUTO_INCREMENT,
        data datetime,
        id_os int,
        id_empresa int,
        valor decimal(15,2)
    );
    ```

    ```sql Tabela "ItemOrcamento" theme={null}
    CREATE TABLE item_orcamento (
        id int PRIMARY KEY AUTO_INCREMENT,
        id_orcamento int NOT NULL,
        nome varchar(128),
        descricao varchar(256),
        tipo varchar(128),
        quantidade int,
        valor_unitario decimal(15,2),
        valor_total decimal(15,2)
    );
    ```

    ```sql Tabela "Categoria" theme={null}
    CREATE TABLE categoria (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128)
    );
    ```

    ```sql Tabela "Modelos" theme={null}
    CREATE TABLE modelos (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128),
        id_categoria int,
        id_empresa int
    );
    ```

    ```sql Tabela "Status" theme={null}
    CREATE TABLE status (
        id int PRIMARY KEY AUTO_INCREMENT,
        nome varchar(128) NOT NULL
    );
    ```

    ```sql Tabela "StatusOs" theme={null}
    CREATE TABLE status_os (
        id int PRIMARY KEY AUTO_INCREMENT,
        data datetime,
        observacao varchar(512),
        id_os int,
        id_status int
    );
    ```
  </Tab>

  <Tab title="2. Adicionando chaves estrangeiras">
    ```sql Chaves estrangeiras theme={null}
    -- Tabela: clientes
    ALTER TABLE clientes ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);

    -- Tabela: atendimentos
    ALTER TABLE atendimentos ADD FOREIGN KEY (id_cliente) REFERENCES clientes (id);
    ALTER TABLE atendimentos ADD FOREIGN KEY (id_funcionario) REFERENCES funcionarios (id);
    ALTER TABLE atendimentos ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);

    -- Tabela: funcionarios
    ALTER TABLE funcionarios ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);
    ALTER TABLE funcionarios ADD FOREIGN KEY (id_cargo) REFERENCES cargos (id);
    ALTER TABLE funcionarios ADD FOREIGN KEY (id_usuario) REFERENCES usuarios (id);

    -- Tabela: ordens_servico
    ALTER TABLE ordens_servico ADD FOREIGN KEY (id_atendimento) REFERENCES atendimentos (id);
    ALTER TABLE ordens_servico ADD FOREIGN KEY (id_responsavel) REFERENCES funcionarios (id);
    ALTER TABLE ordens_servico ADD FOREIGN KEY (id_criador) REFERENCES funcionarios (id);
    ALTER TABLE ordens_servico ADD FOREIGN KEY (id_modelo) REFERENCES modelos (id);
    ALTER TABLE ordens_servico ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);
    ALTER TABLE ordens_servico ADD FOREIGN KEY (id_categoria) REFERENCES categoria (id);

    -- Tabela: servicos
    ALTER TABLE servicos ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);

    -- Tabela: peca_servico
    ALTER TABLE peca_servico ADD FOREIGN KEY (id_servico) REFERENCES servicos (id);
    ALTER TABLE peca_servico ADD FOREIGN KEY (id_peca) REFERENCES pecas (id);

    -- Tabela: servico_os
    ALTER TABLE servico_os ADD FOREIGN KEY (id_os) REFERENCES ordens_servico (id);
    ALTER TABLE servico_os ADD FOREIGN KEY (id_servico) REFERENCES servicos (id);

    -- Tabela: peca_os
    ALTER TABLE peca_os ADD FOREIGN KEY (id_os) REFERENCES ordens_servico (id);
    ALTER TABLE peca_os ADD FOREIGN KEY (id_peca) REFERENCES pecas (id);

    -- Tabela: pecas
    ALTER TABLE pecas ADD FOREIGN KEY (id_modelo) REFERENCES modelos (id);
    ALTER TABLE pecas ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);

    -- Tabela: pedido_compra
    ALTER TABLE pedido_compra ADD FOREIGN KEY (id_fornecedor) REFERENCES fornecedores (id);
    ALTER TABLE pedido_compra ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);

    -- Tabela: peca_pedido_compra
    ALTER TABLE peca_pedido_compra ADD FOREIGN KEY (id_pedido_compra) REFERENCES pedido_compra (id);
    ALTER TABLE peca_pedido_compra ADD FOREIGN KEY (id_peca) REFERENCES pecas (id);

    -- Tabela: fornecedores
    ALTER TABLE fornecedores ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);

    -- Tabela: estoques
    ALTER TABLE estoques ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);

    -- Tabela: peca_estocada
    ALTER TABLE peca_estocada ADD FOREIGN KEY (id_peca) REFERENCES pecas (id);
    ALTER TABLE peca_estocada ADD FOREIGN KEY (id_estoque) REFERENCES estoques (id);
    ALTER TABLE peca_estocada ADD FOREIGN KEY (id_tecnico) REFERENCES funcionarios (id);

    -- Tabela: orcamentos
    ALTER TABLE orcamentos ADD FOREIGN KEY (id_os) REFERENCES ordens_servico (id);
    ALTER TABLE orcamentos ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);

    -- Tabela: item_orcamento
    ALTER TABLE item_orcamento ADD FOREIGN KEY (id_orcamento) REFERENCES orcamentos (id);

    -- Tabela: modelos
    ALTER TABLE modelos ADD FOREIGN KEY (id_categoria) REFERENCES categoria (id);
    ALTER TABLE modelos ADD FOREIGN KEY (id_empresa) REFERENCES empresa (id);

    -- Tabela: status_os
    ALTER TABLE status_os ADD FOREIGN KEY (id_os) REFERENCES ordens_servico (id);
    ALTER TABLE status_os ADD FOREIGN KEY (id_status) REFERENCES status (id);
    ```
  </Tab>
</Tabs>
