Biblioteca

Avatar do usuário
bernardino
Site Admin
Mensagens: 945
Registrado em: 28 Ago 2020, 15:11

Biblioteca

Mensagem por bernardino »

Eduardo Ferreira Bernardino - 38505410
Marcos Ryan Rodrigues dos Santos - 38916100
Luis Guilherme da Silva Batista - 38097486

-- Tabela: usuario

Código: Selecionar todos

CREATE TABLE usuario (
  id_usuario SERIAL PRIMARY KEY,
  nome VARCHAR(80) NOT NULL,
  data_nascimento DATE NOT NULL
);
-- Tabela: autor

Código: Selecionar todos

CREATE TABLE autor (
  id_autor SERIAL PRIMARY KEY,
  nome VARCHAR(80) NOT NULL,
  data_nascimento DATE NOT NULL
);
-- Tabela: livro

Código: Selecionar todos

CREATE TABLE livro (
  id_livro SERIAL PRIMARY KEY,
  titulo VARCHAR(80) NOT NULL,
  ano_publicacao INTEGER NOT NULL
);
-- Tabela: emprestimo

Código: Selecionar todos

CREATE TABLE emprestimo (
  id_emprestimo SERIAL PRIMARY KEY,
  data_emprestimo DATE NOT NULL,
  data_devolucao DATE,
  fk_usuario INTEGER NOT NULL,
  fk_livro INTEGER NOT NULL,

  CONSTRAINT fk_emprestimo_usuario FOREIGN KEY (fk_usuario)
    REFERENCES usuario(id_usuario)
    ON DELETE RESTRICT,

  CONSTRAINT fk_emprestimo_livro FOREIGN KEY (fk_livro)
    REFERENCES livro(id_livro)
    ON DELETE RESTRICT
);

Código: Selecionar todos

CREATE TABLE escreve_livro (
  id SERIAL PRIMARY KEY,
  fk_livro INTEGER NOT NULL,
  fk_autor INTEGER NOT NULL,

  CONSTRAINT fk_escreve_livro FOREIGN KEY (fk_livro)
    REFERENCES livro(id_livro)
    ON DELETE RESTRICT,

  CONSTRAINT fk_escreve_autor FOREIGN KEY (fk_autor)
    REFERENCES autor(id_autor)
    ON DELETE RESTRICT
);
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 945
Registrado em: 28 Ago 2020, 15:11

Re: Biblioteca

Mensagem por bernardino »

Crie uma nova sequence para cada tabela do seu projeto de banco de dados.

Crie os scripts de alteração das tabelas para associar as sequences criadas.


Responda a atividade com os scripts nessa sequencia:
  • A criação de todas as sequences.
  • As alterações das tabelas.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 945
Registrado em: 28 Ago 2020, 15:11

Re: Biblioteca

Mensagem por bernardino »

1. A criação de todas as sequences.

Segue Criação de todas as SEQUENCES

-- Sequence para a tabela usuario

Código: Selecionar todos

CREATE SEQUENCE usuario_seq
  START WITH 1
  INCREMENT BY 1
  MINVALUE 1
  MAXVALUE 9999
  CACHE 1;
-- Sequence para a tabela autor

Código: Selecionar todos

CREATE SEQUENCE autor_seq
  START WITH 1
  INCREMENT BY 1
  MINVALUE 1
  MAXVALUE 9999
  CACHE 1;
-- Sequence para a tabela livro

Código: Selecionar todos

CREATE SEQUENCE livro_seq
  START WITH 1
  INCREMENT BY 1
  MINVALUE 1
  MAXVALUE 9999
  CACHE 1;
-- Sequence para a tabela emprestimo

Código: Selecionar todos

CREATE SEQUENCE emprestimo_seq
  START WITH 1000
  INCREMENT BY 1
  MINVALUE 1000
  MAXVALUE 9999
  CACHE 1;
-- Sequence para a tabela escreve_livro

Código: Selecionar todos

CREATE SEQUENCE escreve_livro_seq
  START WITH 1
  INCREMENT BY 1
  MINVALUE 1
  MAXVALUE 9999
  CACHE 1;
2. Alterações das tabelas utilizando as sequences (sem SERIAL)

1. Tabela usuario → usa usuario_seq

Código: Selecionar todos

ALTER TABLE usuario
ALTER COLUMN id_usuario SET DEFAULT nextval('usuario_seq');
2. Tabela autor → usa autor_seq

Código: Selecionar todos

ALTER TABLE autor
ALTER COLUMN id_autor SET DEFAULT nextval('autor_seq');
3. Tabela livro → usa livro_seq

Código: Selecionar todos

ALTER TABLE livro
ALTER COLUMN id_livro SET DEFAULT nextval('livro_seq');
4. Tabela emprestimo → usa emprestimo_seq

Código: Selecionar todos

ALTER TABLE emprestimo
ALTER COLUMN id_emprestimo SET DEFAULT nextval('emprestimo_seq');
5. Tabela escreve_livro → usa escreve_livro_seq

Código: Selecionar todos

ALTER TABLE escreve_livro
ALTER COLUMN id SET DEFAULT nextval('escreve_livro_seq');
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 945
Registrado em: 28 Ago 2020, 15:11

Re: Biblioteca

Mensagem por bernardino »

✅ 1. Inserir usuários

Código: Selecionar todos

INSERT INTO usuario (nome, data_nascimento) VALUES
  ('Ana Souza', '1990-05-15'),
  ('Carlos Lima', '1985-09-22'),
  ('Mariana Oliveira', '2000-12-01');
✅ 2. Inserir autores

Código: Selecionar todos

INSERT INTO autor (nome, data_nascimento) VALUES
  ('João Guimarães', '1970-03-10'),
  ('Laura Martins', '1980-07-25');
✅ 3. Inserir livros

Código: Selecionar todos

INSERT INTO livro (titulo, ano_publicacao) VALUES
  ('A Jornada do Saber', 2010),
  ('Mistérios do Tempo', 2015),
  ('A Última Página', 2020);
✅ 4. Inserir empréstimos

Código: Selecionar todos

INSERT INTO emprestimo (data_emprestimo, data_devolucao, fk_usuario, fk_livro) VALUES
  (CURRENT_DATE, CURRENT_DATE + INTERVAL '7 days', 1, 1),
  (CURRENT_DATE - INTERVAL '2 days', NULL, 2, 2),
  (CURRENT_DATE - INTERVAL '10 days', CURRENT_DATE - INTERVAL '3 days', 3, 3);
✅ 5. Inserir vínculos entre livros e autores (escreve_livro)

Código: Selecionar todos

INSERT INTO escreve_livro (fk_livro, fk_autor) VALUES
  (1, 1),
  (2, 2),
  (3, 1),
  (3, 2); -- Livro com dois autores
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 945
Registrado em: 28 Ago 2020, 15:11

Re: Biblioteca

Mensagem por bernardino »

Com base nos dados fornecidos na planilha Dados para os inserts.xlsx, cada grupo deverá realizar a seguinte tarefa:

Criar os scripts SQL de inserção de dados (INSERT INTO) para povoar o banco de dados com os dados apresentados na planilha, respeitando os relacionamentos entre as entidades.

Regras para a entrega:

Todos os comandos devem usar as sequences criadas anteriormente para gerar os valores de ID (ex: nextval('seq_nome_id')).

Os inserts devem ser feitos na ordem correta, respeitando as dependências de chaves estrangeiras.

Certifique-se de não violar restrições como:

Chaves estrangeiras inválidas

Restrições de cardinalidade

Unicidade de campos, se aplicável.

Código: Selecionar todos

INSERT INTO usuario(id_usuario, nome,data_nascimento) VALUES
(nextval('usuario_seq'), 'Arthur', '2010-10-10'),
(nextval('usuario_seq'), 'Beatriz', '2008-08-08'),
(nextval('usuario_seq'), 'Caio', '2005-05-05'),
(nextval('usuario_seq'), 'Daniele', '2003-03-03'),
(nextval('usuario_seq'), 'Eduardo', '2001-01-01'),
(nextval('usuario_seq'), 'Fernanda', '2009-03-03');
---

Código: Selecionar todos

]INSERT INTO autor(id_autor, nome, data_nascimento) VALUES
(nextval('autor_seq'), 'autor X', '1995-01-01'),
(nextval('autor_seq'), 'autor Y', '1993-03-03'),
(nextval('autor_seq'), 'autor Z', '2000-09-09'),
(nextval('autor_seq'), 'autor W', '1967-07-07'),
(nextval('autor_seq'), 'autor V', '1988-03-02'),
(nextval('autor_seq'), 'autor U', '1996-09-05');
---

Código: Selecionar todos

INSERT INTO livro(id_livro, titulo, ano_publicacao) VALUES
(nextval('livro_seq'), 'livro A', '2001'),
(nextval('livro_seq'), 'livro B', '2002'),
(nextval('livro_seq'), 'livro C', '2003'),
(nextval('livro_seq'), 'livro D', '2004'),
(nextval('livro_seq'), 'livro E', '2005'),
(nextval('livro_seq'), 'livro F', '2006');
---

Código: Selecionar todos

INSERT INTO emprestimo(id_emprestimo, fk_usuario, fk_livro, data_emprestimo, data_devolucao) VALUES
(nextval('emprestimo_seq'), 1, 2, '2025-01-01', '2025-06-01'),
(nextval('emprestimo_seq'), 2, 3, '2024-04-04', '2025-06-02'),
(nextval('emprestimo_seq'), 3, 4, '2024-05-03', '2025-06-03'),
(nextval('emprestimo_seq'), 4, 5, '2024-06-04', '2025-06-04'),
(nextval('emprestimo_seq'), 5, 6, '2024-05-04', '2025-06-05'),
(nextval('emprestimo_seq'), 6, 1, '2024-09-04', '2025-06-06');
---

Código: Selecionar todos

select * FROM usuario;
select * FROM autor;
select * FROM livro;
select * FROM emprestimo;
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Responder