Um guia para iniciantes em design de banco de dados SQL [fechado]

127

Você conhece uma boa fonte para aprender como projetar soluções SQL?

Além da sintaxe básica da linguagem, estou procurando algo para me ajudar a entender:

  1. Quais tabelas criar e como vinculá-las
  2. Como projetar para diferentes escalas (APP de cliente pequeno em um site distribuído enorme)
  3. Como escrever consultas SQL eficazes / eficientes / elegantes
ripper234
fonte

Respostas:

60

Comecei com este livro: Design de banco de dados relacional claramente explicado (série Morgan Kaufmann em sistemas de gerenciamento de dados) (brochura) de Jan L. Harrington e achei muito claro e útil

e, à medida que você avança, este também foi bom. Sistemas de banco de dados: uma abordagem prática ao projeto, implementação e gerenciamento (International Computer Science Series) (Brochura)

Eu acho que SQL e design de banco de dados são habilidades diferentes (mas complementares).

DD59
fonte
1
Começando o design do banco de dados: do iniciante ao profissional - Clare Churcher?
enthusiasticgeek
40

Comecei com este artigo

http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html

É bastante conciso comparado à leitura de um livro inteiro e explica muito bem os conceitos básicos de design de banco de dados (normalização, tipos de relacionamentos).

Julius
fonte
Amo este guia, obrigado.
MsO 19/01/16
O link nesta resposta não está mais funcionando.
Grizzly Peak Software
1
Parece que o link está funcionando novamente.
user8576017
1
O link não está mais funcionando #
jat255
28

A experiência conta muito, mas em termos de design de tabelas, você pode aprender muito sobre como os ORMs como o Hibernate e o Grails operam para ver por que eles fazem as coisas. Além do que, além do mais:

  1. Mantenha diferentes tipos de dados separados - não armazene endereços na sua tabela de pedidos, vincule-os a um endereço em uma tabela de endereços separados, por exemplo.

  2. Pessoalmente, gosto de ter uma chave substituta inteira ou longa em cada tabela (que contém dados, e não aquelas que vinculam tabelas diferentes, por exemplo, relacionamentos m: n) que é a chave principal.

  3. Também gosto de ter uma coluna de carimbo de data e hora criada e modificada.

  4. Verifique se todas as colunas que você faz "where column = val" em qualquer consulta têm um índice. Talvez não seja o índice mais perfeito do mundo para o tipo de dados, mas pelo menos um índice.

  5. Configure suas chaves estrangeiras. Configure também as regras ON DELETE e ON MODIFY, quando relevantes, para cascatear ou definir nulo, dependendo da estrutura do seu objeto (portanto, você só precisa excluir uma vez na "cabeça" da árvore de objetos e todos os subobjetos desse objeto serão removido automaticamente).

  6. Se você deseja modularizar seu código, modularize seu esquema de banco de dados - por exemplo, esta é a área "customers", esta é a área "orders" e esta é a área "products" e usa tabelas de junção / link entre eles, mesmo que sejam relações 1: n, e talvez duplique as informações importantes (por exemplo, duplique o nome do produto, código e preço na tabela order_details). Leia sobre normalização.

  7. Outra pessoa recomendará exatamente o oposto para alguns ou todos os itens acima: p - nunca uma maneira verdadeira de fazer algumas coisas, eh!

JeeBee
fonte
1
ORM, todos os seus pontos são anti-banco de dados .
PerformanceDBA
1
Adicionar índices nem sempre significa mais velocidade. Às vezes, eles realmente tornam as consultas mais lentas. Realmente depende da consulta e você deve testá-los explain analyzese um índice é um benefício.
ArashM
2

Essas são perguntas que, na minha opinião, exigem conhecimentos diferentes de diferentes domínios.

  1. Você simplesmente não pode saber antecipadamente "quais" tabelas criar, precisa conhecer o problema que precisa resolver e projetar o esquema de acordo;
  2. Essa é uma combinação de decisão de design do banco de dados e dos recursos personalizados do fornecedor do banco de dados (por exemplo, você deve verificar a documentação do seu (r) dbms e, eventualmente, aprender algumas "dicas e truques" para dimensionar); também a configuração do seu dbms é crucial para dimensionamento (replicação, particionamento de dados e assim por diante);
  3. mais uma vez, quase todos os rdbms vêm com um "dialeto" específico da linguagem SQL, portanto, se você deseja consultas eficientes, precisa aprender esse dialeto específico --btw. provavelmente escrever uma consulta elegante que também seja eficiente é importante: elegância e eficiência são freqüentemente objetivos conflitantes -

Dito isto, talvez você queira ler alguns livros, pessoalmente eu usei este livro em meu curso universitário datbase (e encontrou um decente, mas eu não ler outros livros neste campo, por isso o meu conselho é para verificar para fora para alguns bons livros sobre design de banco de dados).

cheng81
fonte
2

Já faz um tempo desde que o li (então, não tenho certeza de quanto ainda é relevante), mas lembro que o livro SQL for Smarties de Joe Celko fornece muitas informações sobre como escrever consultas elegantes, eficazes e eficientes .

user29208
fonte
a quarta edição de 2010 pode estar em dia #
rleir
1
O livro da Celko é um estudo sobre erros e promove a noção de implementação em código, o que deve ser implementado no banco de dados.
PerformanceDBA