Erros comúns feitos no deseño de bases de datos

Se está a traballar cunha base de datos que ten centos de rexistros ou millóns de rexistros, o bo deseño de bases de datos sempre é importante. Non só fará que a recuperación da información sexa moito máis sinxela, tamén simplificará expandir a base de datos no futuro. Desafortunadamente, é fácil caer nunhas poucas trampas que poden dificultar o futuro.

Hai libros enteiros escritos sobre a normalización dunha base de datos, pero se simplemente evita estes erros comúns, estará no bo camiño para o bo deseño da base de datos.

Erro de base de datos n. º 1: repetir os campos nunha táboa

Unha regra xeral básica para o bo deseño da base de datos é recoñecer a repetición de datos e poñer esas columnas repetidas na súa propia táboa. Repetindo os campos nunha táboa é común para os que viñeron do mundo das follas de cálculo, pero mentres as follas de cálculo tenden a ser planas polo deseño, as bases de datos deben ser relacionales. É como pasar de 2D a 3D.

Afortunadamente, os campos repetitivos adoitan ser fáciles de localizar. Basta con botar unha ollada a esta táboa:

Orde ID Produto1 Produto2 Produto3
1 Teddy Bears Jelly Beans
2 Jelly Beans

Que pasa cando unha orde contén catro produtos? Necesitaríamos engadir outro campo á táboa para soportar máis de tres produtos. E se construímos unha aplicación cliente en torno á táboa para axudarnos a introducir datos, é posible que necesitemos modificar isto co novo campo do produto. E como atopamos todas as ordes con Jellybeans na orde? Quedaríamos obrigados a consultar cada campo de produto na táboa cunha declaración SQL que podería parecerse a: SELECCIONAR * FROM Produtos DONDE Product1 = 'Jelly Beans' Ou Product2 = 'Jelly Beans' Ou Product3 = 'Jelly Beans'.

En lugar de ter unha única táboa que enche toda a información, teremos tres táboas que cada un contén unha información distinta. Neste exemplo queremos unha táboa de pedidos con información sobre a orde en si, unha táboa de produtos con todos os nosos produtos e unha tableta de produtos que ligou os produtos á orde.

Orde ID ID de cliente Data da orde Total
1 7 24/01/17 19.99
2 9 25/01/17 24.99
ProdutoID Produto Conde
1 Teddy Bears 1
2 Jelly Beans 100
Produto OrdeID ProdutoID Orde ID
101 1 1
102 2 1

Observe como cada táboa ten o seu propio campo ID único. Esta é a clave principal. Ligamos táboas usando un valor de clave primaria como clave estranxeira noutra táboa. Lea máis sobre chaves primarias e claves estranxeiras.

Erro de base de datos n. ° 2: incrustar unha táboa nunha táboa

Este é outro erro común, pero non sempre se destaca tanto como os campos repetitivos. Ao deseñar unha base de datos, quere asegurarse de que todos os datos dunha táboa se relacionen. É como o xogo do neno sobre o que é diferente. Se tes unha banana, unha morango, un melocotón e un televisor, o televisor probablemente pertence a outro lugar.

Na mesma liña, se ten unha táboa de vendedores, toda a información nesa táboa debe relacionarse específicamente con esa persoa vendedora. Calquera información extra que non sexa exclusiva para esa persoa vendedora pode pertencer a outra parte da súa base de datos.

SalesID Primeira Último Enderezo Número de teléfono Oficina Número de Office
1 Sam Elliot 118 Main St, Austin, TX (215) 555-5858 Austin Downtown (212) 421-2412
2 Alicia Smith 504 2nd Street, Nova York, NY (211) 122-1821 Nova York (leste) (211) 855-4541
3 Joe Parroquia 428 Aker St, Austin, TX (215) 545-5545 Austin Downtown (212) 421-2412

Aínda que esta táboa semella que está todo relacionada co vendedor individual, realmente ten unha táboa inserida dentro da táboa. Observe como se repiten Office e OfficeNumber con "Austin Downtown". E se cambia un número de teléfono da oficina? Necesitaría actualizar un conxunto de datos para cambiar unha única peza de información, o que nunca é bo. Estes campos deben ser movidos á súa propia táboa.

SalesID Primeira Último Enderezo Número de teléfono OfficeID
1 Sam Elliot 118 Main St, Austin, TX (215) 555-5858 1
2 Alicia Smith 504 2nd Street, Nova York, NY (211) 122-1821 2
3 Joe Parroquia 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID Oficina Número de Office
1 Austin Downtown (212) 421-2412
2 Nova York (leste) (211) 855-4541

Este tipo de deseño tamén lle dá a capacidade de engadir información adicional á táboa de Office sen crear un pesadelo de desorde na táboa de vendas. Imaxina canto traballo sería seguir o enderezo da rúa, a cidade, o estado e o código postal se toda esa información estaba na táboa de vendas.

Erro de base de datos n. ° 3: Pór dúas ou máis partes de información nun único campo

Incrustar a información da oficina na táboa de vendas non foi o único problema con esa base de datos. O campo de enderezo contiña tres informacións: o enderezo, a cidade eo estado. Cada campo da base de datos só debe conter unha soa información. Cando ten varias pezas de información nun só campo, pode facerse máis difícil de consultar a base de datos para obter información.

Por exemplo, e se queremos realizar unha consulta sobre todos os vendedores de Austin? Necesitamos buscar dentro do campo de enderezos, que non só é ineficiente, pero pode devolver información incorrecta. Despois de todo, que pasa se alguén vivía na rúa Austin en Portland, Oregon?

Vexa como debería parecer a mesa:

SalesID Primeira Último Enderezo 1 Enderezo2 Cidade Estado Zip Teléfono
1 Sam Elliot 118 Main St Austin TX 78720 2155555858
2 Alicia Smith 504 2ª Nova York NY 10022 2111221821
3 Joe Parroquia 428 Aker St Apt 304 Austin TX 78716 2155455545

Hai algunhas cousas a destacar aquí. En primeiro lugar, "Address1" e "Address2" parecen estar baixo o erro dos campos repetitivos.

Non obstante, neste caso refírense a pezas separadas de datos que se relacionan directamente coa persoa que vende e non a un grupo repetitivo de datos que debería incluír na súa propia táboa.

Ademais, como un erro extra para evitar, observe como o formato do número de teléfono foi eliminado da táboa. Debe evitar almacenar o formato dos campos cando sexa posible. No caso dos números de teléfono, hai moitas formas en que as persoas escriben un número de teléfono: 215-555-5858 ou (215) 555-5858. Isto faría que sexa máis difícil atopar unha persoa de venda polo seu número de teléfono ou facer unha procura de vendedores no mesmo código de área.

Erro de base de datos n. º 4: Non se usa unha clave primaria correcta

Na maioría dos casos, vai querer usar un número de incremento automático ou algún outro número xerado ou alfanumérico para a súa chave primaria. Debe evitar usar calquera información real para a clave principal aínda que pareza que faría un bo identificador.

Por exemplo, cada un ten o noso propio número de seguro social individual, polo que o uso do número de seguridade social para unha base de datos do empregado pode parecer unha boa idea. Pero, aínda que é raro, é posible cambiar un número de seguridade social e nunca queremos cambiar a nosa clave primaria.

E ese é o problema co uso da información real como un valor clave. Pode cambiar.

Erro de base de datos n. ° 5: Non se usa unha convención de nomeamento

Isto pode non soar como un gran negocio cando comezar a deseñar a súa base de datos, pero unha vez que chegue ao momento de escribir consultas contra a base de datos para recuperar información, ter unha convención de nomeamento axudará a memorizar nomes de campo.

Imaxínache canto máis difícil será ese proceso se os nomes foron almacenados como FirstName, LastName nunha táboa e first_name, last_name noutra táboa.

As dúas convencións de nomeamento máis populares son capitalizar a primeira letra de cada palabra no campo ou separar palabras usando un guión baixo. Tamén pode ver algúns desenvolvedores capitalizando a primeira letra de cada palabra excepto a primeira palabra: firstName, lastName.

Tamén quererá decidir sobre o uso de nomes singulares de táboas ou nomes de táboas en plural. ¿É unha táboa de pedidos ou unha táboa de pedidos? ¿É unha táboa de clientes ou táboa de clientes? Unha vez máis, non quere quedar atrapado cunha táboa de pedidos e unha táboa de clientes.

A convención de nomeamento que elixe non é tan importante como o proceso de escoller e adherirse a unha convención de nomeamento.

Erro de base de datos n. ° 6: indexación indebida

A indexación é unha das cousas máis difíciles de conseguir, especialmente para os novos no deseño da base de datos. Todas as chaves primarias e chaves estranxeiras deben estar indexadas. Estas son as táboas de ligazón entre si, polo tanto, sen un índice, verá un desempeño moi baixo da súa base de datos.

Pero o que moitas veces se perde son os outros campos. Estes son os campos "ONDE". Se moitas veces vai limitar a súa busca usando un campo nunha cláusula WHERE, quere pensar en poñer un índice sobre ese campo. Non obstante, non quere indexar demasiado a táboa, que tamén pode prexudicar o rendemento.

Como decidir? Isto forma parte da arte do deseño da base de datos. Non hai límites duros sobre cantos índices debes poñer nunha táboa. Principalmente, quere indexar calquera campo que se use con frecuencia nunha cláusula WHERE. Lea máis sobre indexar correctamente a súa base de datos.