Vou criar um exemplo completo de *Banco de dados MySQL** para um sistema simples de gerenciamento de uma biblioteca. Incluirei tabelas, relacionamentos, inserção de dados e consultas básicas.

 


---


### **1. Criação do Banco de Dados**

```sql

-- Cria o banco de dados

CREATE DATABASE IF NOT EXISTS Biblioteca;

USE Biblioteca;

```


---


### **2. Criação das Tabelas**


#### **Tabela `Usuarios`** (Armazena informações dos usuários)

```sql

CREATE TABLE IF NOT EXISTS Usuarios (

    id INT AUTO_INCREMENT PRIMARY KEY,

    nome VARCHAR(100) NOT NULL,

    email VARCHAR(100) UNIQUE NOT NULL,

    telefone VARCHAR(20),

    data_cadastro DATE DEFAULT (CURRENT_DATE)

);

```


#### **Tabela `Livros`** (Armazena informações dos livros)

```sql

CREATE TABLE IF NOT EXISTS Livros (

    id INT AUTO_INCREMENT PRIMARY KEY,

    titulo VARCHAR(200) NOT NULL,

    autor VARCHAR(100) NOT NULL,

    ano_publicacao INT,

    isbn VARCHAR(20) UNIQUE NOT NULL,

    disponivel BOOLEAN DEFAULT TRUE

);

```


#### **Tabela `Emprestimos`** (Registra empréstimos de livros)

```sql

CREATE TABLE IF NOT EXISTS Emprestimos (

    id INT AUTO_INCREMENT PRIMARY KEY,

    usuario_id INT NOT NULL,

    livro_id INT NOT NULL,

    data_emprestimo DATE DEFAULT (CURRENT_DATE),

    data_devolucao DATE,

    FOREIGN KEY (usuario_id) REFERENCES Usuarios(id),

    FOREIGN KEY (livro_id) REFERENCES Livros(id)

);

```


---


### **3. Inserção de Dados de Exemplo**


#### **Inserir usuários:**

```sql

INSERT INTO Usuarios (nome, email, telefone) 

VALUES 

    ('Ana Silva', 'ana@email.com', '(11) 9999-8888'),

    ('Carlos Souza', 'carlos@email.com', '(21) 7777-6666');

```


#### **Inserir livros:**

```sql

INSERT INTO Livros (titulo, autor, ano_publicacao, isbn) 

VALUES 

    ('Dom Casmurro', 'Machado de Assis', 1899, '978-85-1234-567-8'),

    ('1984', 'George Orwell', 1949, '978-85-4321-987-6');

```


#### **Registrar empréstimo:**

```sql

INSERT INTO Emprestimos (usuario_id, livro_id, data_devolucao) 

VALUES 

    (1, 1, DATE_ADD(CURRENT_DATE, INTERVAL 7 DAY)); -- Ana empresta "Dom Casmurro"

```


---


### **4. Consultas Básicas**


#### **Listar todos os livros disponíveis:**

```sql

SELECT titulo, autor FROM Livros WHERE disponivel = TRUE;

```


#### **Listar empréstimos ativos:**

```sql

SELECT 

    U.nome AS Usuario,

    L.titulo AS Livro,

    E.data_emprestimo,

    E.data_devolucao

FROM Emprestimos E

JOIN Usuarios U ON E.usuario_id = U.id

JOIN Livros L ON E.livro_id = L.id

WHERE E.data_devolucao > CURRENT_DATE;

```


---


### **5. Stored Procedures (Exemplo)**


#### **Procedure para realizar empréstimo:**

```sql

DELIMITER //

CREATE PROCEDURE RealizarEmprestimo(

    IN usuario_id INT,

    IN livro_id INT,

    IN dias_emprestimo INT

)

BEGIN

    INSERT INTO Emprestimos (usuario_id, livro_id, data_devolucao)

    VALUES (usuario_id, livro_id, DATE_ADD(CURRENT_DATE, INTERVAL dias_emprestimo DAY));

    

    UPDATE Livros SET disponivel = FALSE WHERE id = livro_id;

END //

DELIMITER ;


-- Chamada da procedure:

CALL RealizarEmprestimo(2, 2, 14); -- Carlos empresta "1984" por 14 dias

```


---


### **6. Triggers (Exemplo)**


#### **Atualizar disponibilidade após devolução:**

```sql

DELIMITER //

CREATE TRIGGER AtualizarDisponibilidade 

AFTER UPDATE ON Emprestimos

FOR EACH ROW

BEGIN

    IF NEW.data_devolucao <= CURRENT_DATE THEN

        UPDATE Livros SET disponivel = TRUE WHERE id = NEW.livro_id;

    END IF;

END //

DELIMITER ;

```


---


### **7. Índices para Otimização**

```sql

CREATE INDEX idx_livros_titulo ON Livros(titulo);

CREATE INDEX idx_usuarios_email ON Usuarios(email);

```


---


### **8. Python + MySQL (Exemplo de Conexão)**

```python

import mysql.connector

from mysql.connector import Error


try:

    conexao = mysql.connector.connect(

        host='localhost',

        database='Biblioteca',

        user='seu_usuario',

        password='sua_senha'

    )


    cursor = conexao.cursor()

    cursor.execute("SELECT titulo, autor FROM Livros")

    

    for (titulo, autor) in cursor:

        print(f"Livro: {titulo}, Autor: {autor}")


except Error as e:

    print(f"Erro: {e}")


finally:

    if conexao.is_connected():

        cursor.close()

        conexao.close()

```


---


### **Principais Conceitos Abordados**:

1. **Modelagem Relacional**: Chaves primárias, estrangeiras e relacionamentos.

2. **SQL Básico**: CRUD (Create, Read, Update, Delete).

3. **Programação no Banco**: Stored procedures e triggers.

4. **Otimização**: Índices para consultas rápidas.

5. **Integração com Python**: Conexão básica.


---


### **Dicas Extras**:

- **Segurança**: Use variáveis de ambiente para armazenar credenciais do banco.

- **Backup**: Configure backups automáticos com `mysqldump`.

- **ORM**: Para projetos maiores, considere usar bibliotecas como `SQLAlchemy`.



Comentários

Postagens mais visitadas