una transact modificar existente ejemplos delete columna auto_increment agregar sql database design database-design scalability

transact - Una guía para principiantes sobre el diseño de bases de datos SQL



select sql server (7)

Comencé con este libro: Relational Database Design Clearly Explained (The Morgan Kaufmann Series in Data Management Systems) (Paperback) de Jan L. Harrington y lo encontré muy claro y útil

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

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

¿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 para construir y cómo vincularlas
  2. Cómo diseñar para diferentes escalas (APP de cliente pequeño para un gran sitio web distribuido)
  3. Cómo escribir consultas SQL efectivas / eficientes / elegantes


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 las capacidades personalizadas de su proveedor de base de datos (es decir, debe verificar la documentación de sus (r) dbms y eventualmente aprender algunos "consejos y trucos" para escalar), también la configuración de su dbms es crucial para escalado (replicación, particionamiento de datos, etc.);
  3. de nuevo, casi todas las rdbms vienen con un "dialecto" particular del lenguaje SQL, por lo que si quieres consultas eficientes tienes que aprender ese dialecto particular --btw. Probablemente, escribir una consulta elegante que también sea eficiente es un gran problema: la elegancia y la eficiencia son a menudo objetivos conflictivos:

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


Ha pasado un tiempo desde que lo leí (por lo tanto, no estoy seguro de cuánto de él sigue siendo relevante), pero mi recuerdo es que el libro SQL for Smarties de Joe Celko proporciona mucha información para redactar consultas elegantes, eficaces y eficientes. .


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

  1. Mantenga distintos tipos de datos por separado: 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, e, g., M: relaciones) 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. Tal vez no sea el índice más perfecto del mundo para el tipo de datos, pero al menos un índice.

  5. Configura tus claves externas. Configure también reglas ON DELETE y ON MODIFY donde sea relevante, ya sea en cascada o set null, 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 objetos secundarios de ese objeto eliminado automáticamente).

  6. Si desea modularizar su código, puede modularizar su esquema de BD; por ejemplo, esta es el área de "clientes", esta es el área de "pedidos", y esta es el área de "productos", y usa tablas de unión / vinculación entre ellos, incluso si son relaciones 1: n, y tal vez duplicar la información importante (es decir, duplicar el nombre del producto, el código, el precio en la tabla order_details). Lea sobre la normalización.

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