diff --git a/README.rst b/README.rst index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..75209e6313be3b85ddf48ffa42c6f5abed9fe396 100644 --- a/README.rst +++ b/README.rst @@ -0,0 +1,16 @@ +************************** +Grady -- will correct you! +************************** + +This is a tool developed for the simplified process of correcting exams +at University of Goettingen. It is deployed as a Django web application. + +Currently it is in a very early stage of development and not usable. + +TODO +==== + +- create necessary views +- get sample data +- create import scripts for user and submission import (depends: get sample data) +- add simple design diff --git a/docs/Database Design/Entity Relation Model.erdplus b/docs/Database Design/Entity Relation Model.erdplus new file mode 100644 index 0000000000000000000000000000000000000000..eee0a47bf3f01b39930979ea6d9bd00fecf7c58d --- /dev/null +++ b/docs/Database Design/Entity Relation Model.erdplus @@ -0,0 +1 @@ +{"version":2,"www":"erdplus.com","shapes":[{"type":"Entity","details":{"name":"Student","type":"regular","x":634,"y":250,"id":1}},{"type":"Attribute","details":{"name":"Matrikel #","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":525,"y":177,"id":2}},{"type":"Attribute","details":{"name":"Anonymous Key","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":635,"y":178,"id":4}},{"type":"Attribute","details":{"name":"One Time Passwords","isDerived":false,"isMultivalued":true,"isOptional":false,"isComposite":false,"isUnique":false,"x":748,"y":182,"id":6}},{"type":"Entity","details":{"name":"Aufgaben Typ","type":"regular","x":278,"y":480,"id":8}},{"type":"Attribute","details":{"name":"ID","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":137,"y":550,"id":9}},{"type":"Attribute","details":{"name":"Korrekturvorgabe","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":136,"y":493,"id":11}},{"type":"Attribute","details":{"name":"Name","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":136,"y":433,"id":13}},{"type":"Attribute","details":{"name":"Musterlösung","isDerived":false,"isMultivalued":false,"isOptional":true,"isComposite":false,"isUnique":false,"x":137,"y":371,"id":24}},{"type":"Entity","details":{"name":"Aufgabe","type":"weak","x":634,"y":478,"id":26}},{"type":"Attribute","details":{"name":"Anonymous Key","isDerived":true,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":741,"y":368,"id":27}},{"type":"Attribute","details":{"name":"Vorkorrektur","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":808,"y":416,"id":31}},{"type":"Relationship","details":{"name":"hat Typ","isIdentifying":false,"x":449,"y":480,"slots":[{"slotIndex":0,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":26},{"slotIndex":1,"minimum":"1","maximum":"1","participation":"unspecified","cardinality":"unspecified","role":"","entityId":8}],"id":35}},{"type":"Relationship","details":{"name":"Abgabe","isIdentifying":true,"x":635,"y":360,"slots":[{"slotIndex":0,"minimum":"1","maximum":"1","participation":"unspecified","cardinality":"unspecified","role":"","entityId":1},{"slotIndex":1,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":26}],"id":40}},{"type":"Entity","details":{"name":"Feedback","type":"weak","x":634,"y":761,"id":43}},{"type":"Attribute","details":{"name":"Punkte","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":500,"y":720,"id":44}},{"type":"Attribute","details":{"name":"Text","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":501,"y":779,"id":46}},{"type":"Relationship","details":{"name":"bewertet","isIdentifying":true,"x":634,"y":632,"slots":[{"slotIndex":0,"minimum":"1","maximum":"1","participation":"unspecified","cardinality":"unspecified","role":"","entityId":26},{"slotIndex":1,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":43}],"id":48}},{"type":"Entity","details":{"name":"Tutor","type":"regular","x":1063,"y":585,"id":51}},{"type":"Attribute","details":{"name":"Name","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1173,"y":530,"id":52}},{"type":"Attribute","details":{"name":"Benutzername","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":1177,"y":588,"id":54}},{"type":"Attribute","details":{"name":"Passwort","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1182,"y":647,"id":56}},{"type":"Relationship","details":{"name":"erstellt","isIdentifying":false,"x":892,"y":704,"slots":[{"slotIndex":0,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":43},{"slotIndex":1,"minimum":"1","maximum":"1","participation":"unspecified","cardinality":"unspecified","role":"","entityId":51}],"id":58}},{"type":"Relationship","details":{"name":"korrigiert","isIdentifying":false,"x":884,"y":474,"slots":[{"slotIndex":0,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":26},{"slotIndex":1,"minimum":"0","maximum":"m","participation":"unspecified","cardinality":"unspecified","role":"","entityId":51}],"id":62}},{"type":"Entity","details":{"name":"Dozent","type":"regular","x":1064,"y":862,"id":69}},{"type":"Attribute","details":{"name":"Name","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1174,"y":806,"id":70}},{"type":"Attribute","details":{"name":"Benutzername","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":1172,"y":860,"id":72}},{"type":"Attribute","details":{"name":"Password","isDerived":false,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":false,"x":1172,"y":916,"id":74}},{"type":"Relationship","details":{"name":"überprüft","isIdentifying":false,"x":890,"y":862,"slots":[{"slotIndex":0,"minimum":"0","maximum":"n","participation":"unspecified","cardinality":"unspecified","role":"","entityId":43},{"slotIndex":1,"minimum":"0","maximum":"m","participation":"unspecified","cardinality":"unspecified","role":"","entityId":69}],"id":78}},{"type":"Attribute","details":{"name":"Anonymus Key","isDerived":true,"isMultivalued":false,"isOptional":false,"isComposite":false,"isUnique":true,"x":504,"y":838,"id":82}}],"connectors":[{"type":"Connector","details":{"id":3},"source":2,"destination":1},{"type":"Connector","details":{"id":5},"source":4,"destination":1},{"type":"Connector","details":{"id":7},"source":6,"destination":1},{"type":"Connector","details":{"id":10},"source":9,"destination":8},{"type":"Connector","details":{"id":12},"source":11,"destination":8},{"type":"Connector","details":{"id":14},"source":13,"destination":8},{"type":"Connector","details":{"id":25},"source":24,"destination":8},{"type":"Connector","details":{"id":28},"source":27,"destination":26},{"type":"Connector","details":{"id":32},"source":31,"destination":26},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":38},"source":26,"destination":35},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":39},"source":8,"destination":35},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":41},"source":1,"destination":40},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":42},"source":26,"destination":40},{"type":"Connector","details":{"id":45},"source":44,"destination":43},{"type":"Connector","details":{"id":47},"source":46,"destination":43},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":49},"source":26,"destination":48},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":50},"source":43,"destination":48},{"type":"Connector","details":{"id":53},"source":52,"destination":51},{"type":"Connector","details":{"id":55},"source":54,"destination":51},{"type":"Connector","details":{"id":57},"source":56,"destination":51},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":60},"source":43,"destination":58},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":61},"source":51,"destination":58},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":64},"source":26,"destination":62},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":66},"source":51,"destination":62},{"type":"Connector","details":{"id":71},"source":70,"destination":69},{"type":"Connector","details":{"id":73},"source":72,"destination":69},{"type":"Connector","details":{"id":75},"source":74,"destination":69},{"type":"RelationshipConnector","details":{"slotIndex":0,"id":79},"source":43,"destination":78},{"type":"RelationshipConnector","details":{"slotIndex":1,"id":80},"source":69,"destination":78},{"type":"Connector","details":{"id":83},"source":82,"destination":43}],"width":2000,"height":1000} \ No newline at end of file diff --git a/docs/Database Design/Relational Schema.erdplus b/docs/Database Design/Relational Schema.erdplus new file mode 100644 index 0000000000000000000000000000000000000000..7e4cb62547cc42988fd92e1bc007a58b535b1d69 --- /dev/null +++ b/docs/Database Design/Relational Schema.erdplus @@ -0,0 +1 @@ +{"version":2,"www":"erdplus.com","shapes":[{"type":"Table","details":{"name":"Students","x":268,"y":346,"sort":"manual","attributes":[{"names":["Name"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["One Time Password"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3},{"names":["Matrikelnummer"],"order":0,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":4}],"uniqueGroups":[],"id":1}},{"type":"Table","details":{"name":"Aufgabentyp","x":268,"y":420,"sort":"automatic","attributes":[{"names":["Musterlösung"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Name"],"order":2,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":2},{"names":["Korrekturvorgabe"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3},{"names":["ID"],"order":4,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":4}],"uniqueGroups":[],"id":2}},{"type":"Table","details":{"name":"Aufgaben","x":484,"y":316,"sort":"manual","attributes":[{"names":["Vorkorrektur"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Matrikelnummer"],"order":2,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":1,"attributeId":4}],"id":2},{"names":["ID"],"order":0,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3},{"names":["Aufgabentyp"],"order":4,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":2,"attributeId":4}],"id":5}],"uniqueGroups":[],"id":8}},{"type":"Table","details":{"name":"Tutor","x":921,"y":267,"sort":"automatic","attributes":[{"names":["Name"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Benutzername"],"order":2,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":2},{"names":["Passwort"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3}],"uniqueGroups":[],"id":15}},{"type":"Table","details":{"name":"Feedback","x":697,"y":271,"sort":"manual","attributes":[{"names":["Punkte"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Text"],"order":2,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":2},{"names":["Tutor"],"order":4,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":15,"attributeId":2}],"id":3},{"names":["Zugehörige Aufgabe"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":8,"attributeId":3}],"id":4},{"names":["Reviewer"],"order":5,"pkMember":false,"optional":false,"soloUnique":false,"fk":true,"dataType":"int","dataTypeSize":null,"references":[{"tableId":20,"attributeId":2}],"id":5},{"names":["ID"],"order":0,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":6}],"uniqueGroups":[],"id":16}},{"type":"Table","details":{"name":"Dozent","x":921,"y":346,"sort":"automatic","attributes":[{"names":["Name"],"order":1,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":1},{"names":["Benutzername"],"order":2,"pkMember":true,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":2},{"names":["Passwort"],"order":3,"pkMember":false,"optional":false,"soloUnique":false,"fk":false,"dataType":"int","dataTypeSize":null,"id":3}],"uniqueGroups":[],"id":20}}],"connectors":[{"type":"TableConnector","details":{"fkAttributeId":2,"id":11},"source":1,"destination":8},{"type":"TableConnector","details":{"fkAttributeId":3,"id":17},"source":15,"destination":16},{"type":"TableConnector","details":{"fkAttributeId":4,"id":18},"source":8,"destination":16},{"type":"TableConnector","details":{"fkAttributeId":5,"id":19},"source":2,"destination":8},{"type":"TableConnector","details":{"fkAttributeId":5,"id":21},"source":20,"destination":16}],"width":2000,"height":1000} \ No newline at end of file diff --git a/docs/Database Design/er-model.graphml b/docs/Database Design/er-model.graphml new file mode 100644 index 0000000000000000000000000000000000000000..53572fb56255bda0643cbb55c8df6f23c53363ea --- /dev/null +++ b/docs/Database Design/er-model.graphml @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd"> + <!--Created by yEd 3.16.2.1--> + <key attr.name="Description" attr.type="string" for="graph" id="d0"/> + <key for="port" id="d1" yfiles.type="portgraphics"/> + <key for="port" id="d2" yfiles.type="portgeometry"/> + <key for="port" id="d3" yfiles.type="portuserdata"/> + <key attr.name="url" attr.type="string" for="node" id="d4"/> + <key attr.name="description" attr.type="string" for="node" id="d5"/> + <key for="node" id="d6" yfiles.type="nodegraphics"/> + <key for="graphml" id="d7" yfiles.type="resources"/> + <key attr.name="url" attr.type="string" for="edge" id="d8"/> + <key attr.name="description" attr.type="string" for="edge" id="d9"/> + <key for="edge" id="d10" yfiles.type="edgegraphics"/> + <graph edgedefault="directed" id="G"> + <data key="d0"/> + <node id="n0"> + <data key="d5"/> + <data key="d6"> + <y:GenericNode configuration="com.yworks.entityRelationship.small_entity"> + <y:Geometry height="40.0" width="80.0" x="456.0" y="158.0"/> + <y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/> + <y:BorderStyle color="#000000" type="line" width="1.0"/> + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="48.572265625" x="15.7138671875" y="10.93359375">Student<y:LabelModel> + <y:SmartNodeLabelModel distance="4.0"/> + </y:LabelModel> + <y:ModelParameter> + <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> + </y:ModelParameter> + </y:NodeLabel> + <y:StyleProperties> + <y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/> + </y:StyleProperties> + </y:GenericNode> + </data> + </node> + <node id="n1"> + <data key="d5"/> + <data key="d6"> + <y:GenericNode configuration="com.yworks.entityRelationship.small_entity"> + <y:Geometry height="40.0" width="80.0" x="456.0" y="428.0"/> + <y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/> + <y:BorderStyle color="#000000" type="line" width="1.0"/> + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.486328125" x="13.7568359375" y="10.93359375">Aufgabe<y:LabelModel> + <y:SmartNodeLabelModel distance="4.0"/> + </y:LabelModel> + <y:ModelParameter> + <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> + </y:ModelParameter> + </y:NodeLabel> + <y:StyleProperties> + <y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/> + <y:Property class="java.lang.Boolean" name="doubleBorder" value="true"/> + </y:StyleProperties> + </y:GenericNode> + </data> + </node> + <node id="n2"> + <data key="d5"/> + <data key="d6"> + <y:GenericNode configuration="com.yworks.entityRelationship.relationship"> + <y:Geometry height="56.0" width="90.0" x="451.0" y="285.0"/> + <y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/> + <y:BorderStyle color="#000000" type="line" width="1.0"/> + <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="11" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="16.955078125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="41.5546875" x="24.22265625" y="19.5224609375">gibt ab<y:LabelModel> + <y:SmartNodeLabelModel distance="4.0"/> + </y:LabelModel> + <y:ModelParameter> + <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> + </y:ModelParameter> + </y:NodeLabel> + <y:StyleProperties> + <y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/> + <y:Property class="java.lang.Boolean" name="doubleBorder" value="true"/> + </y:StyleProperties> + </y:GenericNode> + </data> + </node> + <edge id="e0" source="n0" target="n2"> + <data key="d9"/> + <data key="d10"> + <y:PolyLineEdge> + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> + <y:LineStyle color="#000000" type="line" width="1.0"/> + <y:Arrows source="none" target="none"/> + <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="44.04296875" x="-52.021484375" y="34.427490234375"><1, *><y:LabelModel> + <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/> + </y:LabelModel> + <y:ModelParameter> + <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/> + </y:ModelParameter> + <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/> + </y:EdgeLabel> + <y:BendStyle smoothed="false"/> + </y:PolyLineEdge> + </data> + </edge> + <edge id="e1" source="n2" target="n1"> + <data key="d9"/> + <data key="d10"> + <y:PolyLineEdge> + <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> + <y:LineStyle color="#000000" type="line" width="1.0"/> + <y:Arrows source="none" target="none"/> + <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="42.05078125" x="-51.025390625" y="34.451416015625"><1,1><y:LabelModel> + <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/> + </y:LabelModel> + <y:ModelParameter> + <y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/> + </y:ModelParameter> + <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/> + </y:EdgeLabel> + <y:BendStyle smoothed="false"/> + </y:PolyLineEdge> + </data> + </edge> + </graph> + <data key="d7"> + <y:Resources/> + </data> +</graphml> diff --git a/docs/Database Design/erdplus-diagram-pdf-export.pdf b/docs/Database Design/erdplus-diagram-pdf-export.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9d6e366c36954502beee2944cc3dc2a82abba52f Binary files /dev/null and b/docs/Database Design/erdplus-diagram-pdf-export.pdf differ diff --git a/docs/Database Design/erdplus-er-model-export.pdf b/docs/Database Design/erdplus-er-model-export.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3e2148b22b9eff7cae06b7837eb3e5b067c6373e Binary files /dev/null and b/docs/Database Design/erdplus-er-model-export.pdf differ