Explorando Dicas design de banco
Um dos aspectos mais importantes de qualquer projeto de desenvolvimento de aplicativos é o design de banco de dados. E assim, sem mais delongas, aqui estão algumas dicas para desenhar boas bases de dados.
Menu
Use o número certo de mesas
Dentro Amadeus, Imperador da Alemanha critica uma das obras de Mozart como tendo "muitas notas." Mozart responde indignado que ele usa nem demais, nem muito poucas notas, mas o número exato de notas que a composição requer.
Assim deve ser com design de banco de dados. Seu banco de dados deve ter como muitas mesas como a aplicação requer - não mais, não menos. Não existe um número único "direito" de tabelas para todos os bancos de dados.
designers de banco de dados inexperientes têm uma tendência a usar também algumas mesas - às vezes tentando empinar todo um banco de dados no valor de informações em uma única tabela. No outro extremo, são bancos de dados com dezenas de mesas, cada uma composta de apenas alguns campos.
Evitar a repetição de dados
Um dos princípios fundamentais do design de banco de dados relacional é lidar com dados repetidos por dividi-lo para fora em uma tabela separada. Por exemplo, nos velhos tempos de processamento de arquivo simples, era comum para criar registros de faturas que tinha espaço para um certo número de itens de linha. Assim, o registro da fatura teria campos com nomes como Item1, Item2, Item3, e assim por diante.
Mau!
Sempre que você encontrar-se numeração nomes de campo como esse, você deve criar uma tabela separada. No caso do registro da fatura, você deve criar uma tabela separada para armazenar os dados do item de linha.
Evitar dados redundantes
Ao projetar as tabelas que compõem seu banco de dados, para tentar evitar a criação de dados redundantes. Sempre que dados redundantes arrasta-se em um banco de dados, introduz a possibilidade de que os dados se tornará corrupto. Por exemplo, suponha que você armazenar o nome de um cliente em duas tabelas diferentes. Então, se você atualizar o nome em uma das mesas, mas não o outro, o banco de dados tornou-se inconsistente.
O tipo mais óbvia de erro redundante-dados é criar um campo que existe em duas ou mais mesas. Mas existem tipos mais sutis de dados redundantes. Por exemplo, considere um Fatura tabela que contém um LineItemTotal campo que representa a soma do Total campos em cada um dos itens de linha da fatura. Tecnicamente, este campo representa redundante de dados os dados é também armazenada na Total campos de cada item de linha.
Se você deve permitir que este tipo de redundância depende da aplicação. Em muitos casos, é melhor colocar-se com a redundância para a conveniência e eficiência de não ter que recalcular o total de cada vez que os dados são acessados. Mas é sempre vale a pena considerar se o maior comodidade vale a pena o risco de danificar os dados.
Use uma convenção de nomenclatura
Para evitar confusão, escolher uma convenção de nomenclatura para os objetos de banco de dados e cumpri-lo. Dessa forma, suas tabelas de banco de dados, colunas, restrições e outros objetos serão nomeados de forma consistente e previsível. (Basta pensar as economias em aspirina.)
Você pode argumentar a partir de agora até o dia de São Swithen sobre o que as convenções de nomenclatura devemos estar. Isso não importa tanto. O que importa é que você faça uma convenção - e segui-lo.
Evite nulos
Permitindo nulos em suas tabelas de banco de dados complica significativamente a programação de aplicativo necessário para acessar as tabelas. Como resultado, evitar nulos especificando NOT NULL sempre que puder. Use nulos raramente, e só quando você realmente precisa deles.
Nulos são muitas vezes mal utilizado de qualquer maneira. O uso correto de null é para um valor que é unknown- não para um valor em branco ou vazia. Por exemplo, considere um registro de endereço típico que permite que duas linhas de endereço, de nome Endereço 1 e Endereço 2. A maioria dos endereços têm apenas um endereço, para a segunda linha de endereço está em branco. O valor desta segunda linha de endereços é, de facto, conhecido - que é em branco. Isso não é a mesma coisa que null. Null implicaria que o endereço pode ter um segundo endereço de linha que só não sei o que é.
Mesmo para colunas que podem parecer apropriado para os nulos, geralmente é mais conveniente para deixar apenas o valor da coluna em branco para valores que não são conhecidos. Por exemplo, considere um número de telefone coluna numa Cliente mesa. É seguro assumir que todos os seus clientes têm números de telefone, de modo que seria correto usar nulo para números de telefone que você não conhece. No entanto, a partir de um ponto de vista prático, é tão fácil para não permitir nulos para a coluna de número de telefone, e deixar os números de telefone desconhecidos em branco.
Evitar códigos secretos
Evite campos com nomes como Tipo de Cliente, em que o valor do campo é uma de várias constantes que não são definidas noutro lugar na base de dados, tal como R para Varejo ou W para Atacado. Você pode ter apenas estes dois tipos de clientes atuais, mas as necessidades da aplicação pode mudar no futuro, exigindo um terceiro tipo de cliente.
Uma alternativa seria criar uma tabela separada de códigos do tipo de cliente (chamá-lo CustomerTypes), E, em seguida, criar uma restrição de chave externa de modo que o valor do Tipo de Cliente coluna deve aparecer na CustomerTypes mesa.
Use restrições sabiamente
restrições permitem evitar alterações no banco de dados que violam a consistência interna de seus dados. Por exemplo, uma restrição de verificação permite validar apenas os dados que atende a determinados critérios. Por exemplo, você pode usar uma restrição de verificação para garantir que o valor de um campo chamado Preço é maior do que zero.
UMA restrição de chave estrangeira exige que o valor de uma coluna numa tabela deve corresponder ao valor que existe em alguma outra tabela. Por exemplo, se você tem um LineItems tabela com uma coluna chamada ID do produto, e um Produtos tabela com uma coluna, também chamada ID do produto, você poderia usar uma restrição de chave externa para se certificar de que o ID do produto valor para cada linha na LineItems tabela corresponde a uma linha existente na Produtos mesa.
Use dispara quando apropriado
UMA gatilho é um procedimento que entra em ação quando certos dados do banco de dados é atualizado ou acessado. Gatilhos são uma ótima maneira de fazer cumprir as regras de banco de dados que são mais complicados do que restrições simples. Por exemplo, suponha que um Fatura tabela contém um ItemCount coluna cujo valor é o número de itens de linha para a factura. Uma maneira de manter o valor desta coluna automaticamente seria criar gatilhos que incrementar o ItemCount coluna sempre que um item de linha é inserida e diminuir o ItemCount coluna sempre que um item de linha é excluído. Às vezes, a automação é uma coisa linda.
Use procedimentos armazenados
Procedimentos armazenados são procedimentos SQL que são escondido no banco de dados e são parte dela. Existem várias vantagens de usar procedimentos armazenados em vez de codificação de SQL em suas aplicações:
- Usando procedimentos armazenados remove o fardo de programação SQL de seus programadores de aplicativos. Em vez disso, faz com que o SQL usado para acessar o banco de dados de uma parte do banco de dados em si - não sem confusão, sem confusão. Todos os programas de aplicação tem a fazer é chamar o apropriado procedimentos armazenados para selecionar, inserir, atualizar ou excluir dados do banco de dados.
- Os procedimentos armazenados são mais eficiente como um meio de operações de manipulação, pois o servidor de banco de manipula toda a operação.
- Os procedimentos armazenados também são mais eficientes, pois reduzem a quantidade de tráfego de rede entre o servidor de banco de dados e servidor Web.
- Finalmente, procedimentos armazenados são mais seguras, pois reduzem o risco de ataques de injeção de SQL.