Prévia do material em texto
<p>brunocampos01 / banco-de-dados Público</p><p>Aulas, exercícios e resumos sobre banco de dados</p><p>Licença MIT</p><p>368 estrelas 56 garfos Galhos Etiquetas Atividade</p><p>1 Filial 0 Etiquetas Ir para arquivo Go to file Código</p><p>brunocampos01 Excluir livros/README.md 934547f · semana passada</p><p>algebra_e_calculo doc: adicionar novos elementos… 3 anos atrás</p><p>bd_II Excluir diretório bd_II/imagens 3 anos atrás</p><p>bd_III doc: adicionar novos elementos… 3 anos atrás</p><p>imagens Adicionar arquivos via upload 3 anos atrás</p><p>modelagem estilo 6 anos atrás</p><p>normalização doc: adicionar novos elementos… 3 anos atrás</p><p>SQL-> Atualizar aula_03 - JOIN.sql ano passado</p><p>.gitatributos Renomear gitattributes para .git… 3 anos atrás</p><p>.gitignore refatorar: ordenado 5 anos atrás</p><p>LICENÇA refatorar: ordenado 5 anos atrás</p><p>LEIA-ME.md Atualizar README.md semana passada</p><p>Code LicenseCode License MITMIT SQLSQL learninglearning UFSCUFSC Banco de DadosBanco de Dados ViewsViews 41 / 2765241 / 27652</p><p>Modelagem</p><p>Normalização</p><p>Álgebra e cálculo relacional</p><p>Estrela Notificações</p><p>Código Problemas 1 Solicitações de pull Discussões Ações Segurança Perc</p><p>Banco de Dados</p><p>Banco de Dados I</p><p>LEIA-ME Licença MIT</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 1/16</p><p>https://github.com/brunocampos01</p><p>https://github.com/brunocampos01/banco-de-dados</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/LICENSE</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/LICENSE</p><p>https://github.com/brunocampos01/banco-de-dados/stargazers</p><p>https://github.com/brunocampos01/banco-de-dados/stargazers</p><p>https://github.com/brunocampos01/banco-de-dados/forks</p><p>https://github.com/brunocampos01/banco-de-dados/forks</p><p>https://github.com/brunocampos01/banco-de-dados/forks</p><p>https://github.com/brunocampos01/banco-de-dados/forks</p><p>https://github.com/brunocampos01/banco-de-dados/branches</p><p>https://github.com/brunocampos01/banco-de-dados/tags</p><p>https://github.com/brunocampos01/banco-de-dados/activity</p><p>https://github.com/brunocampos01/banco-de-dados/branches</p><p>https://github.com/brunocampos01/banco-de-dados/tags</p><p>https://github.com/brunocampos01/banco-de-dados/branches</p><p>https://github.com/brunocampos01/banco-de-dados/tags</p><p>https://github.com/brunocampos01</p><p>https://github.com/brunocampos01/banco-de-dados/commits?author=brunocampos01</p><p>https://github.com/brunocampos01/banco-de-dados/commit/934547f12ecc5b4c81de6c18d9253fd8ea1ba0ae</p><p>https://github.com/brunocampos01/banco-de-dados/commit/934547f12ecc5b4c81de6c18d9253fd8ea1ba0ae</p><p>https://github.com/brunocampos01/banco-de-dados/tree/master/algebra_e_calculo</p><p>https://github.com/brunocampos01/banco-de-dados/commit/99dff695d2b72d723f1551e90515d0aa138a3b8b</p><p>https://github.com/brunocampos01/banco-de-dados/commit/99dff695d2b72d723f1551e90515d0aa138a3b8b</p><p>https://github.com/brunocampos01/banco-de-dados/commit/99dff695d2b72d723f1551e90515d0aa138a3b8b</p><p>https://github.com/brunocampos01/banco-de-dados/tree/master/bd_II</p><p>https://github.com/brunocampos01/banco-de-dados/commit/5f92f2e84d86ae952f6a4f1e45b626fab36b451f</p><p>https://github.com/brunocampos01/banco-de-dados/tree/master/bd_III</p><p>https://github.com/brunocampos01/banco-de-dados/commit/99dff695d2b72d723f1551e90515d0aa138a3b8b</p><p>https://github.com/brunocampos01/banco-de-dados/commit/99dff695d2b72d723f1551e90515d0aa138a3b8b</p><p>https://github.com/brunocampos01/banco-de-dados/commit/99dff695d2b72d723f1551e90515d0aa138a3b8b</p><p>https://github.com/brunocampos01/banco-de-dados/tree/master/images</p><p>https://github.com/brunocampos01/banco-de-dados/commit/28e0796ce20ecbbb0b6a00c405205701b40a7ba6</p><p>https://github.com/brunocampos01/banco-de-dados/tree/master/modelagem</p><p>https://github.com/brunocampos01/banco-de-dados/commit/a6f9995c4d3e721b3b86bacf8a8110f9ac4e3199</p><p>https://github.com/brunocampos01/banco-de-dados/tree/master/normalizacao</p><p>https://github.com/brunocampos01/banco-de-dados/commit/99dff695d2b72d723f1551e90515d0aa138a3b8b</p><p>https://github.com/brunocampos01/banco-de-dados/commit/99dff695d2b72d723f1551e90515d0aa138a3b8b</p><p>https://github.com/brunocampos01/banco-de-dados/commit/99dff695d2b72d723f1551e90515d0aa138a3b8b</p><p>https://github.com/brunocampos01/banco-de-dados/tree/master/sql</p><p>https://github.com/brunocampos01/banco-de-dados/commit/d71553284575e3bdf93c122c6f66b676ac9e9d7a</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/.gitattributes</p><p>https://github.com/brunocampos01/banco-de-dados/commit/9b6767e38ff8f8dbe48bbe09943e2ee553b25eb6</p><p>https://github.com/brunocampos01/banco-de-dados/commit/9b6767e38ff8f8dbe48bbe09943e2ee553b25eb6</p><p>https://github.com/brunocampos01/banco-de-dados/commit/9b6767e38ff8f8dbe48bbe09943e2ee553b25eb6</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/.gitignore</p><p>https://github.com/brunocampos01/banco-de-dados/commit/4580de4d50e366f16a2a1c66a64f0f8774d12dd4</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/LICENSE</p><p>https://github.com/brunocampos01/banco-de-dados/commit/4580de4d50e366f16a2a1c66a64f0f8774d12dd4</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/README.md</p><p>https://github.com/brunocampos01/banco-de-dados/commit/4bdcfacd374c49778636c420132415dfde2c59fe</p><p>https://camo.githubusercontent.com/ee13fe71b7a5c839064a37bca03ea4b35e6f93352e3c92cd1639dcfc7a8ce956/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f64652532304c6963656e73652d4d49542d677265656e2e737667</p><p>https://camo.githubusercontent.com/ee13fe71b7a5c839064a37bca03ea4b35e6f93352e3c92cd1639dcfc7a8ce956/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f64652532304c6963656e73652d4d49542d677265656e2e737667</p><p>https://camo.githubusercontent.com/c6411a5d360726f48b1f9ff0b44b138b8cc748883c0a6d49f1ead9b5633c7281/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53514c2d6c6561726e696e672d677265656e2e737667</p><p>https://camo.githubusercontent.com/c6411a5d360726f48b1f9ff0b44b138b8cc748883c0a6d49f1ead9b5633c7281/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53514c2d6c6561726e696e672d677265656e2e737667</p><p>https://camo.githubusercontent.com/500fe24b6f56c028944e8e6bcac190ea670c30481943f20c82e878a4cc4bd866/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f554653432d42616e636f25323064652532304461646f732d677265656e2e737667</p><p>https://camo.githubusercontent.com/500fe24b6f56c028944e8e6bcac190ea670c30481943f20c82e878a4cc4bd866/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f554653432d42616e636f25323064652532304461646f732d677265656e2e737667</p><p>https://hits.seeyoufarm.com/</p><p>https://hits.seeyoufarm.com/</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/modelagem</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/normalizacao</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/algebra_e_calculo</p><p>https://github.com/login?return_to=%2Fbrunocampos01%2Fbanco-de-dados</p><p>https://github.com/login?return_to=%2Fbrunocampos01%2Fbanco-de-dados</p><p>https://github.com/brunocampos01/banco-de-dados</p><p>https://github.com/brunocampos01/banco-de-dados/issues</p><p>https://github.com/brunocampos01/banco-de-dados/pulls</p><p>https://github.com/brunocampos01/banco-de-dados/discussions</p><p>https://github.com/brunocampos01/banco-de-dados/actions</p><p>https://github.com/brunocampos01/banco-de-dados/security</p><p>https://github.com/brunocampos01/banco-de-dados/pulse</p><p>https://github.com/brunocampos01/banco-de-dados/commits/master/</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/images/image_bd.png</p><p>SQL: aulas</p><p>SQL: exercícios resolvidos</p><p>SQL: execução dos exercícios resolvidos direto no navegador</p><p>Tuning em banco de dados</p><p>Seminário sobre a rede Tangle (blockchain 3.0)</p><p>Banco de dados orientado a objetos: aulas</p><p>Banco de dados orientado a objetos: exercícios</p><p>Bancos de Dados Temporais: aulas</p><p>Bancos de Dados Temporais: exercícios</p><p>Bancos de Dados Geográficos: aulas</p><p>Bancos de Dados Geográficos: exercícios</p><p>Bancos de Dados XML: aulas</p><p>Bancos de Dados XML: exercícios</p><p>Não apenas (NoSQL)</p><p>Novo SQL</p><p>Banco de Dados II</p><p>Banco de Dados III</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados</p><p>2/16</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/sql/aulas</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/sql/exercicios</p><p>https://colab.research.google.com/drive/1_X-KgO7pNk_VU2w52FVcyHsSCjRLnsiE?usp=sharing</p><p>https://github.com/brunocampos01/brunocampos01/blob/main/images/gif_googlecolab_database.gif</p><p>https://github.com/brunocampos01/brunocampos01/blob/main/images/gif_googlecolab_database.gif</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_II</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_II/exercicios/seminario_rede_tangle.pptx</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_SQL/aulas/bd_orientado_a_objetos</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_SQL/exercicios/exercicios_bdoo</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_SQL/aulas/bd_temporais</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_SQL/exercicios/exercicios_bdt</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_SQL/aulas/bd_geograficos</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_SQL/exercicios/exercicios_bdgeograficos</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_SQL/aulas/bd_xml</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_SQL/exercicios/exercicios_bd_xml</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_noSQL</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/bd_III/banco_de_dados_newSQL</p><p>Um banco de dados é uma coleção estruturada de dados que é organizada e armazenada de forma</p><p>para facilitar a recuperação, manipulação e gestão eficientes. Pense nele como um arquivo digital,</p><p>onde, em vez de pastas e documentos físicos, você tem tabelas e registros organizados de forma</p><p>ordenada para acesso fácil.</p><p>Um banco de dados relacional é um tipo de banco de dados que organiza os dados em tabelas</p><p>(relações) com linhas (registros) e colunas (campos). Essas tabelas estão interconectadas por meio de</p><p>relacionamentos, permitindo que os dados sejam acessados e combinados de várias maneiras.</p><p>Imagine uma coleção de planilhas, cada uma representando um aspecto diferente de seus dados, mas</p><p>com a capacidade de vincular e combinar informações entre elas de forma contínua.</p><p>Um Sistema de Gerenciamento de Banco de Dados Relacionais (RDBMS) é um aplicativo de software</p><p>projetado para criar, gerenciar e interagir com bancos de dados relacionais. Ele fornece uma estrutura</p><p>estruturada para armazenar, recuperar e manipular dados dentro do banco de dados. Alguns</p><p>exemplos populares de RDBMS incluem MySQL, PostgreSQL, Oracle e Microsoft SQL Server.</p><p>SQL (Structured Query Language) a linguagem de consulta padrão usada para interagir com bancos</p><p>de dados relacionais é o SQL (Structured Query Language). Ela permite criar, ler, atualizar e excluir</p><p>dados dentro do banco de dados, além de definir e modificar a própria estrutura do banco de dados.</p><p>O SQL é como uma linguagem universal que possibilita a comunicação com diferentes plataformas</p><p>de RDBMS.</p><p>DDL (Linguagem de Definição de Dados), que lida com esquemas e normas de banco de dados.</p><p>DML (Linguagem de Manipulação de Dados), que lida com a manipulação de dados e inclui</p><p>instruções SQL mais comuns, como SELECT, INSERT, UPDATE, DELETE etc.</p><p>DCL (Linguagem de Controle de Dados), que inclui comandos como GRANT, e principalmente</p><p>relacionados a direitos, permissões e outros controles do sistema de banco de dados.</p><p>Design de banco de dados é o processo de criar uma estrutura eficiente e organizada para armazenar</p><p>e gerenciar dados em um banco de dados. Isso envolve definir tabelas, colunas, relacionamentos e</p><p>restrições para garantir a integridade dos dados, minimizar a redundância e melhorar o desempenho.</p><p>Um design de banco de dados adequado é uma base para construir aplicativos robustos e escaláveis.</p><p>Fundamentos em Bancos de Dados</p><p>Banco de dados</p><p>Banco de Dados Relacional</p><p>RDBMS</p><p>SQL</p><p>Tipos de SQL</p><p>Design de Banco de Dados</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 3/16</p><p>Tabela: Uma coleção de dados relacionados organizados em linhas e colunas.</p><p>Linha: Uma única instância ou entrada em uma tabela (também conhecida como registro ou</p><p>tupla).</p><p>Coluna: Uma característica ou propriedade específica dos dados em uma tabela (também</p><p>conhecida como campo ou atributo).</p><p>Chave Primária: Uma coluna ou combinação de colunas que identifica exclusivamente cada linha</p><p>em uma tabela.</p><p>Foreign Key: Uma coluna ou combinação de colunas que faz referência à chave primária de outra</p><p>tabela, estabelecendo um relacionamento entre as duas tabelas.</p><p>Join: Uma operação que combina linhas de duas ou mais tabelas com base em uma coluna</p><p>relacionada.</p><p>Index: Uma estrutura de dados que melhora o desempenho das operações de recuperação de</p><p>dados,</p><p>View: Uma tabela virtual que é gerada dinamicamente.</p><p>Stored Procedure: um SQL pre-compilado que fica no RDBMS.</p><p>Trigger: um tipo de stored procedure que é automaticamente executada a partir de algum</p><p>evento na table, por exemplo, INSERT , UPDATE , DELETE .</p><p>As keys no DB ajudam a garantir a integridade e estabelecer os relacionamentos entre tables. Alguns</p><p>exemplos:</p><p>Termos em Banco de Dados</p><p>Chaves em Databases</p><p>Primary Key</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 4/16</p><p>https://private-user-images.githubusercontent.com/12896018/329781809-a49b7100-c1e3-467f-92b5-a4bb322dbcea.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODE4MDktYTQ5YjcxMDAtYzFlMy00NjdmLTkyYjUtYTRiYjMyMmRiY2VhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJjYjdmNmNjMmU1OWQ4ZGZjYmM5YmMxOGJlNGExOWI2MDJmYzliYzBmYjY2M2VhNzA3OTAwM2ZlYjM0N2M3YmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Pg1QhGdxq2qJ8LC17V_CotO8ogBECLyBevOZptJnk6U</p><p>https://private-user-images.githubusercontent.com/12896018/329781809-a49b7100-c1e3-467f-92b5-a4bb322dbcea.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODE4MDktYTQ5YjcxMDAtYzFlMy00NjdmLTkyYjUtYTRiYjMyMmRiY2VhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJjYjdmNmNjMmU1OWQ4ZGZjYmM5YmMxOGJlNGExOWI2MDJmYzliYzBmYjY2M2VhNzA3OTAwM2ZlYjM0N2M3YmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Pg1QhGdxq2qJ8LC17V_CotO8ogBECLyBevOZptJnk6U</p><p>Uma chave primária (PK) é uma coluna ou uma combinação de colunas que identifica exclusivamente</p><p>cada registro em uma tabela. Garante que cada registro seja único e possa ser facilmente localizado.</p><p>As chaves primárias geralmente são indexadas para melhorar o desempenho das consultas.</p><p>Uma Alternate Key também conhecida como chave única, é qualquer outra candidate key que</p><p>poderia ter sido escolhida como a chave primária, mas não foi.</p><p>Uma surrogate key (SK) é uma chave artificial (geralmente um número sequencial ou um GUID) que é</p><p>usada como primary key em uma tabela. Ela não possui significado inerente ou relação com os dados</p><p>em si. Por outro lado, uma natural key é uma chave derivada dos próprios dados, como um ID de</p><p>funcionário ou um código de produto.</p><p>A foreign key (FK) é uma coluna ou uma combinação de colunas em uma tabela que faz referência à</p><p>PK de outra tabela. Ele estabelece um vínculo entre as duas tabelas e garante a integridade</p><p>referencial, assegurando que os dados na tabela filha sejam válidos e consistentes com os dados na</p><p>tabela pai.</p><p>CREATE TABLE customers (</p><p>customer_id INT PRIMARY KEY,</p><p>first_name VARCHAR(50),</p><p>last_name VARCHAR(50),</p><p>email VARCHAR(100)</p><p>);</p><p>Alternate Key</p><p>CREATE TABLE employees (</p><p>employee_id INT PRIMARY KEY,</p><p>email VARCHAR(100) UNIQUE, -- Alternate key</p><p>first_name VARCHAR(50),</p><p>last_name VARCHAR(50)</p><p>);</p><p>Surrogate Key and Natural Key</p><p>-- Surrogate key</p><p>CREATE TABLE orders (</p><p>order_id INT PRIMARY KEY IDENTITY(1,1), -- Surrogate key</p><p>customer_name VARCHAR(100),</p><p>order_date DATE</p><p>);</p><p>-- Natural key</p><p>CREATE TABLE products (</p><p>product_code VARCHAR(10) PRIMARY KEY, -- Natural key</p><p>product_name VARCHAR(100),</p><p>price DECIMAL(10,2)</p><p>);</p><p>Foreign Key (Chave Estrangeira)</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 5/16</p><p>A composite key (chave composta) é a combinacao de 2 ou mais colunas usadas como PK ou FK</p><p>Relacionamentos permitem conectar e combinar dados de diferentes tabelas. Existem três tipos</p><p>principais de relacionamentos:</p><p>CREATE TABLE orders (</p><p>order_id INT PRIMARY KEY,</p><p>customer_id INT,</p><p>order_date DATE,</p><p>FOREIGN KEY (customer_id) REFERENCES customers(customer_id)</p><p>);</p><p>Composite Key (Chave Composta)</p><p>-- Composite key</p><p>CREATE TABLE order_items (</p><p>order_id INT,</p><p>product_id INT,</p><p>quantity INT,</p><p>PRIMARY KEY (order_id, product_id)</p><p>);</p><p>Relacionamentos</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 6/16</p><p>https://private-user-images.githubusercontent.com/12896018/329783329-716cf408-733f-4b61-b977-061cd7cf55a2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODMzMjktNzE2Y2Y0MDgtNzMzZi00YjYxLWI5NzctMDYxY2Q3Y2Y1NWEyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI5ZmVkYjlmODI2YjdlYTU0ZjY2NGVmOTRlYzFmY2I2YWNjNWMzODYxNTAzOWQzNmI2YTYxZmYxNjNlZGJmODYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.RRAuthjiTLCKwLaRdpAhWv1CKEgR_slzeWD4JpD5KX0</p><p>https://private-user-images.githubusercontent.com/12896018/329783329-716cf408-733f-4b61-b977-061cd7cf55a2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODMzMjktNzE2Y2Y0MDgtNzMzZi00YjYxLWI5NzctMDYxY2Q3Y2Y1NWEyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI5ZmVkYjlmODI2YjdlYTU0ZjY2NGVmOTRlYzFmY2I2YWNjNWMzODYxNTAzOWQzNmI2YTYxZmYxNjNlZGJmODYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.RRAuthjiTLCKwLaRdpAhWv1CKEgR_slzeWD4JpD5KX0</p><p>No one-to-one relationship, cada registro em uma tabela está associado exatamente a um registro</p><p>em outra tabela. Por exemplo, considere um banco de dados onde cada funcionário tem um e</p><p>apenas um gerente, e cada gerente gerencia um e apenas um funcionário. Esse tipo de</p><p>relacionamento é relativamente raro na prática.</p><p>No one-to-many relationship, cada registro em uma tabela (o lado "um") pode estar associado a</p><p>vários registros em outra tabela (o lado "muitos"). Por exemplo, em um banco de dados de uma</p><p>escola, um professor pode lecionar várias disciplinas, mas cada disciplina é lecionada por apenas um</p><p>professor.</p><p>One-to-One</p><p>-- Option 1: Single table</p><p>CREATE TABLE employees (</p><p>employee_id INT PRIMARY KEY,</p><p>first_name VARCHAR(50),</p><p>last_name VARCHAR(50),</p><p>manager_first_name VARCHAR(50),</p><p>manager_last_name VARCHAR(50)</p><p>);</p><p>-- Option 2: Two tables with foreign key</p><p>CREATE TABLE employees (</p><p>employee_id INT PRIMARY KEY,</p><p>first_name VARCHAR(50),</p><p>last_name VARCHAR(50),</p><p>manager_id INT UNIQUE,</p><p>FOREIGN KEY (manager_id) REFERENCES employees(employee_id)</p><p>);</p><p>One-to-Many</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 7/16</p><p>https://private-user-images.githubusercontent.com/12896018/329783599-2c41a8ac-39f4-460f-be4f-4a1e8d28aa4b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODM1OTktMmM0MWE4YWMtMzlmNC00NjBmLWJlNGYtNGExZThkMjhhYTRiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUzMTYxMWJkMTY1Y2Q1YTY1MmRjMmIzZGM5MWQyMGNmZGJmMTEyYTViMzMwNDBkODA3MDc1ZDE3NTA5ZTQ0NGYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.x_3kl7piS78U_p31OG4fZ4IU0st2OInXuVv2NOu0Yrk</p><p>https://private-user-images.githubusercontent.com/12896018/329783599-2c41a8ac-39f4-460f-be4f-4a1e8d28aa4b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODM1OTktMmM0MWE4YWMtMzlmNC00NjBmLWJlNGYtNGExZThkMjhhYTRiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUzMTYxMWJkMTY1Y2Q1YTY1MmRjMmIzZGM5MWQyMGNmZGJmMTEyYTViMzMwNDBkODA3MDc1ZDE3NTA5ZTQ0NGYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.x_3kl7piS78U_p31OG4fZ4IU0st2OInXuVv2NOu0Yrk</p><p>No many-to-many relationship, cada registro em uma tabela pode estar associado a vários registros</p><p>em outra tabela, e vice-versa. Por exemplo, em um banco de dados de uma universidade, um aluno</p><p>pode se matricular em várias disciplinas, e cada disciplina pode ter vários alunos matriculados.</p><p>-- Parent table</p><p>CREATE TABLE teachers (</p><p>teacher_id INT PRIMARY KEY,</p><p>first_name VARCHAR(50),</p><p>last_name VARCHAR(50)</p><p>);</p><p>-- Child table</p><p>CREATE TABLE classes (</p><p>class_id INT PRIMARY KEY,</p><p>class_name VARCHAR(100),</p><p>teacher_id INT,</p><p>FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id)</p><p>);</p><p>Many-to-Many</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 8/16</p><p>https://private-user-images.githubusercontent.com/12896018/329783642-76efc3e4-6897-4122-ad6f-6f63e9873fdf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODM2NDItNzZlZmMzZTQtNjg5Ny00MTIyLWFkNmYtNmY2M2U5ODczZmRmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ2NTIyM2NkNDg0OGUwNzAyZWNiNGM0YmUxODk3Mzg3YmVjMWE4MDBkZDJlYjEzOWU4YzM4NTJhMTQxNjAzN2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.1krGE8smxxWY-Y5K0CYlIbVLsdlZ_T2Zbmi6sXKfyyE</p><p>https://private-user-images.githubusercontent.com/12896018/329783642-76efc3e4-6897-4122-ad6f-6f63e9873fdf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODM2NDItNzZlZmMzZTQtNjg5Ny00MTIyLWFkNmYtNmY2M2U5ODczZmRmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ2NTIyM2NkNDg0OGUwNzAyZWNiNGM0YmUxODk3Mzg3YmVjMWE4MDBkZDJlYjEzOWU4YzM4NTJhMTQxNjAzN2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.1krGE8smxxWY-Y5K0CYlIbVLsdlZ_T2Zbmi6sXKfyyE</p><p>Outro conceito comum em realcionamentos de DB sao as cardinalidades. A cardinalidade define a</p><p>relação numérica entre duas entidades. Ela especifica o número máximo de instâncias de uma</p><p>entidade que podem estar associadas a uma única instância de outra entidade. As cardinalidades</p><p>mais comuns são:</p><p>One-to-One (1:1): Uma instância da Entidade A pode estar associada a, no máximo, uma</p><p>instância da Entidade B, e vice-versa.</p><p>One-to-Many (1:N): Uma instância da Entidade A pode estar associada a várias instâncias da</p><p>Entidade B, mas uma instância da Entidade B pode estar associada a apenas uma instância da</p><p>Entidade A.</p><p>Many-to-Many (M:N)): Múltiplas instâncias da Entidade A podem estar associadas a múltiplas</p><p>instâncias da Entidade B, e vice-versa.</p><p>Em ER diagrama:</p><p>-- Table 1</p><p>CREATE TABLE students (</p><p>student_id INT PRIMARY KEY,</p><p>first_name VARCHAR(50),</p><p>last_name VARCHAR(50)</p><p>);</p><p>-- Table 2</p><p>CREATE TABLE courses (</p><p>course_id INT PRIMARY KEY,</p><p>course_name VARCHAR(100),</p><p>description TEXT</p><p>);</p><p>-- Junction or Intemediary table</p><p>CREATE TABLE enrollments (</p><p>enrollment_id INT PRIMARY KEY,</p><p>student_id INT,</p><p>course_id INT,</p><p>FOREIGN KEY (student_id) REFERENCES students(student_id),</p><p>FOREIGN KEY (course_id) REFERENCES courses(course_id)</p><p>);</p><p>Cardinalidades</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 9/16</p><p>https://private-user-images.githubusercontent.com/12896018/329783702-6ffc0ebd-7884-4a4b-a366-8d1facff3452.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODM3MDItNmZmYzBlYmQtNzg4NC00YTRiLWEzNjYtOGQxZmFjZmYzNDUyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg5NjA2MzhkZDNiMGNhNDlkNDhhMTkxNTg0MDc1Mjg4NzIxZDUxODJmNzg3YWNlYzc4Yjc4MjBlYmJhMWM0YWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.pPhPmGLdRezwsROMRIJKWQX4J1dcQCWe6XEJwiz_b1s</p><p>https://private-user-images.githubusercontent.com/12896018/329783702-6ffc0ebd-7884-4a4b-a366-8d1facff3452.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODM3MDItNmZmYzBlYmQtNzg4NC00YTRiLWEzNjYtOGQxZmFjZmYzNDUyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg5NjA2MzhkZDNiMGNhNDlkNDhhMTkxNTg0MDc1Mjg4NzIxZDUxODJmNzg3YWNlYzc4Yjc4MjBlYmJhMWM0YWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.pPhPmGLdRezwsROMRIJKWQX4J1dcQCWe6XEJwiz_b1s</p><p>A normalização de DB é o processo de organizar dados para reduzir a redundância, e melhorar a</p><p>integridade dos dados. Os principais objetivos da normalização de banco de dados são:</p><p>Eliminar dados redundantes</p><p>Garantir integridade dos dados</p><p>Facilitar a manipulação e manutenção de dados</p><p>As formas normais mais usadas são:</p><p>Primeira Forma Normal (1NF)</p><p>Segunda Forma Normal (2NF)</p><p>Terceira Forma Normal (3NF)</p><p>Ela afirma que um atributo (coluna) em uma tabela deve ter valores atômicos, ou seja, cada célula na</p><p>tabela deve conter um único valor. Por exemplo, considere uma tabela com uma coluna chamada</p><p>"Telefones" que armazena vários números de telefone para um cliente. Isso viola a 1NF porque a</p><p>coluna contém um conjunto de valores em vez de um único valor. Para normalizar à 1NF, você</p><p>precisaria separar os números de telefone em colunas individuais ou criar uma tabela separada para</p><p>os números de telefone.</p><p>Normalização em Database</p><p>Primeira Forma Normal 1NF</p><p>-- Violates 1NF</p><p>CREATE TABLE customers (</p><p>customer_id INT PRIMARY KEY,</p><p>name VARCHAR(100),</p><p>phone_numbers VARCHAR(200) -- Stores multiple phone numbers, violating 1NF</p><p>);</p><p>-- Conforms to 1NF</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 10/16</p><p>https://private-user-images.githubusercontent.com/12896018/329784128-08c30191-a92d-4fb0-9931-62c0afd5c85e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODQxMjgtMDhjMzAxOTEtYTkyZC00ZmIwLTk5MzEtNjJjMGFmZDVjODVlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY0YzAxZDY2MThkNWVmNjJhMWRkZWFkYjRiOWQzZjM2MzkyODliMTAxMDk0Yzg2MTk2NWNiMzlkOGY1ZjAzMmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.bApzu8Vsl60DRzGhKmsXv-0PevBE1A9FqWqdjE6vxUY</p><p>https://private-user-images.githubusercontent.com/12896018/329784128-08c30191-a92d-4fb0-9931-62c0afd5c85e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODQxMjgtMDhjMzAxOTEtYTkyZC00ZmIwLTk5MzEtNjJjMGFmZDVjODVlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY0YzAxZDY2MThkNWVmNjJhMWRkZWFkYjRiOWQzZjM2MzkyODliMTAxMDk0Yzg2MTk2NWNiMzlkOGY1ZjAzMmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.bApzu8Vsl60DRzGhKmsXv-0PevBE1A9FqWqdjE6vxUY</p><p>Para estar na 2NF, uma tabela deve estar na 1NF e todos os atributos não primários devem depender</p><p>completamente da chave primária. Por exemplo, considere uma tabela com uma PK composta de</p><p>(student_id, course_id) e uma coluna grade . Se a coluna de grade depender apenas do</p><p>course_id e não da combinação de student_id, course_id , então a tabela viola a 2NF.</p><p>A Terceira Forma Normal (3NF) amplia a 2NF, resolvendo as dependências transitivas. Por exemplo,</p><p>concidere a tabela com colunas student_id, student_name, class_id, class_name . A student_name</p><p>depende de student_id , e a class_name depende da class_id . Contudo, class_name tambem</p><p>depende da coluna student_id atraves da class_id , o que viola a 3NF.</p><p>CREATE TABLE customers (</p><p>customer_id INT PRIMARY KEY,</p><p>name VARCHAR(100),</p><p>phone1 VARCHAR(20),</p><p>phone2 VARCHAR(20),</p><p>phone3 VARCHAR(20)</p><p>);</p><p>Segunda Forma Normal 2NF</p><p>-- Violates 2NF</p><p>CREATE TABLE student_courses (</p><p>student_id INT,</p><p>course_id INT,</p><p>course_name VARCHAR(100), -- Depends only on course_id, not the entire primary key</p><p>grade CHAR(2),</p><p>PRIMARY KEY (student_id, course_id)</p><p>);</p><p>-- Conforms to 2NF</p><p>CREATE TABLE student_courses (</p><p>student_id INT,</p><p>course_id INT,</p><p>grade CHAR(2),</p><p>PRIMARY KEY (student_id, course_id)</p><p>);</p><p>CREATE TABLE courses (</p><p>course_id INT PRIMARY KEY,</p><p>course_name VARCHAR(100)</p><p>);</p><p>Terceira Forma Normal 3NF</p><p>-- Violates 3NF</p><p>CREATE TABLE student_classes (</p><p>student_id INT,</p><p>student_name VARCHAR(100),</p><p>class_id INT,</p><p>class_name VARCHAR(100),</p><p>PRIMARY KEY (student_id, class_id)</p><p>);</p><p>-- Conforms to 3NF</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 11/16</p><p>Os índices são estruturas de dados (b-tree, hashes) que melhoram o desempenho das operações de</p><p>recuperação de dados em um banco de dados. Eles criam uma representação ordenada dos dados</p><p>em uma tabela, permitindo buscas e consultas</p><p>mais rápidas. Existem vários tipos de índices:</p><p>Índice Clustered: Um índice clusterizado reorganiza fisicamente as linhas em uma tabela com</p><p>base nos valores-chave do índice. Cada tabela pode ter apenas um índice clusterizado.</p><p>CREATE TABLE students (</p><p>student_id INT PRIMARY KEY,</p><p>student_name VARCHAR(100)</p><p>);</p><p>CREATE TABLE classes (</p><p>class_id INT PRIMARY KEY,</p><p>class_name VARCHAR(100)</p><p>);</p><p>CREATE TABLE student_classes (</p><p>student_id INT,</p><p>class_id INT,</p><p>PRIMARY KEY (student_id, class_id),</p><p>FOREIGN KEY (student_id) REFERENCES students(student_id),</p><p>FOREIGN KEY (class_id) REFERENCES classes(class_id)</p><p>);</p><p>Indices</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 12/16</p><p>https://private-user-images.githubusercontent.com/12896018/329785528-40c53804-2540-48de-8bae-d901b6cd9b25.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODU1MjgtNDBjNTM4MDQtMjU0MC00OGRlLThiYWUtZDkwMWI2Y2Q5YjI1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTRkNmM0YzA3YmZjMjJhMWM1MGM2YTk3NDY5Yjk2NTZjZjNjNzhkMGViMGNiNjQwN2VhNWIxZjRlOTZlZDgyNWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0._IiqT91OY9sQpQkoajinrGUd6ozrJVDbDcJXqxchwcw</p><p>https://private-user-images.githubusercontent.com/12896018/329785528-40c53804-2540-48de-8bae-d901b6cd9b25.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODU1MjgtNDBjNTM4MDQtMjU0MC00OGRlLThiYWUtZDkwMWI2Y2Q5YjI1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTRkNmM0YzA3YmZjMjJhMWM1MGM2YTk3NDY5Yjk2NTZjZjNjNzhkMGViMGNiNjQwN2VhNWIxZjRlOTZlZDgyNWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0._IiqT91OY9sQpQkoajinrGUd6ozrJVDbDcJXqxchwcw</p><p>Índice Nonclustered: Um índice não clusterizado é um objeto separado que contém os valores-</p><p>chave do índice e ponteiros para as linhas correspondentes na tabela. Uma tabela pode ter vários</p><p>índices não clusterizados.</p><p>Índice Composite: Um índice composto é um índice que inclui várias colunas na chave do índice.</p><p>Pode ser clusterizado ou não clusterizado.</p><p>Transação em DB é uma coleção de várias operações ex: SELECT , UPDATE , DELETE ou INSERT como</p><p>uma única unidade de trabalho.</p><p>-- Clustered index</p><p>CREATE CLUSTERED INDEX idx_customers_name</p><p>ON customers (last_name, first_name);</p><p>-- Nonclustered index</p><p>CREATE NONCLUSTERED INDEX idx_orders_date</p><p>ON orders (order_date);</p><p>-- Composite index</p><p>CREATE INDEX idx_products_category_price</p><p>ON products (category_id, price);</p><p>Transações</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 13/16</p><p>https://private-user-images.githubusercontent.com/12896018/329785542-b9dd7e47-5048-45f1-a2b8-5cb1d4c60e76.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODU1NDItYjlkZDdlNDctNTA0OC00NWYxLWEyYjgtNWNiMWQ0YzYwZTc2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTEzMjk0MzMyNTMzMWM5YWMwMzBmMDNjNzk1ZGYyNDA2YzQwODU5ZWZiZWMzM2M0NzI1OGY3MTcyNzdkNzdhMjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Y3uFtyYBlD7ltjFP5SZynOAqjIvzJUOT8eKoHJN8Q8w</p><p>https://private-user-images.githubusercontent.com/12896018/329785542-b9dd7e47-5048-45f1-a2b8-5cb1d4c60e76.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjY1NzM0NjYsIm5iZiI6MTcyNjU3MzE2NiwicGF0aCI6Ii8xMjg5NjAxOC8zMjk3ODU1NDItYjlkZDdlNDctNTA0OC00NWYxLWEyYjgtNWNiMWQ0YzYwZTc2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTE3VDExMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTEzMjk0MzMyNTMzMWM5YWMwMzBmMDNjNzk1ZGYyNDA2YzQwODU5ZWZiZWMzM2M0NzI1OGY3MTcyNzdkNzdhMjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Y3uFtyYBlD7ltjFP5SZynOAqjIvzJUOT8eKoHJN8Q8w</p><p>Podemos definir onde a transação começará e quando terminará. Para iniciar a transação, usamos a</p><p>sintaxe BEGIN . Se as consultas em uma transação foram executadas com sucesso, salvamos as</p><p>alterações usando a sintaxe COMMIT . Se as consultas em uma transação falharem na execução, então</p><p>reverteremos as alterações antes da execução da transação usando a sintaxe ROLLBACK .</p><p>Ex:</p><p>Todo banco de dados RELACIONAL deve possuir as propriedades ACID:</p><p>ATOMICIDADE: todas as operações de uma transação são realizadas. Isso significa que em caso</p><p>de sucesso deve ser executada totalmente e em casos de erros ou falhas deve ser abortada por</p><p>completo.</p><p>SELECT BALANCE FROM ACCOUNT WHERE ID = 1</p><p>UPDATE ACCOUNT SET BALANCE = BALANCE - 100 WHERE ID = 1</p><p>UPDATE ACCOUNT SET BALANCE = BALANCE + 100 WHERE ID = 2</p><p>Propriedades das Trasações</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 14/16</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/images/transaction.jpeg</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/images/transaction.jpeg</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/images/commit.png</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/images/commit.png</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/images/rollback.png</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/images/rollback.png</p><p>CONSISTENCIA: leva o DB de um estado consistente para outro estado consistente.</p><p>INDEPENDENCIA: o processamento de transações não deve interferir em outras transações.</p><p>DURABILIDADE: resultados de operações confirmadas não devem interferir em outras</p><p>transações.</p><p>Controle de transações serve para garantir as caracteristicas fundamentais de uma transação</p><p>(ACID).</p><p>Preparação: um dos participantes é eleito coordenador e envia a cada nodo uma solicitação</p><p>para preparar para o commit.</p><p>Commit: se todos os nodos participantes estão prontos, o coordenador envia um sinal de</p><p>commit para cada participante e depois executa</p><p>Se um nodo falhar na preparação do coomit, o coordenador manda um sinal de rollback</p><p>para todos.</p><p>Se o nodo coordenador cair: haverá um backup que será eleito. Em seguida por</p><p>broadcast, os outros nodos são avisados da mundança.</p><p>Lock é quando uma ação está sendo tomada DB e para evitar a concorrência de 2 comandos em</p><p>cima do mesmo registro ou tabela, um lock (travamento) é executado. Quando um lock está ativo a</p><p>transação por sua vez aguarda o desbloqueio (destravamento) da tarefa que estava à sua frente</p><p>para assim poder ser realizado.</p><p>Já o DeadLock, é um caso que ocorre nos bancos de dados quando são feitos muitos lock's que</p><p>dependem de outros lock's para obrigaçõesem, causando uma fila eterna de bloqueio.</p><p>Contribuidores 2</p><p>brunocampos01 Bruno Campos</p><p>codacy- texugo</p><p>Idiomas</p><p>Controle de transações</p><p>Protocolo 2phase commit</p><p>Lock e Deadlock</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos</p><p>sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 15/16</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/images/deadlock.png</p><p>https://github.com/brunocampos01/banco-de-dados/blob/master/images/deadlock.png</p><p>https://github.com/brunocampos01/banco-de-dados/graphs/contributors</p><p>https://github.com/brunocampos01</p><p>https://github.com/brunocampos01</p><p>https://github.com/brunocampos01</p><p>https://github.com/codacy-badger</p><p>https://github.com/codacy-badger</p><p>https://github.com/codacy-badger</p><p>SQL 100,0%</p><p>17/09/2024, 08:39 GitHub - brunocampos01/banco-de-dados: Aulas, exercícios e resumos sobre banco de dados</p><p>https://github.com/brunocampos01/banco-de-dados 16/16</p><p>https://github.com/brunocampos01/banco-de-dados/search?l=sql</p>