Constraints
===========

Constraints are defined per field and control its content. Currently, two
types of constraints are supported:

* Whether a field is mandatory/required and the user needs to fill it
* Whether a field should have unique content and no two rows can exist in the
  database with the same value of this field

In our library/book example, we define a name of the library to be unique and
mandatory and the title of a book should be required:

.. code-block:: yaml

    library:
        table: lib
        label: Library
        fields:
            name:
                type: text
                required: true
                unique: true
    book:
        table: book
        label: Book
        fields:
            title:
                type: text
                required: true
            author:
                type: text
            library:
                type: reference
                reference:
                    nameField: name
                    entity: library

So it's just as easy as adding either "required: true" or "unique: true" to the
field definition. Note that both constraints are used for the field "name" in
the entity "library".
