2011-09-23 16 views
6

Estoy comenzando un proyecto y he decidido usar Django.Django: Mejores prácticas para el diseño de bases de datos

Mi pregunta es sobre la creación de la base de datos. He leído el tutorial y algunos libros y esos siempre comienzan a crear los modelos, y luego sincronizan la Base de Datos. Debo decir que eso es un poco raro para mí. Siempre comencé con la base de datos, definiendo el esquema y luego creando mis abstracciones de base de datos (modelos, entidades, etc.).

He revisado algunas aplicaciones de conexión externa y aquellas que también usan esa práctica de "modelo primero".

puedo ver algunas ventajas para el enfoque de "modelo de primera", como la portabilidad, re-despliegue, etc.

Pero también veo algunas desventajas: cómo crear índices, el tipo de índice, disparadores, vistas, SP, etc.

Entonces, ¿cómo se inicia un proyecto de la vida real?

+1

planeo mi esquema de db, a continuación, ponerlo en práctica a través de un modelo de Django. Puede crear índices en django o a través de su back-end db. – dm03514

+0

+1 Buena "mixin". – santiagobasulto

Respuesta

11

Disparadores, vistas y procedimientos almacenados no son realmente parte del mundo de Django. Se puede hacer para usarlos, pero es doloroso e innecesario. Los desarrolladores de Django consideran que la lógica empresarial pertenece a Python, no a su base de datos.

En cuanto a los índices, puede crear ellos junto con sus modelos (con cosas como db_index y unique_together, o se puede añadir más tarde a través de las migraciones de bases de datos usando algo como del Sur.

+0

+1 buena respuesta. Gracias. Ahora, pregunto: ¿nunca utilizas disparadores, SP o vistas? ¿Pueden existir aplicaciones del mundo real sin esas cosas? Por favor, no me malinterprete, soy nuevo en el mundo de Python + Django. Vengo de Big Architectures Java Apps, y confiamos en esas cosas de DB. – santiagobasulto

+1

+1 para el uso del sur. Puede administrar sus índices y similares utilizando migraciones, lo que hace que la vida sea mucho más fácil. –

+0

Los desarrolladores de Oracle insisten en que un principio indiscutible del diseño de la base de datos es que las claves primarias deben ser inmutables. Realmente no tienen una buena razón teórica para esa afirmación. Simplemente sucede que Oracle no admite 'ON UPDATE CASCADE'. Creo que su opinión sería diferente si Django hubiera admitido activadores, vistas, procedimientos almacenados, restricciones de verificación y restricciones diferidas desde el principio. –

7

Parcialmente no escribimos SQL (ej. crear índice, crear tablas, etc ...) para nuestros modelos, y en cambio confiar en Django para generarlo para nosotros.

Está absolutamente bien comenzar con el diseño de su aplicación desde la capa del modelo, ya que puede confiar en Django para generar la base de datos correcta sql necesaria para usted.

Cómo nunca, Django proporciona varias funciones para replicar estas funciones de base de datos:

  • desencadenantes: Django code or MySQL triggers
  • índices: se puede especificar con db_index=True
  • restricciones únicas: unique = True o unique_togther = (('field1', field2'),) de restricción única compuesta.

La ventaja de utilizar Django en lugar de escribir sql es que se abstrae de la base de datos particular que está utilizando. En otras palabras, podría estar en SQLite un día y cambiar a PostgresQL o MySQL al siguiente y el cambio sería relativamente sencillo.

Ejemplo:

Cuando se ejecuta esto:

python manage.py syncdb 

Django crea automáticamente las tablas, índices, triggers, etc, que necesita para apoyar los modelos que ha creado.Si no se siente cómodo con la creación de su base de datos de Django para usted, siempre se puede utilizar:

python manage.py sqlall 

Esto imprimirá las sentencias SQL que Django necesitaría tener a fin de que sus modelos funcionen correctamente. Hay otras sql comandos para su uso:

véase: https://docs.djangoproject.com/en/1.3/ref/django-admin/#sql-appname-appname

+0

Creo que esto es correcto. Pero, siempre digo que no es común cambiar las bases de datos. Quiero decir, todos toman esto como una gran ventaja, pero rara vez sucede. Buena respuesta BTW +1 – santiagobasulto

+0

Por lo que vale (y como este hilo tiene más de 2 años, no mucho) Recientemente cambié dos proyectos que había comenzado como SQLite (por lo que podría ponerlos en funcionamiento en un sistema mínimo)) para usar Postgres por razones de rendimiento/multiproceso. – Foon

Cuestiones relacionadas