Skip to content
Snippets Groups Projects
Verified Commit 1a490ffc authored by Daniel Hornung's avatar Daniel Hornung
Browse files

DOC: Data model tutorial.

parent 8d1829b7
Branches
Tags
2 merge requests!96DOC: Added CITATION.cff to the list of files in the release guide where the...,!92Data model tutorial
Showing
with 4558 additions and 0 deletions
Data model tutorial
===================
Data models are a central concept of research data management. The
open-source framework LinkAhead makes it easy to create an `agile
data model <https://docs.indiscale.com/caosdb-server/Data-Model.html>`__
which suits your needs, so you can profit from your collected data fast.
.. contents::
:local:
Frequently asked questions about data models
--------------------------------------------
What is a data model?
~~~~~~~~~~~~~~~~~~~~~
In LinkAhead, the `data model <https://docs.indiscale.com/caosdb-server/Data-Model.html>`__
describes in a generic way how the data is structured. This document will help you understand this
concept and how you can adjust the data model to your needs.
Let’s give one example what we mean by the data model describing the
data structure: In experimental research, the data model may say that
each experiment has one or more experimenters and also some lab notes.
.. figure:: img/very_simple_data_model.png
:alt: The simplest data model consists of just one RecordType
A very simple data model, consisting of only one RecordType
The data model may also say that there are cell culture experiments,
which *inherit* all properties of generic experiments, but in addition
have the number of dishes, the time the cell cultures were started and a
*reference* to the cell line that was used. When we talk about
references, we mean that there are other data sets (in this case cell
lines) which are not embedded directly, but only pointed at. For
example, a number of cell culture experiments may reference the same
cell line, and when someone adds a note to that cell line, this note
will be available to all cell culture experiments.
.. figure:: img/simple_data_model.png
:alt: The first data model extended by inheritance and references
A simple data model, with four RecordTypes
In LinkAhead, the data model consists of *RecordTypes* and *Properties*. Each `*RecordType*
<https://docs.indiscale.com/caosdb-server/Data-Model.html#record-types>`__ corresponds to one type
of data set, for example an experiment, a cell culture experiment or a cell line. And each data set
can have `*Properties* <https://docs.indiscale.com/caosdb-server/Data-Model.html#properties>`__
which define it further: for example
the number of dishes in a cell culture experiment, a publication
describing a cell line or the cell line which was used for an
experiment.
And what about the data?
~~~~~~~~~~~~~~~~~~~~~~~~
The data model describes the generic structure of the data, but what
does this mean for your actual data? When you want to store data in
LinkAhead, you typically look for a matching *RecordType* and
then create *Record*\ s of that type. This means for example, that a
*Record* of type “Cell Culture” should have the *Properties* that the
*RecordType* provides: experimenters, lab notes, number of dishes, time
of experiment start and the used cell lines.
.. figure:: img/data_model_and_data.png
:alt: Records are always based upon (at least) one RecordType, this defines the relationship between data model and data
A diagram showing the relationship between RecordTypes (the data
model) and Records (the data)
Following a data model greatly simplifies your scientific research data
management, and this is what LinkAhead is for: You know that all
(or most) of your cell culture experiments will have the same set of
properties, so you can search for all experiments where the properties
match your desired criteria, for example those with cell lines which
were described in publications of a certain author.
What if need to change my data model?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Science moves fast, and your infrastructure should be able to follow
just as swiftly. The data model in LinkAhead was designed to be
very flexible, so it can adapt to your needs.
There are multiple ways to modify and enhance your data model, for
example you could use the web application or program the changes with
the Python client. This document describes how to change the data model
with the LinkAhead web application.
What happens to my data if the data model changes?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
With most systems, changing the data model is not possible without
migrating the existing data. With LinkAhead however, your
“legacy” data can simply stay where it is, it will not be modified. New
data, that you enter after changing the data model, will of course
follow your changes and adhere to your “new” data model.
Modifying the data model in LinkAhead
-------------------------------------
The easiest way to change the data model is to `use the LinkAhead
web
application <https://docs.indiscale.com/caosdb-webui/tutorials/edit_mode.html>`__.
But the first step is to look at the current data model (*RecordTypes*
and *Properties*) and your current situation, to find out what you need
changed. It may help to ask yourself these questions:
- Do you want to describe data of existing types in more detail? -> :ref:`Create
*Properties*<new_property>` if necessary, then `add
<https://docs.indiscale.com/caosdb-webui/tutorials/edit_mode.html#add-properties-to-an-existing-recordtype>`__
these *Properties* to the existing *RecordTypes*.
- Do you need to add a property more than once? -> Make that property `a list property
<https://docs.indiscale.com/caosdb-webui/tutorials/edit_mode.html#make-a-property-into-a-list>`__\
.
- Are there completely new types of data? -> :ref:`Create a new
*RecordType* <new_recordtype>` .
- Are there new types of data which would nearly fit into an existing
RecordType, but not quite? Do you still want to keep the existing
RecordType for some purposes, but require changes or additions for
other purposes? -> :ref:`Create a new
*RecordType* <new_recordtype>` which inherits from the
existing RecordType as a parent.
- Do you have a new setup, new devices, new protocols, new software? ->
:ref:`Create a new
*RecordType* <new_recordtype>` .
- Are there *Properties* or *RecordTypes* which were created in the past, but will never be used? ->
`Delete them
<https://docs.indiscale.com/caosdb-webui/tutorials/edit_mode.html#delete-an-entity>`__.
Once you know what you want to do, open the LinkAhead web application, log in and click on the “Edit
Mode” button in the menu. Then follow one of the instructions in the next sections or the general `Edit
Mode documentation <https://docs.indiscale.com/caosdb-webui/tutorials/edit_mode.html>`__..
.. figure:: img/edit_mode_button.png
:alt: The Edit Mode button appears when a user is logged in.
A screen shot of the menu, with the Edit Mode button highlighted
.. _new_property:
Create a new Property
~~~~~~~~~~~~~~~~~~~~~
Creating the required Properties often is the first step for changes to
the data model.
1. Check that there is no Property yet which does what you want:
- Search for existing Properties: ``FIND PROPERTY *qualit*`` to
search for Properties with “qualit” in the name, ``FIND PROPERTY``
for all Properties.
- Look at related RecordTypes, maybe they already use a Property
which does the thing you need.
- Ask around. If possible at least two persons. Your team mates may
have had the same thoughts already, or may know about someone who
implemented your desired Property.
2. Activate the *Edit Mode* in the top menu. Now the edit mode toolbox
on the right hand side of the screen should be visible.
3. Click on the “Create Property” button in the toolbox. A dialog for
the new Property shows up.
4. Follow the `WebUI documentation
<https://docs.indiscale.com/caosdb-webui/tutorials/edit_mode.html#new-property>`__ for Property
creation.
.. _new_recordtype:
Create a new RecordType
~~~~~~~~~~~~~~~~~~~~~~~
1. Check that there is no RecordType yet which does what you want:
- Search for existing RecordTypes: ``FIND RECORDTYPE *experi*`` to
search for RecordTypes with “experi” in the name,
``FIND RECORDTYPE`` for all RecordTypes.
- Look at related RecordTypes, maybe you can inherit from one?
- Ask around. If possible at least two persons. You team mates may
have had the same thoughts already, or may know about someone who
implemented your desired RecordType.
2. Activate the *Edit Mode* in the top menu. Now the edit mode toolbox
on the right hand side of the screen should be visible.
3. Click on the “Create RecordType” button in the toolbox. A dialog for
the new Property shows up.
4. Follow the `WebUI documentation
<https://docs.indiscale.com/caosdb-webui/tutorials/edit_mode.html#new-recordtype>`__ for
RecordType creation.
What about letting users only choose from a fixed set of values (a.k.a. enums)?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You may ask yourself how you can restrict users (or yourself) to choose
property values from a fixed set. For example, entering the
experimenters in an “Experiment” record may be cumbersome and
error-prone. Or entering a chemical formula again and again may become
tedious. This is where data management tools like LinkAhead can
help you by referencing between entities.
In this example, instead of having a TEXT Property “experimenter”, where
users need to enter the name by hand, you could create a new RecordType
“Person”. Then create a Record for each experimenter in your team. And
finally, remove the “experimenter” TEXT Property and create a new
REFERENCE Property which references to the “Person” records. Now all the
users have to do is to choose the experimenter from a drop-down menu in
LinkAhead.
.. figure:: img/screenshot_dropdown.png
:alt: Users may choose one of multiple Persons when enums are implemented via REFERENCE Properties
A screenshot of a drop down menu where one of multiple “Person” records may be chosen
src/doc/tutorials/img/data_model_and_data.png

245 KiB

This diff is collapsed.
src/doc/tutorials/img/edit_entity_button.png

276 KiB

src/doc/tutorials/img/edit_mode_button.png

177 KiB

src/doc/tutorials/img/screenshot_dropdown.png

160 KiB

src/doc/tutorials/img/screenshot_edit_create_delete.png

260 KiB

src/doc/tutorials/img/screenshot_menu.png

166 KiB

src/doc/tutorials/img/screenshot_new_recordtype.png

701 KiB

src/doc/tutorials/img/simple_data_model.png

185 KiB

This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<XMI verified="false" xmlns:UML="http://schema.omg.org/spec/UML/1.4" xmi.version="1.2" timestamp="2023-03-10T13:37:51">
<XMI.header>
<XMI.documentation>
<XMI.exporter>umbrello uml modeller 2.32.2 http://umbrello.kde.org</XMI.exporter>
<XMI.exporterVersion>1.6.19</XMI.exporterVersion>
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
</XMI.documentation>
<XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.4"/>
</XMI.header>
<XMI.content>
<UML:Model isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="m1" name="UML-Modell" isRoot="false">
<UML:Namespace.ownedElement>
<UML:Stereotype isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="folder" name="folder" isRoot="false" namespace="m1" visibility="public"/>
<UML:Stereotype isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="upqb4wZPdsFug" name="W" isRoot="false" namespace="m1" visibility="public"/>
<UML:Model isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="Logical_View" name="Logical View" isRoot="false" namespace="m1" visibility="public">
<UML:Namespace.ownedElement>
<UML:Package isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="Datatypes" name="Datatypes" isRoot="false" stereotype="folder" namespace="Logical_View" visibility="public">
<UML:Namespace.ownedElement>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uEHGpkgpZ5zSa" name="char" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uROhWD5rBLkN7" name="int" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uTEWbFbZg0H7d" name="float" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="u63bynaVhcKPQ" name="double" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="urNIscCDLp6YC" name="bool" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uEFDoBYDJxlwD" name="string" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uUN2gpYYSm0MQ" name="unsigned char" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uaOg7DtUmNa1O" name="signed char" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="u2j8VdnwnD5No" name="unsigned int" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uCM9wQw4MCzTh" name="signed int" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uIiIYk08Eei43" name="short int" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="utj7uju3Bcryx" name="unsigned short int" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="u8CREq18tOkat" name="signed short int" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uq9KZiLh2fPSG" name="long int" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="ul1JcLwsggvUT" name="signed long int" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="urLFa80H4C1WH" name="unsigned long int" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="u2WVtsIOXYKOE" name="long double" isRoot="false" namespace="Datatypes" visibility="public"/>
<UML:DataType isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="u6fN7PqC7hndQ" name="wchar_t" isRoot="false" namespace="Datatypes" visibility="public"/>
</UML:Namespace.ownedElement>
</UML:Package>
<UML:Class isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uvUQiWatyXkSJ" name="Experiment" isRoot="false" namespace="Logical_View" visibility="public">
<UML:Classifier.feature>
<UML:Attribute type="uefR9qLrX0KbN" isSpecification="false" xmi.id="uSJY4vfmi5BN4" name="experimenter" visibility="public"/>
<UML:Attribute type="u0du3dSxselXO" isSpecification="false" xmi.id="uFqEtWMUa5mCe" name="lab_notes" visibility="private"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Class isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uefR9qLrX0KbN" name="TEXT" isRoot="false" namespace="Logical_View" visibility="public"/>
<UML:Class isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="u0du3dSxselXO" name="FILE" isRoot="false" namespace="Logical_View" visibility="public"/>
<UML:Class isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uAFk8Yy0StoYm" name="CellCultureExperiment" isRoot="false" namespace="Logical_View" visibility="public">
<UML:GeneralizableElement.generalization>
<UML:Generalization xmi.idref="u8oRooFrsWVhk"/>
</UML:GeneralizableElement.generalization>
<UML:Classifier.feature>
<UML:Attribute type="uefR9qLrX0KbN" isSpecification="false" xmi.id="uNpTs7ekpuH4I" name="experimenter" visibility="public"/>
<UML:Attribute type="u0du3dSxselXO" isSpecification="false" xmi.id="uL8s65ael2sWY" name="lab_notes" visibility="private"/>
<UML:Attribute type="ur1GkbdOwkjef" isSpecification="false" xmi.id="um6gksRKWydK1" name="number_of_dishes" visibility="public"/>
<UML:Attribute type="upcSaMWLBkK65" isSpecification="false" xmi.id="uVKvnnqgPsRga" name="cell_line" visibility="public"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Class isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="ur1GkbdOwkjef" name="INTEGER" isRoot="false" namespace="Logical_View" visibility="public"/>
<UML:Generalization parent="uvUQiWatyXkSJ" isSpecification="false" discriminator="" xmi.id="u8oRooFrsWVhk" child="uAFk8Yy0StoYm" name="" namespace="Logical_View" visibility="public"/>
<UML:Class isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="upcSaMWLBkK65" name="CellLine" isRoot="false" namespace="Logical_View" visibility="public">
<UML:Classifier.feature>
<UML:Attribute type="uO0C1L9PSx1pt" isSpecification="false" xmi.id="utENdz0EM98oE" name="publication" visibility="public"/>
</UML:Classifier.feature>
</UML:Class>
<UML:Class isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="uO0C1L9PSx1pt" name="Publication" isRoot="false" namespace="Logical_View" visibility="public">
<UML:Classifier.feature>
<UML:Attribute type="uefR9qLrX0KbN" isSpecification="false" xmi.id="uBD7YB7ALmZTE" name="author" visibility="private"/>
</UML:Classifier.feature>
</UML:Class>
</UML:Namespace.ownedElement>
<XMI.extension xmi.extender="umbrello">
<diagrams resolution="99">
<diagram showscope="1" showstereotype="1" isopen="1" showpackage="1" textcolor="#000000" canvasheight="284.288" linecolor="#ff0000" canvaswidth="441.137" documentation="" backgroundcolor="#fcfcfc" xmi.id="u89npYrdhZ5hM" showopsig="1" showattribassocs="1" localid="-1" griddotcolor="#eff0f1" zoom="152.08749999999995" usefillcolor="1" showops="1" linewidth="0" name="Klassendiagramm" showatts="1" showpubliconly="0" fillcolor="#ffffc0" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" type="1" snapcsgrid="0" snapy="25" snapx="25" showgrid="0" snapgrid="0" showattsig="1">
<widgets>
<classwidget showscope="0" showopsigs="602" showstereotype="1" showpackage="1" textcolor="#000000" linecolor="#ff0000" xmi.id="uvUQiWatyXkSJ" usesdiagramusefillcolor="0" showattsigs="602" localid="unUcCTIMGl5Co" usesdiagramfillcolor="0" isinstance="0" usefillcolor="1" linewidth="0" showpubliconly="0" fillcolor="#ffffc0" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" width="135" height="54" showoperations="0" showattributes="1" x="-135.137" y="-456.315" autoresize="1"/>
<classwidget showscope="0" showopsigs="602" showstereotype="1" showpackage="1" textcolor="#000000" linecolor="#ff0000" xmi.id="upcSaMWLBkK65" usesdiagramusefillcolor="0" showattsigs="602" localid="ux9toAI1KGWvY" usesdiagramfillcolor="0" isinstance="0" usefillcolor="1" linewidth="0" showpubliconly="0" fillcolor="#ffffc0" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" width="151" height="36" showoperations="0" showattributes="1" x="131.37" y="-290.247" autoresize="1"/>
<classwidget showscope="0" showopsigs="602" showstereotype="1" showpackage="1" textcolor="#000000" linecolor="#ff0000" xmi.id="uAFk8Yy0StoYm" usesdiagramusefillcolor="0" showattsigs="602" localid="uCtngsW0eC2Nm" usesdiagramfillcolor="0" isinstance="0" usefillcolor="1" linewidth="0" showpubliconly="0" fillcolor="#ffffc0" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" width="188" height="90" showoperations="0" showattributes="1" x="-158.767" y="-363.013" autoresize="1"/>
<classwidget showscope="0" showopsigs="602" showstereotype="1" showpackage="1" textcolor="#000000" linecolor="#ff0000" xmi.id="uO0C1L9PSx1pt" usesdiagramusefillcolor="0" showattsigs="602" localid="udxtFf6VgSeNQ" usesdiagramfillcolor="0" isinstance="0" usefillcolor="1" linewidth="0" showpubliconly="0" fillcolor="#ffffc0" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" width="92" height="36" showoperations="0" showattributes="1" x="86.1255" y="-208.027" autoresize="1"/>
</widgets>
<messages/>
<associations>
<assocwidget totalcountb="2" widgetaid="uAFk8Yy0StoYm" totalcounta="2" indexb="1" textcolor="none" linecolor="#ff0000" xmi.id="u8oRooFrsWVhk" usesdiagramusefillcolor="1" localid="uP6sMUUIUwAdw" seqnum="" usesdiagramfillcolor="1" usefillcolor="1" linewidth="0" indexa="1" fillcolor="none" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" widgetbid="uvUQiWatyXkSJ" type="500" autoresize="1">
<linepath layout="Direct">
<startpoint startx="-68.7281" starty="-363.013"/>
<endpoint endx="-68.7281" endy="-402.315"/>
</linepath>
</assocwidget>
<assocwidget totalcountb="2" widgetaid="uAFk8Yy0StoYm" totalcounta="2" indexb="1" textcolor="none" linecolor="#ff0000" xmi.id="uVKvnnqgPsRga" usesdiagramusefillcolor="1" localid="ulyMsjM0nbs3a" seqnum="" changeabilityA="900" usesdiagramfillcolor="1" visibilityA="0" usefillcolor="1" linewidth="0" indexa="1" fillcolor="none" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" changeabilityB="900" widgetbid="upcSaMWLBkK65" type="510" autoresize="1" visibilityB="0">
<linepath layout="Direct">
<startpoint startx="29.2327" starty="-277.754"/>
<endpoint endx="131.37" endy="-277.754"/>
</linepath>
<floatingtext showstereotype="1" textcolor="none" linecolor="#ff0000" xmi.id="uVGPB1NJvP8wt" usesdiagramusefillcolor="1" localid="uckP5Ky3TvfkT" pretext="+" usesdiagramfillcolor="1" text="cell_line" isinstance="0" usefillcolor="1" linewidth="0" fillcolor="none" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" width="63" posttext="" height="22" x="70" y="-284" autoresize="1" role="710"/>
</assocwidget>
<assocwidget totalcountb="2" widgetaid="upcSaMWLBkK65" totalcounta="2" indexb="1" textcolor="none" linecolor="#ff0000" xmi.id="utENdz0EM98oE" usesdiagramusefillcolor="1" localid="u8A6XeV5sThX3" seqnum="" changeabilityA="900" usesdiagramfillcolor="1" visibilityA="0" usefillcolor="1" linewidth="0" indexa="1" fillcolor="none" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" changeabilityB="900" widgetbid="uO0C1L9PSx1pt" type="510" autoresize="1" visibilityB="0">
<linepath layout="Direct">
<startpoint startx="162.345" starty="-254.247"/>
<endpoint endx="162.345" endy="-208.027"/>
</linepath>
<floatingtext showstereotype="1" textcolor="none" linecolor="#ff0000" xmi.id="ufrw1SbOcMWr9" usesdiagramusefillcolor="1" localid="uY15jzXWQtNEA" pretext="+" usesdiagramfillcolor="1" text="publication" isinstance="0" usefillcolor="1" linewidth="0" fillcolor="none" font="Noto Sans,9,-1,5,50,0,0,0,0,0,Regular" width="81" posttext="" height="22" x="103" y="-235" autoresize="1" role="710"/>
</assocwidget>
</associations>
</diagram>
</diagrams>
</XMI.extension>
</UML:Model>
<UML:Model isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="Use_Case_View" name="Use Case View" isRoot="false" namespace="m1" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
<UML:Model isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="Component_View" name="Component View" isRoot="false" namespace="m1" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
<UML:Model isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="Deployment_View" name="Deployment View" isRoot="false" namespace="m1" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
<UML:Model isLeaf="false" isSpecification="false" isAbstract="false" xmi.id="Entity_Relationship_Model" name="Entity Relationship Model" isRoot="false" namespace="m1" visibility="public">
<UML:Namespace.ownedElement/>
</UML:Model>
</UML:Namespace.ownedElement>
</UML:Model>
</XMI.content>
<XMI.extensions xmi.extender="umbrello">
<docsettings viewid="u89npYrdhZ5hM" documentation="" uniqueid="u1Nwn5m62fx8p"/>
<listview>
<listitem id="Views" type="800" open="1">
<listitem id="Use_Case_View" type="802" open="1"/>
<listitem id="Entity_Relationship_Model" type="836" open="1"/>
<listitem id="Component_View" type="821" open="1"/>
<listitem id="Logical_View" type="801" open="1">
<listitem id="uAFk8Yy0StoYm" type="813" open="1">
<listitem id="uVKvnnqgPsRga" type="814" open="0"/>
<listitem id="uNpTs7ekpuH4I" type="814" open="0"/>
<listitem id="uL8s65ael2sWY" type="814" open="0"/>
<listitem id="um6gksRKWydK1" type="814" open="0"/>
</listitem>
<listitem id="upcSaMWLBkK65" type="813" open="1">
<listitem id="utENdz0EM98oE" type="814" open="0"/>
</listitem>
<listitem id="Datatypes" type="830" open="0">
<listitem id="urNIscCDLp6YC" type="829" open="0"/>
<listitem id="uEHGpkgpZ5zSa" type="829" open="0"/>
<listitem id="u63bynaVhcKPQ" type="829" open="0"/>
<listitem id="uTEWbFbZg0H7d" type="829" open="0"/>
<listitem id="uROhWD5rBLkN7" type="829" open="0"/>
<listitem id="u2WVtsIOXYKOE" type="829" open="0"/>
<listitem id="uq9KZiLh2fPSG" type="829" open="0"/>
<listitem id="uIiIYk08Eei43" type="829" open="0"/>
<listitem id="uaOg7DtUmNa1O" type="829" open="0"/>
<listitem id="uCM9wQw4MCzTh" type="829" open="0"/>
<listitem id="ul1JcLwsggvUT" type="829" open="0"/>
<listitem id="u8CREq18tOkat" type="829" open="0"/>
<listitem id="uEFDoBYDJxlwD" type="829" open="0"/>
<listitem id="uUN2gpYYSm0MQ" type="829" open="0"/>
<listitem id="u2j8VdnwnD5No" type="829" open="0"/>
<listitem id="urLFa80H4C1WH" type="829" open="0"/>
<listitem id="utj7uju3Bcryx" type="829" open="0"/>
<listitem id="u6fN7PqC7hndQ" type="829" open="0"/>
</listitem>
<listitem id="uvUQiWatyXkSJ" type="813" open="1">
<listitem id="uSJY4vfmi5BN4" type="814" open="0"/>
<listitem id="uFqEtWMUa5mCe" type="814" open="0"/>
</listitem>
<listitem id="u0du3dSxselXO" type="813" open="1"/>
<listitem id="ur1GkbdOwkjef" type="813" open="1"/>
<listitem id="u89npYrdhZ5hM" type="807" label="Klassendiagramm" open="0"/>
<listitem id="uO0C1L9PSx1pt" type="813" open="1">
<listitem id="uBD7YB7ALmZTE" type="814" open="0"/>
</listitem>
<listitem id="uefR9qLrX0KbN" type="813" open="1"/>
</listitem>
<listitem id="Deployment_View" type="827" open="1"/>
</listitem>
</listview>
<codegeneration>
<codegenerator language="C++"/>
</codegeneration>
</XMI.extensions>
</XMI>
src/doc/tutorials/img/very_simple_data_model.png

82.2 KiB

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="56.61758mm"
height="20.597263mm"
viewBox="0 0 220.67571 80.280722"
version="1.2"
id="svg236"
sodipodi:docname="very_simple_data_model.svg"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
inkscape:export-filename="/home/daniel/indiscale/management/external/bmpg/management/documentation/data_model/how_to_datamodel/very_simple_data_model.png"
inkscape:export-xdpi="897.25"
inkscape:export-ydpi="897.25">
<metadata
id="metadata240">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Qt SVG Document</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1135"
id="namedview238"
showgrid="false"
inkscape:zoom="3.6046958"
inkscape:cx="160.39549"
inkscape:cy="4.7271483"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
inkscape:document-rotation="0" />
<title
id="title2">Qt SVG Document</title>
<desc
id="desc4">Generated with Qt</desc>
<defs
id="defs6">
<marker
style="overflow:visible"
id="marker1523"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lend"
inkscape:isstock="true">
<path
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
id="path1521" />
</marker>
<marker
style="overflow:visible"
id="marker1333"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Mend"
inkscape:isstock="true">
<path
transform="scale(-0.6)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
id="path1331" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Mend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path976" />
</marker>
</defs>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Layer 1"
transform="translate(-88.927441,-46.784756)">
<g
id="g1749"
transform="translate(150.56113,71.817619)">
<rect
x="24.4333"
y="0.99200898"
width="133.92122"
height="53.568485"
id="rect132"
style="font-style:normal;font-weight:400;font-size:12.375px;font-family:'Noto Sans';fill:#ffffc0;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.37501;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
fill="#ffffc0"
fill-opacity="1"
stroke="#000000"
stroke-opacity="1"
stroke-width="1"
stroke-linecap="square"
stroke-linejoin="bevel"
transform="matrix(0.992009,0,0,0.992009,24.4333,0.992009)"
font-family="'Noto Sans'"
font-size="12.375px"
font-weight="700"
font-style="normal"
id="g140"
style="fill-rule:evenodd">
<text
fill="#000000"
fill-opacity="1"
stroke="none"
xml:space="preserve"
x="30.5"
y="13.5"
font-family="'Noto Sans'"
font-size="12.375px"
font-weight="700"
font-style="normal"
id="text138">Experiment</text>
</g>
<g
fill="#ffffc0"
fill-opacity="1"
stroke="#ff0000"
stroke-opacity="1"
stroke-width="1"
stroke-linecap="square"
stroke-linejoin="bevel"
transform="matrix(0.992009,0,0,0.992009,24.4333,0.992009)"
font-family="'Noto Sans'"
font-size="12.375px"
font-weight="400"
font-style="normal"
id="g144"
style="fill-rule:evenodd;stroke-width:1.38608;stroke-miterlimit:4;stroke-dasharray:none">
<polyline
fill="none"
points="0,18 135,18 "
id="polyline142"
style="stroke-width:1.38608;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
<g
fill="#ffffc0"
fill-opacity="1"
stroke="#000000"
stroke-opacity="1"
stroke-width="1"
stroke-linecap="square"
stroke-linejoin="bevel"
transform="matrix(0.992009,0,0,0.992009,24.4333,0.992009)"
font-family="'Noto Sans'"
font-size="12.375px"
font-weight="400"
font-style="normal"
id="g152"
style="fill-rule:evenodd">
<text
fill="#000000"
fill-opacity="1"
stroke="none"
xml:space="preserve"
x="5"
y="31.5"
font-family="'Noto Sans'"
font-size="12.375px"
font-weight="400"
font-style="normal"
id="text150">experimenter : TEXT</text>
</g>
<g
fill="#ffffc0"
fill-opacity="1"
stroke="#000000"
stroke-opacity="1"
stroke-width="1"
stroke-linecap="square"
stroke-linejoin="bevel"
transform="matrix(0.992009,0,0,0.992009,24.4333,0.992009)"
font-family="'Noto Sans'"
font-size="12.375px"
font-weight="400"
font-style="normal"
id="g158"
style="fill-rule:evenodd">
<text
fill="#000000"
fill-opacity="1"
stroke="none"
xml:space="preserve"
x="5"
y="49.5"
font-family="'Noto Sans'"
font-size="12.375px"
font-weight="400"
font-style="normal"
id="text156">lab_notes : FILE</text>
</g>
<g
id="g1470"
transform="translate(-261.77311,-164.12532)">
<rect
style="opacity:1;fill:#d7f4d7;stroke:#008000;stroke-width:0.839788;paint-order:markers fill stroke;stop-color:#000000"
id="rect1464"
width="18.926079"
height="13.833775"
x="289.03854"
y="167.14027"
ry="4.099587" />
<text
fill="#000000"
fill-opacity="1"
stroke="none"
xml:space="preserve"
x="290.79922"
y="178.57553"
font-family="'Noto Sans'"
font-size="12.2761px"
font-weight="700"
font-style="normal"
id="text1468"
style="fill-rule:evenodd;stroke-width:0.992009"><tspan
style="fill:#008000"
id="tspan1466">RT</tspan></text>
</g>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.5001px;line-height:1.25;font-family:Stanberry;-inkscape-font-specification:Stanberry;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.332398"
x="88.282906"
y="58.603783"
id="text1517"><tspan
sodipodi:role="line"
id="tspan1515"
x="88.282906"
y="58.603783"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.5001px;font-family:Stanberry;-inkscape-font-specification:Stanberry;fill:#0000ff;stroke-width:0.332398">RecordType</tspan></text>
<path
style="opacity:1;fill:none;stroke:#0000ff;stroke-width:0.839441;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#marker1523);paint-order:markers fill stroke;stop-color:#000000"
d="m 104.62524,64.323266 c 1.42777,5.850954 10.16944,13.595229 20.72552,16.588753 15.03521,4.263734 24.20804,-2.690657 44.43576,-0.92334"
id="path1519"
sodipodi:nodetypes="csc" />
</g>
</svg>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment