======Qookie Database Design====== =====Design goals===== The following is a prioritized list of design goals for the Qookie database. - **Simplicity**, the database should not (necessarily) require external services to run in order to work. - **Speed**, the database should respond quickly to search queries. - **Ease of backup**, the database should be easy to backup. - **Portability**, the database should be easily ported to other formats/databases. The following is a list of things that are **not** required by the Qookie database. * **Size**, the database size will not be an issue, since it will probably never contain more than a couple of thousands entries. =====Database middleware===== The database is implemented through a middleware layer, in order to abstract the physical database access away from the data itself.\\ This is also done in order to make porting the data storing to other databases an easy task. =====Data definitions===== ====Component==== A component is the super class of all data components in Qookie. It contain all common attributes:\\ ^ Attribute ^ Type ^ Description ^ | ''uid'' | Integer | A unique number defining this component. | | ''name'' | String | The name or title of the component. | | ''description'' | String | A short description of the component. | | ''image'' | Binary | An image of the component. | ===Preparation sequence=== A named sequence of text blobs or images with a text blob, containing the atomic steps in a preparation procedure. ====Ingredient==== A basic ingredient, such as flour, an egg or a tomato.\\ An ingredient is made out of the following attributes: ^ Attribute ^ Type ^ Description ^ | ''unit'' | Unit | The unit in which the ingredient is measured | | ''season'' | Season | The season in which this ingredient can be acquired. | | ''quantity'' | Integer | The usual quantity in which the ingredient can be acquired. | | ''density'' | Integer | Units/pr gram. | | ''category'' | String | To what category does this ingredient belong. | ====Recipe==== A recipe is an atomic component of a dish, i.e. cheese sauce, fried potatoes, meat balls. ^ Attribute ^ Type ^ Description ^ | ''ingredients'' | List | A list of ingredient uids, used in the dish. | ====Course==== A course is a combination of several dishes all served together at the same time, i.e. fried potatoes with meat balls and cheese sauce. ^ Attribute ^ Type ^ Description ^ | ''dishes'' | List | A list of dish uids, used in the course. | ====Menu==== A menu is a combination of dishes to be served together or after each other. A standard menu is aperitif, starter, main course and desert. ^ Attribute ^ Type ^ Description ^ | ''courses'' | List | A list of course uids, used in the menu. |