3. El Diseño de Bases de Datos
Las bases de datos tienen, por definición, un diseño. Y cuando hablamos de diseño, nos referimos al proceso de
modelar los distintos conjuntos de datos y decidir qué vamos a hacer con ellos.
4. Por qué es importante el diseño de base de datos
Un buen diseño de tu base de datos es fundamental porque aporta varias ventajas. Las más importantes son las
siguientes:
● Agilización del procesamiento de datos. Es evidente que, cuanto más funcional sea el diseño, más fácil será que
se agilice el procesamiento de los datos.
● Ahorro del espacio. El ahorro de espacio es más sencillo, puesto que con un diseño de datos optimizado se
elimina la duplicación, lo que siempre emplea espacio.
● Mejor precisión e integridad de los datos. Cuando el diseño de datos es óptimo, se evitan pérdidas de datos y,
sobre todo, se gana en precisión. Esta ya es una razón para darle importancia a esta cuestión.
5. Aspectos importantes
Un buen diseño de tu base de datos es fundamental porque aporta varias ventajas:
● Agilización del procesamiento de datos. Es evidente que, cuanto más funcional sea el diseño, más fácil será que
se agilice el procesamiento de los datos.
● Ahorro del espacio. El ahorro de espacio es más sencillo, puesto que con un diseño de datos optimizado se
elimina la duplicación, lo que siempre emplea espacio.
● Mejor precisión e integridad de los datos. Cuando el diseño de datos es óptimo, se evitan pérdidas de datos y,
sobre todo, se gana en precisión. Esta ya es una razón para darle importancia a esta cuestión.
7. Es un tipo de software que recopila e interpreta comandos SQL para que se puedan realizar las operaciones apropiadas en
la base de datos relacional. El objetivo del motor SQL es crear, leer, actualizar y eliminar datos (CRUD) de una base de
datos.
8. ¿Cómo funciona un motor SQL?
SQL tiene muchas etapas en las que el proceso de compilación y ejecución de consultas se llevan a cabo. Cada motor de
base de datos SQL tiene dos componentes principales: compilador y máquina virtual para ejecutar consultas.
Etapas principales de la ejecución completa de una consulta:
● Compilación (análisis, controles y semántica)
● Unión
● Optimización
● Ejecución
9. Compilación - Análisis, controles y semántica
Es parte del proceso de compilación, y al compilar el análisis, la instrucción de consulta se tokeniza en palabras
individuales y cláusulas apropiadas.
10. Compilación - Análisis, controles y semántica
La compilación de semánticas verifica la validación de la declaración y la compara con el catálogo del sistema.
11. Compilación - Análisis, controles y semántica
Crea un plan de ejecución generando un tercer árbol de nodos que forman una lista de instrucciones.
13. Componentes de SQL
El lenguaje SQL está compuesto por:
● Comandos.
● Cláusulas.
● Operadores Lógicos.
● Operadores de comparación.
● Funciones de Agregado.
14. Que es una consulta SQL
Son una forma de buscar y recopilar información de una o más tablas para conseguir información detallada de una base de
datos. Las tres formas de una consulta son:
● Subselección
● Selección completa
● Sentencia-select.
Hay tres tipos de combinaciones:
● Combinación Interna.
● Combinaciones externas
● Combinaciones cruzadas.
16. Porque el ORM de Django es lazy
Esto significa que ninguna consulta se realiza hasta que el resultado es requerido, esto regularmente en la vista.
¿Qué es N+1 Query?
¿Qué es un QuerySet?
Un QuerySet es, en esencia, una lista de objetos de un modelo determinado. Un QuerySet te permite leer los datos de la
base de datos, filtrarlos y ordenarlos.
18. Uso de herramientas de depuración
Herramientas que permitan ver el resultado estadístico de las consultas SQL.
● django-debug-toolbar Puede ver los resultados de depuración directamente en el lado web
● django-extensionsPuede depurar en el entorno de shell
19. Considerar la evaluación lazy del ORM
Se debe estar atento en el uso de los QuerySet, ya que solo se ejecutará cuando sea requerido.
Evaluado el QuerySet
22. Los atributos de modelo no se almacenan en caché
Al momento de evaluar un QuerySet, las relaciones externas e inversas no se
incluyen en la consulta. Por lo tanto no se incluyen en la caché.
23. Usar select_related() y prefetch_related() al necesitar
objetos relacionados con atributos externos/inversos.
Estos métodos le indican a Django que necesita los objetos relacionados.
24. No realizar consultas a la DB en bucles
Realizar la llama a la DB antes de entrar a un bucle.
25. Uso de iterator() para iterar a través de un QuerySet
Si sabe que su QuerySet podría ser muy grande y solo necesita iterarlo una vez,
tiene sentido eliminar el uso del caché para preservar la memoria y otros gastos
generales.
26. Trabaje en la BD en lugar de Python
Su base de datos puede hacer casi cualquier cosa relacionada con los datos
mucho más rápido que Python. Django proporciona muchas herramientas para
hacer esto posible.
27. Obtener solo lo necesario
values()y values_list()proporcione listas, diccionarios o tuplas que evalúen solo
los campos que especifique.
28. Usar count() y exists() cuando no se necesite el
contenido del QuerySet
Solo utilízarlos cuando no necesite evaluar el QuerySet por otros motivos.
29. Uso de delete() y update() cuando sea posible.
En lugar de actualizar las instancias del modelo de una en una, delete()y
update()permitirle hacerlo de forma masiva.
30. Use los valores de claves externas directamente
El ORM de Django recupera y almacena en caché automáticamente las claves
externas, así que utilícelas en lugar de provocar una consulta de base de datos
innecesaria.
32. Consultas Raw
El método de administrador raw() se puede utilizar para realizar consultas SQL sin
formato que devuelven instancias de modelo.
>>> for p in Person.objects.raw('SELECT * FROM myapp_person'):
... print(p)
Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM myapp_person')
Person.objects.raw('SELECT id, first_name FROM myapp_person')
people = Person.objects.raw('SELECT *, age(birth_date) AS age FROM myapp_person')
>>> for p in people:
... print("%s is %s." % (p.first_name, p.age))
33. Ejecución directa de SQL
A veces, incluso Manager.raw() no es suficiente: es posible que deba realizar consultas que no se
asignen limpiamente a los modelos, o ejecutar directamente consultas UPDATE , INSERT AR o
DELETE .
from django.db import connection
def my_custom_sql(self):
with connection.cursor() as cursor:
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
34. Llamados a procedimientos almacenados
Llama a un procedimiento almacenado de base de datos con el nombre dado. Se
puede proporcionar una secuencia ( params ) o diccionario ( kparams ) de
parámetros de entrada. La mayoría de las bases de datos no son compatibles con
kparams .
with connection.cursor() as cursor:
cursor.callproc('test_procedure', [1, 'test'])