Una guía para principiantes para el diseño de bases de datos SQL [cerrado]

127

¿Conoces una buena fuente para aprender a diseñar soluciones SQL?

Más allá de la sintaxis básica del lenguaje, estoy buscando algo que me ayude a comprender:

  1. Qué tablas construir y cómo vincularlas
  2. Cómo diseñar para diferentes escalas (pequeña aplicación de cliente para un gran sitio web distribuido)
  3. Cómo escribir consultas SQL efectivas / eficientes / elegantes
ripper234
fuente

Respuestas:

60

Comencé con este libro: Diseño de base de datos relacional claramente explicado (Serie Morgan Kaufmann en sistemas de gestión de datos) (Libro en rústica) por Jan L. Harrington y lo encontré muy claro y útil.

y a medida que avanza, este también fue bueno. Sistemas de bases de datos: un enfoque práctico para el diseño, implementación y gestión (International Computer Science Series) (Paperback)

Creo que SQL y el diseño de la base de datos son habilidades diferentes (pero complementarias).

DD59
fuente
1
Diseño inicial de la base de datos: de principiante a profesional: ¿Clare Churcher?
enthusiasticgeek
40

Empecé con este artículo

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

Es bastante conciso en comparación con leer un libro completo y explica muy bien los conceptos básicos del diseño de la base de datos (normalización, tipos de relaciones).

Julius
fuente
Me encanta esta guía, gracias.
MsO
El enlace en esta respuesta ya no funciona.
Grizzly Peak Software
1
Parece que el enlace está funcionando nuevamente.
user8576017
1
Link ya no funciona
jat255
28

La experiencia cuenta mucho, pero en términos de diseño de tablas, puede aprender mucho de cómo operan los ORM como Hibernate y Grails para ver por qué hacen las cosas. Adicionalmente:

  1. Mantenga diferentes tipos de datos separados: no almacene direcciones en su tabla de pedidos, enlace a una dirección en una tabla de direcciones separada, por ejemplo.

  2. Personalmente, me gusta tener un número entero o una clave sustituta larga en cada tabla (que contiene datos, no aquellos que vinculan diferentes tablas, relaciones e, g., M: n) que es la clave principal.

  3. También me gusta tener una columna de marca de tiempo creada y modificada.

  4. Asegúrese de que cada columna que haga "where column = val" en cualquier consulta tenga un índice. Quizás no sea el índice más perfecto del mundo para el tipo de datos, sino al menos un índice.

  5. Configura tus claves foráneas. También configure las reglas ON DELETE y ON MODIFY cuando sea relevante, ya sea en cascada o en nulo, dependiendo de la estructura de su objeto (por lo que solo necesita eliminar una vez en la 'cabeza' de su árbol de objetos, y todos los sub-objetos de ese objeto obtienen eliminado automáticamente).

  6. Si desea modularizar su código, es posible que desee modularizar su esquema de base de datos; por ejemplo, esta es el área de "clientes", esta es el área de "pedidos" y esta es el área de "productos", y use tablas de unión / enlace entre ellos, incluso si son relaciones 1: n, y tal vez duplican la información importante (es decir, duplican el nombre del producto, el código, el precio en su tabla de detalles de pedido). Lea sobre la normalización.

  7. Alguien más recomendará exactamente lo contrario para algunas o todas las anteriores: p: nunca hay una forma real de hacer algunas cosas, ¡eh!

JeeBee
fuente
1
ORM, todos sus puntos son anti-base de datos .
PerformanceDBA
1
Agregar índices no siempre significa más velocidad. A veces en realidad hacen que las consultas sean más lentas. Realmente depende de la consulta y debe probarlos explain analyzesi un índice es un beneficio.
ArashM
2

Estas son preguntas que, en mi opinión, requieren diferentes conocimientos de diferentes dominios.

  1. Simplemente no puede saber de antemano "qué" tablas crear, debe conocer el problema que tiene que resolver y diseñar el esquema en consecuencia;
  2. Esta es una combinación de decisión de diseño de base de datos y capacidades personalizadas de su proveedor de base de datos (es decir, debe verificar la documentación de sus dbms (r) y eventualmente aprender algunos "consejos y trucos" para escalar), también la configuración de sus dbms es crucial para escalado (replicación, particionamiento de datos, etc.);
  3. una vez más, casi todos los rdbms vienen con un "dialecto" particular del lenguaje SQL, por lo que si desea consultas eficientes, debe aprender ese dialecto particular --btw. Es muy probable que escribir consultas elegantes que también sean eficientes sea un gran problema: la elegancia y la eficiencia son con frecuencia objetivos en conflicto

Dicho esto, tal vez quieras leer algunos libros, personalmente he usado este libro en mi curso universitario de base de datos (y encontré uno decente, pero no he leído otros libros en este campo, así que mi consejo es que revises algunos buenos libros en diseño de bases de datos).

cheng81
fuente
2

Ha pasado un tiempo desde que lo leí (por lo tanto, no estoy seguro de cuánto aún es relevante), pero recuerdo que el libro SQL for Smarties de Joe Celko proporciona mucha información sobre cómo escribir consultas elegantes, efectivas y eficientes. .

usuario29208
fuente
la cuarta edición 2010 podría estar actualizada
rleir
1
El libro de Celko es un estudio de errores y promueve la noción de implementar en código lo que debería implementarse en la base de datos.
PerformanceDBA