Add some useful notes in devref/db_layer.rst

Added information about difference between default and server_default
parameters for columns.

This was suggested in comments to I466202ac8c378f1e19e42ec2880d0c8fbc35fd28.

Related-bug: #1295539

Change-Id: I605ab8a4f3af80497fb8ad21d43fa13d8d533325
This commit is contained in:
Ann Kamyshnikova 2015-03-24 16:57:55 +03:00
parent 97372fe6ff
commit 4c6b565371
1 changed files with 21 additions and 0 deletions

View File

@ -1,6 +1,27 @@
Neutron Database Layer
======================
This section contains some common information that will be useful for
developers that need to do some db changes.
Difference between 'default' and 'server_default' parameters for columns
------------------------------------------------------------------------
For columns it is possible to set 'default' or 'server_default'. What is the
difference between them and why should they be used?
The explanation is quite simple:
* `default <http://docs.sqlalchemy.org/en/rel_0_9/core/metadata.html#sqlalchemy.schema.Column.params.default>`_ - the default value that SQLAlchemy will specify in queries for creating instances of a given model;
* `server_default <http://docs.sqlalchemy.org/en/rel_0_9/core/metadata.html#sqlalchemy.schema.Column.params.server_default>`_ - the default value for a column that SQLAlchemy will specify in DDL.
Summarizing, 'default' is useless in migrations and only 'server_default'
should be used. For synchronizing migrations with models server_default parameter
should also be added in model. If default value in database is not needed,
'server_default' should not be used. The declarative approach can be bypassed
(i.e. 'default' may be omitted in the model) if default is enforced through
business logic.
Tests to verify that database migrations and models are in sync
---------------------------------------------------------------