init documentation,

This commit is contained in:
louiscklaw
2025-04-17 07:51:08 +08:00
parent 36cc5b9095
commit 256f3ae8e3
328 changed files with 3250 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
# LessonCategories / LessonCategory
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts for reference
extend @listHelloworld.ts to cover `LessonCategories`,
draft ts code template to include
- `CRUD`
- `getFulllistLessonCategories,`
- `getListByFilterLessonCategories,`
- `getFirstListItemLessonCategories,`
- `getOneLessonCategory,`
- `getListLessonCategoryById`
thanks
---

View File

@@ -0,0 +1,20 @@
# LessonCategories / LessonCategory
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listLessonCategories.ts to cover `LessonCategories`,
draft `ts` code
- `CRUD`
- `getFulllistLessonCategories,`
- `getListByFilterLessonCategories,`
- `getFirstListItemLessonCategories,`
- `getOneLessonCategory,`
- `getListLessonCategoryById`
thanks

View File

@@ -0,0 +1,20 @@
# LessonTypes / LessonType
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listLessonTypes.ts to cover `LessonTypes`,
draft `ts` code
- `CRUD`
- `getFulllistLessonTypes,`
- `getListByFilterLessonTypes,`
- `getFirstListItemLessonTypes,`
- `getOneLessonType,`
- `getListLessonTypeById`
thanks

View File

@@ -0,0 +1,20 @@
# QuizCategories / QuizCategory
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listQuizCategories.ts to cover `QuizCategories`,
draft `ts` code
- `CRUD`
- `getFulllistQuizCategories,`
- `getListByFilterQuizCategories,`
- `getFirstListItemQuizCategories,`
- `getOneQuizCategory,`
- `getListQuizCategoryById`
thanks

View File

@@ -0,0 +1,20 @@
# QuizConnectives / QuizConnective
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listQuizConnectives.ts to cover `QuizConnectives`,
draft `ts` code
- `CRUD`
- `getFulllistQuizConnectives,`
- `getListByFilterQuizConnectives,`
- `getFirstListItemQuizConnectives,`
- `getOneQuizConnective,`
- `getListQuizConnectiveById`
thanks

View File

@@ -0,0 +1,20 @@
# QuizConnectivesCategories / QuizConnectivesCategory
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listQuizConnectivesCategories.ts to cover `QuizConnectivesCategories`,
draft `ts` code
- `CRUD`
- `getFulllistQuizConnectivesCategories,`
- `getListByFilterQuizConnectivesCategories,`
- `getFirstListItemQuizConnectivesCategories,`
- `getOneQuizConnectivesCategory,`
- `getListQuizConnectivesCategoryById`
thanks

View File

@@ -0,0 +1,20 @@
# QuizListenings / QuizListening
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listQuizListenings.ts to cover `QuizListenings`,
draft `ts` code
- `CRUD`
- `getFulllistQuizListenings,`
- `getListByFilterQuizListenings,`
- `getFirstListItemQuizListenings,`
- `getOneQuizListening,`
- `getListQuizListeningById`
thanks

View File

@@ -0,0 +1,20 @@
# QuizMatchings / QuizMatching
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listQuizMatchings.ts to cover `QuizMatchings`,
draft `ts` code
- `CRUD`
- `getFulllistQuizMatchings,`
- `getListByFilterQuizMatchings,`
- `getFirstListItemQuizMatchings,`
- `getOneQuizMatching,`
- `getListQuizMatchingById`
thanks

View File

@@ -0,0 +1,20 @@
# UserMetas / UserMeta
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listUserMetas.ts to cover `UserMetas`,
draft `ts` code
- `CRUD`
- `getFulllistUserMetas,`
- `getListByFilterUserMetas,`
- `getFirstListItemUserMetas,`
- `getOneUserMeta,`
- `getListUserMetaById`
thanks

View File

@@ -0,0 +1,20 @@
# Users / User
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listUsers.ts to cover `Users`,
draft `ts` code
- `CRUD`
- `getFulllistUsers,`
- `getListByFilterUsers,`
- `getFirstListItemUsers,`
- `getOneUser,`
- `getListUserById`
thanks

View File

@@ -0,0 +1,20 @@
# Vocabularies / Vocabulary
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @listVocabularies.ts to cover `Vocabularies`,
draft `ts` code
- `CRUD`
- `getFulllistVocabularies,`
- `getListByFilterVocabularies,`
- `getFirstListItemVocabularies,`
- `getOneVocabulary,`
- `getListVocabularyById`
thanks

View File

@@ -0,0 +1,51 @@
#!/usr/bin/env python
import os
import sys
prompt_template = '''
# {plural} / {single}
Hi, using information from
- @schema.dbml for schemas, fields and table names,
- @listHelloworld.ts for skeleton for ts script
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
extend @list{plural}.ts to cover `{plural}`,
draft `ts` code
- `CRUD`
- `getFulllist{plural},`
- `getListByFilter{plural},`
- `getFirstListItem{plural},`
- `getOne{single},`
- `getList{single}ById`
thanks
'''
def generate_prompt(plural, single):
return prompt_template.format(
plural=plural,
single=single,
)
table_list = [
('LessonCategories', 'LessonCategory'),
('LessonTypes', 'LessonType'),
('QuizCategories', 'QuizCategory'),
('QuizConnectives', 'QuizConnective'),
('QuizConnectivesCategories', 'QuizConnectivesCategory'),
('QuizListenings', 'QuizListening'),
('QuizMatchings', 'QuizMatching'),
('UserMetas', 'UserMeta'),
('Users', 'User'),
('Vocabularies', 'Vocabulary'),
]
for (plural, single) in table_list:
prompt = generate_prompt(plural, single)
print(prompt)
with open(f"./PROMPT_{plural}.MD", "w+") as f:
f.write(prompt)

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -0,0 +1,9 @@
---
tags: mobile, cms, db, schema
---
# db schema design
- [link to schema](./schema.dbml)
![alt text](output.svg)

View File

@@ -0,0 +1,426 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.47.0 (20210316.0004)
-->
<!-- Title: dbml Pages: 1 -->
<svg width="1889pt" height="3733pt"
viewBox="0.00 0.00 1888.78 3732.61" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 3728.61)">
<title>dbml</title>
<!-- Users -->
<g id="Users" class="node">
<title>Users</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="977.16" cy="-384.67" rx="258.6" ry="384.83"/>
<polygon fill="#1d71b8" stroke="transparent" points="796.16,-594.67 796.16,-654.67 1158.16,-654.67 1158.16,-594.67 796.16,-594.67"/>
<polygon fill="none" stroke="#29235c" points="796.16,-594.67 796.16,-654.67 1158.16,-654.67 1158.16,-594.67 796.16,-594.67"/>
<text text-anchor="start" x="873.14" y="-615.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;Users &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="796.16,-534.67 796.16,-594.67 1158.16,-594.67 1158.16,-534.67 796.16,-534.67"/>
<polygon fill="none" stroke="#29235c" points="796.16,-534.67 796.16,-594.67 1158.16,-594.67 1158.16,-534.67 796.16,-534.67"/>
<text text-anchor="start" x="807.16" y="-555.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="832.05" y="-555.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="1113.38" y="-555.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="796.16,-474.67 796.16,-534.67 1158.16,-534.67 1158.16,-474.67 796.16,-474.67"/>
<polygon fill="none" stroke="#29235c" points="796.16,-474.67 796.16,-534.67 1158.16,-534.67 1158.16,-474.67 796.16,-474.67"/>
<text text-anchor="start" x="807.16" y="-494.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="1024.46" y="-495.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="796.16,-414.67 796.16,-474.67 1158.16,-474.67 1158.16,-414.67 796.16,-414.67"/>
<polygon fill="none" stroke="#29235c" points="796.16,-414.67 796.16,-474.67 1158.16,-474.67 1158.16,-414.67 796.16,-414.67"/>
<text text-anchor="start" x="807.16" y="-434.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="1024.46" y="-435.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="796.16,-354.67 796.16,-414.67 1158.16,-414.67 1158.16,-354.67 796.16,-354.67"/>
<polygon fill="none" stroke="#29235c" points="796.16,-354.67 796.16,-414.67 1158.16,-414.67 1158.16,-354.67 796.16,-354.67"/>
<text text-anchor="start" x="807.16" y="-374.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">email &#160;&#160;&#160;</text>
<text text-anchor="start" x="1040.49" y="-375.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="796.16,-294.67 796.16,-354.67 1158.16,-354.67 1158.16,-294.67 796.16,-294.67"/>
<polygon fill="none" stroke="#29235c" points="796.16,-294.67 796.16,-354.67 1158.16,-354.67 1158.16,-294.67 796.16,-294.67"/>
<text text-anchor="start" x="806.89" y="-314.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">emailVisibility &#160;&#160;&#160;</text>
<text text-anchor="start" x="1033.74" y="-315.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">boolean</text>
<polygon fill="#e7e2dd" stroke="transparent" points="796.16,-234.67 796.16,-294.67 1158.16,-294.67 1158.16,-234.67 796.16,-234.67"/>
<polygon fill="none" stroke="#29235c" points="796.16,-234.67 796.16,-294.67 1158.16,-294.67 1158.16,-234.67 796.16,-234.67"/>
<text text-anchor="start" x="807.16" y="-254.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">verified &#160;&#160;&#160;</text>
<text text-anchor="start" x="1033.33" y="-255.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">boolean</text>
<polygon fill="#e7e2dd" stroke="transparent" points="796.16,-174.67 796.16,-234.67 1158.16,-234.67 1158.16,-174.67 796.16,-174.67"/>
<polygon fill="none" stroke="#29235c" points="796.16,-174.67 796.16,-234.67 1158.16,-234.67 1158.16,-174.67 796.16,-174.67"/>
<text text-anchor="start" x="807.16" y="-194.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">name &#160;&#160;&#160;</text>
<text text-anchor="start" x="1040.49" y="-195.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="796.16,-114.67 796.16,-174.67 1158.16,-174.67 1158.16,-114.67 796.16,-114.67"/>
<polygon fill="none" stroke="#29235c" points="796.16,-114.67 796.16,-174.67 1158.16,-174.67 1158.16,-114.67 796.16,-114.67"/>
<text text-anchor="start" x="807.16" y="-134.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">avatar &#160;&#160;&#160;</text>
<text text-anchor="start" x="1086.69" y="-135.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">blob</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="795.16,-113.67 795.16,-655.67 1159.16,-655.67 1159.16,-113.67 795.16,-113.67"/>
</g>
<!-- UserMetas -->
<g id="UserMetas" class="node">
<title>UserMetas</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="277.19" cy="-444.67" rx="266.66" ry="299.63"/>
<polygon fill="#1d71b8" stroke="transparent" points="91.19,-594.67 91.19,-654.67 464.19,-654.67 464.19,-594.67 91.19,-594.67"/>
<polygon fill="none" stroke="#29235c" points="91.19,-594.67 91.19,-654.67 464.19,-654.67 464.19,-594.67 91.19,-594.67"/>
<text text-anchor="start" x="138.1" y="-615.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;UserMetas &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="91.19,-534.67 91.19,-594.67 464.19,-594.67 464.19,-534.67 91.19,-534.67"/>
<polygon fill="none" stroke="#29235c" points="91.19,-534.67 91.19,-594.67 464.19,-594.67 464.19,-534.67 91.19,-534.67"/>
<text text-anchor="start" x="102.19" y="-555.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="127.08" y="-555.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="419.4" y="-555.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="91.19,-474.67 91.19,-534.67 464.19,-534.67 464.19,-474.67 91.19,-474.67"/>
<polygon fill="none" stroke="#29235c" points="91.19,-474.67 91.19,-534.67 464.19,-534.67 464.19,-474.67 91.19,-474.67"/>
<text text-anchor="start" x="102.19" y="-494.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="330.49" y="-495.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="91.19,-414.67 91.19,-474.67 464.19,-474.67 464.19,-414.67 91.19,-414.67"/>
<polygon fill="none" stroke="#29235c" points="91.19,-414.67 91.19,-474.67 464.19,-474.67 464.19,-414.67 91.19,-414.67"/>
<text text-anchor="start" x="102.19" y="-434.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="330.49" y="-435.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="91.19,-354.67 91.19,-414.67 464.19,-414.67 464.19,-354.67 91.19,-354.67"/>
<polygon fill="none" stroke="#29235c" points="91.19,-354.67 91.19,-414.67 464.19,-414.67 464.19,-354.67 91.19,-354.67"/>
<text text-anchor="start" x="102.19" y="-374.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">helloworld &#160;&#160;&#160;</text>
<text text-anchor="start" x="346.51" y="-375.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="91.19,-294.67 91.19,-354.67 464.19,-354.67 464.19,-294.67 91.19,-294.67"/>
<polygon fill="none" stroke="#29235c" points="91.19,-294.67 91.19,-354.67 464.19,-354.67 464.19,-294.67 91.19,-294.67"/>
<text text-anchor="start" x="102.03" y="-314.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">app_on_time_s &#160;&#160;&#160;</text>
<text text-anchor="start" x="355.79" y="-315.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">integer</text>
<polygon fill="#e7e2dd" stroke="transparent" points="91.19,-234.67 91.19,-294.67 464.19,-294.67 464.19,-234.67 91.19,-234.67"/>
<polygon fill="none" stroke="#29235c" points="91.19,-234.67 91.19,-294.67 464.19,-294.67 464.19,-234.67 91.19,-234.67"/>
<text text-anchor="start" x="102.19" y="-254.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">user_id &#160;&#160;&#160;</text>
<text text-anchor="start" x="355.38" y="-255.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">integer</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="89.69,-233.67 89.69,-655.67 464.69,-655.67 464.69,-233.67 89.69,-233.67"/>
</g>
<!-- UserMetas&#45;&gt;Users -->
<!-- UserMetas&#45;&gt;Users -->
<g id="edge2" class="edge">
<title>UserMetas:e&#45;&gt;Users:w</title>
<path fill="none" stroke="#29235c" stroke-width="3" d="M465.19,-264.67C659.91,-264.67 599.21,-554.21 784.95,-564.39"/>
<polygon fill="#29235c" stroke="#29235c" stroke-width="3" points="785.07,-567.9 795.16,-564.67 785.26,-560.9 785.07,-567.9"/>
<text text-anchor="middle" x="786.26" y="-535.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">1</text>
<text text-anchor="middle" x="471.41" y="-235.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">*</text>
</g>
<!-- QuizCategories -->
<g id="QuizCategories" class="node">
<title>QuizCategories</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="977.16" cy="-1251.67" rx="261.76" ry="257.27"/>
<polygon fill="#1d71b8" stroke="transparent" points="794.16,-1371.67 794.16,-1431.67 1160.16,-1431.67 1160.16,-1371.67 794.16,-1371.67"/>
<polygon fill="none" stroke="#29235c" points="794.16,-1371.67 794.16,-1431.67 1160.16,-1431.67 1160.16,-1371.67 794.16,-1371.67"/>
<text text-anchor="start" x="804.67" y="-1392.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;QuizCategories &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="794.16,-1311.67 794.16,-1371.67 1160.16,-1371.67 1160.16,-1311.67 794.16,-1311.67"/>
<polygon fill="none" stroke="#29235c" points="794.16,-1311.67 794.16,-1371.67 1160.16,-1371.67 1160.16,-1311.67 794.16,-1311.67"/>
<text text-anchor="start" x="805.16" y="-1332.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="830.05" y="-1332.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="1115.38" y="-1332.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="794.16,-1251.67 794.16,-1311.67 1160.16,-1311.67 1160.16,-1251.67 794.16,-1251.67"/>
<polygon fill="none" stroke="#29235c" points="794.16,-1251.67 794.16,-1311.67 1160.16,-1311.67 1160.16,-1251.67 794.16,-1251.67"/>
<text text-anchor="start" x="805.16" y="-1271.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="1026.46" y="-1272.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="794.16,-1191.67 794.16,-1251.67 1160.16,-1251.67 1160.16,-1191.67 794.16,-1191.67"/>
<polygon fill="none" stroke="#29235c" points="794.16,-1191.67 794.16,-1251.67 1160.16,-1251.67 1160.16,-1191.67 794.16,-1191.67"/>
<text text-anchor="start" x="805.16" y="-1211.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="1026.46" y="-1212.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="794.16,-1131.67 794.16,-1191.67 1160.16,-1191.67 1160.16,-1131.67 794.16,-1131.67"/>
<polygon fill="none" stroke="#29235c" points="794.16,-1131.67 794.16,-1191.67 1160.16,-1191.67 1160.16,-1131.67 794.16,-1131.67"/>
<text text-anchor="start" x="805.16" y="-1151.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_name &#160;&#160;&#160;</text>
<text text-anchor="start" x="1042.49" y="-1152.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="794.16,-1071.67 794.16,-1131.67 1160.16,-1131.67 1160.16,-1071.67 794.16,-1071.67"/>
<polygon fill="none" stroke="#29235c" points="794.16,-1071.67 794.16,-1131.67 1160.16,-1131.67 1160.16,-1071.67 794.16,-1071.67"/>
<text text-anchor="start" x="805.16" y="-1091.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_image &#160;&#160;&#160;</text>
<text text-anchor="start" x="1042.49" y="-1092.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="793.16,-1070.67 793.16,-1432.67 1161.16,-1432.67 1161.16,-1070.67 793.16,-1070.67"/>
</g>
<!-- QuizMatchings -->
<g id="QuizMatchings" class="node">
<title>QuizMatchings</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="277.19" cy="-1680.67" rx="255.95" ry="299.63"/>
<polygon fill="#1d71b8" stroke="transparent" points="98.19,-1830.67 98.19,-1890.67 456.19,-1890.67 456.19,-1830.67 98.19,-1830.67"/>
<polygon fill="none" stroke="#29235c" points="98.19,-1830.67 98.19,-1890.67 456.19,-1890.67 456.19,-1830.67 98.19,-1830.67"/>
<text text-anchor="start" x="109.14" y="-1851.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;QuizMatchings &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="98.19,-1770.67 98.19,-1830.67 456.19,-1830.67 456.19,-1770.67 98.19,-1770.67"/>
<polygon fill="none" stroke="#29235c" points="98.19,-1770.67 98.19,-1830.67 456.19,-1830.67 456.19,-1770.67 98.19,-1770.67"/>
<text text-anchor="start" x="109.19" y="-1791.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="134.08" y="-1791.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="411.4" y="-1791.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="98.19,-1710.67 98.19,-1770.67 456.19,-1770.67 456.19,-1710.67 98.19,-1710.67"/>
<polygon fill="none" stroke="#29235c" points="98.19,-1710.67 98.19,-1770.67 456.19,-1770.67 456.19,-1710.67 98.19,-1710.67"/>
<text text-anchor="start" x="109.19" y="-1730.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="322.49" y="-1731.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="98.19,-1650.67 98.19,-1710.67 456.19,-1710.67 456.19,-1650.67 98.19,-1650.67"/>
<polygon fill="none" stroke="#29235c" points="98.19,-1650.67 98.19,-1710.67 456.19,-1710.67 456.19,-1650.67 98.19,-1650.67"/>
<text text-anchor="start" x="109.19" y="-1670.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="322.49" y="-1671.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="98.19,-1590.67 98.19,-1650.67 456.19,-1650.67 456.19,-1590.67 98.19,-1590.67"/>
<polygon fill="none" stroke="#29235c" points="98.19,-1590.67 98.19,-1650.67 456.19,-1650.67 456.19,-1590.67 98.19,-1590.67"/>
<text text-anchor="start" x="109.19" y="-1610.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">word &#160;&#160;&#160;</text>
<text text-anchor="start" x="338.51" y="-1611.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="98.19,-1530.67 98.19,-1590.67 456.19,-1590.67 456.19,-1530.67 98.19,-1530.67"/>
<polygon fill="none" stroke="#29235c" points="98.19,-1530.67 98.19,-1590.67 456.19,-1590.67 456.19,-1530.67 98.19,-1530.67"/>
<text text-anchor="start" x="109.19" y="-1550.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">word_c &#160;&#160;&#160;</text>
<text text-anchor="start" x="338.51" y="-1551.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="98.19,-1470.67 98.19,-1530.67 456.19,-1530.67 456.19,-1470.67 98.19,-1470.67"/>
<polygon fill="none" stroke="#29235c" points="98.19,-1470.67 98.19,-1530.67 456.19,-1530.67 456.19,-1470.67 98.19,-1470.67"/>
<text text-anchor="start" x="109.19" y="-1490.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_id &#160;&#160;&#160;</text>
<text text-anchor="start" x="347.38" y="-1491.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">integer</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="97.19,-1469.67 97.19,-1891.67 457.19,-1891.67 457.19,-1469.67 97.19,-1469.67"/>
</g>
<!-- QuizMatchings&#45;&gt;QuizCategories -->
<!-- QuizMatchings&#45;&gt;QuizCategories -->
<g id="edge4" class="edge">
<title>QuizMatchings:e&#45;&gt;QuizCategories:w</title>
<path fill="none" stroke="#29235c" stroke-width="3" d="M457.19,-1500.67C618.84,-1500.67 627.65,-1348.42 782.73,-1341.88"/>
<polygon fill="#29235c" stroke="#29235c" stroke-width="3" points="783.23,-1345.37 793.16,-1341.67 783.09,-1338.37 783.23,-1345.37"/>
<text text-anchor="middle" x="784.26" y="-1312.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">1</text>
<text text-anchor="middle" x="463.41" y="-1471.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">*</text>
</g>
<!-- QuizListenings -->
<g id="QuizListenings" class="node">
<title>QuizListenings</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="277.19" cy="-1062.67" rx="254.62" ry="299.63"/>
<polygon fill="#1d71b8" stroke="transparent" points="99.19,-1212.67 99.19,-1272.67 455.19,-1272.67 455.19,-1212.67 99.19,-1212.67"/>
<polygon fill="none" stroke="#29235c" points="99.19,-1212.67 99.19,-1272.67 455.19,-1272.67 455.19,-1212.67 99.19,-1212.67"/>
<text text-anchor="start" x="110.03" y="-1233.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;QuizListenings &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="99.19,-1152.67 99.19,-1212.67 455.19,-1212.67 455.19,-1152.67 99.19,-1152.67"/>
<polygon fill="none" stroke="#29235c" points="99.19,-1152.67 99.19,-1212.67 455.19,-1212.67 455.19,-1152.67 99.19,-1152.67"/>
<text text-anchor="start" x="110.19" y="-1173.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="135.08" y="-1173.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="410.4" y="-1173.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="99.19,-1092.67 99.19,-1152.67 455.19,-1152.67 455.19,-1092.67 99.19,-1092.67"/>
<polygon fill="none" stroke="#29235c" points="99.19,-1092.67 99.19,-1152.67 455.19,-1152.67 455.19,-1092.67 99.19,-1092.67"/>
<text text-anchor="start" x="110.19" y="-1112.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="321.49" y="-1113.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="99.19,-1032.67 99.19,-1092.67 455.19,-1092.67 455.19,-1032.67 99.19,-1032.67"/>
<polygon fill="none" stroke="#29235c" points="99.19,-1032.67 99.19,-1092.67 455.19,-1092.67 455.19,-1032.67 99.19,-1032.67"/>
<text text-anchor="start" x="110.19" y="-1052.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="321.49" y="-1053.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="99.19,-972.67 99.19,-1032.67 455.19,-1032.67 455.19,-972.67 99.19,-972.67"/>
<polygon fill="none" stroke="#29235c" points="99.19,-972.67 99.19,-1032.67 455.19,-1032.67 455.19,-972.67 99.19,-972.67"/>
<text text-anchor="start" x="110.19" y="-992.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">sound &#160;&#160;&#160;</text>
<text text-anchor="start" x="337.51" y="-993.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="99.19,-912.67 99.19,-972.67 455.19,-972.67 455.19,-912.67 99.19,-912.67"/>
<polygon fill="none" stroke="#29235c" points="99.19,-912.67 99.19,-972.67 455.19,-972.67 455.19,-912.67 99.19,-912.67"/>
<text text-anchor="start" x="110.19" y="-932.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">word &#160;&#160;&#160;</text>
<text text-anchor="start" x="337.51" y="-933.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="99.19,-852.67 99.19,-912.67 455.19,-912.67 455.19,-852.67 99.19,-852.67"/>
<polygon fill="none" stroke="#29235c" points="99.19,-852.67 99.19,-912.67 455.19,-912.67 455.19,-852.67 99.19,-852.67"/>
<text text-anchor="start" x="110.19" y="-872.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_id &#160;&#160;&#160;</text>
<text text-anchor="start" x="346.38" y="-873.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">integer</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="98.19,-851.67 98.19,-1273.67 456.19,-1273.67 456.19,-851.67 98.19,-851.67"/>
</g>
<!-- QuizListenings&#45;&gt;QuizCategories -->
<!-- QuizListenings&#45;&gt;QuizCategories -->
<g id="edge6" class="edge">
<title>QuizListenings:e&#45;&gt;QuizCategories:w</title>
<path fill="none" stroke="#29235c" stroke-width="3" d="M456.19,-882.67C705.8,-882.67 544.63,-1329.2 783.01,-1341.41"/>
<polygon fill="#29235c" stroke="#29235c" stroke-width="3" points="783.07,-1344.91 793.16,-1341.67 783.25,-1337.92 783.07,-1344.91"/>
<text text-anchor="middle" x="802.05" y="-1312.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">1</text>
<text text-anchor="middle" x="462.41" y="-853.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">*</text>
</g>
<!-- QuizConnectivesCategories -->
<g id="QuizConnectivesCategories" class="node">
<title>QuizConnectivesCategories</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="977.16" cy="-2400.67" rx="386.57" ry="257.27"/>
<polygon fill="#1d71b8" stroke="transparent" points="706.16,-2520.67 706.16,-2580.67 1249.16,-2580.67 1249.16,-2520.67 706.16,-2520.67"/>
<polygon fill="none" stroke="#29235c" points="706.16,-2520.67 706.16,-2580.67 1249.16,-2580.67 1249.16,-2520.67 706.16,-2520.67"/>
<text text-anchor="start" x="717.15" y="-2541.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;QuizConnectivesCategories &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="706.16,-2460.67 706.16,-2520.67 1249.16,-2520.67 1249.16,-2460.67 706.16,-2460.67"/>
<polygon fill="none" stroke="#29235c" points="706.16,-2460.67 706.16,-2520.67 1249.16,-2520.67 1249.16,-2460.67 706.16,-2460.67"/>
<text text-anchor="start" x="717.16" y="-2481.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="742.05" y="-2481.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="1204.38" y="-2481.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="706.16,-2400.67 706.16,-2460.67 1249.16,-2460.67 1249.16,-2400.67 706.16,-2400.67"/>
<polygon fill="none" stroke="#29235c" points="706.16,-2400.67 706.16,-2460.67 1249.16,-2460.67 1249.16,-2400.67 706.16,-2400.67"/>
<text text-anchor="start" x="717.16" y="-2420.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="1115.46" y="-2421.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="706.16,-2340.67 706.16,-2400.67 1249.16,-2400.67 1249.16,-2340.67 706.16,-2340.67"/>
<polygon fill="none" stroke="#29235c" points="706.16,-2340.67 706.16,-2400.67 1249.16,-2400.67 1249.16,-2340.67 706.16,-2340.67"/>
<text text-anchor="start" x="717.16" y="-2360.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="1115.46" y="-2361.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="706.16,-2280.67 706.16,-2340.67 1249.16,-2340.67 1249.16,-2280.67 706.16,-2280.67"/>
<polygon fill="none" stroke="#29235c" points="706.16,-2280.67 706.16,-2340.67 1249.16,-2340.67 1249.16,-2280.67 706.16,-2280.67"/>
<text text-anchor="start" x="717.16" y="-2300.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_name &#160;&#160;&#160;</text>
<text text-anchor="start" x="1131.49" y="-2301.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="706.16,-2220.67 706.16,-2280.67 1249.16,-2280.67 1249.16,-2220.67 706.16,-2220.67"/>
<polygon fill="none" stroke="#29235c" points="706.16,-2220.67 706.16,-2280.67 1249.16,-2280.67 1249.16,-2220.67 706.16,-2220.67"/>
<text text-anchor="start" x="717.16" y="-2240.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_image &#160;&#160;&#160;</text>
<text text-anchor="start" x="1131.49" y="-2241.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="704.66,-2219.67 704.66,-2581.67 1249.66,-2581.67 1249.66,-2219.67 704.66,-2219.67"/>
</g>
<!-- QuizConnectives -->
<g id="QuizConnectives" class="node">
<title>QuizConnectives</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="277.19" cy="-2340.67" rx="277.37" ry="342.48"/>
<polygon fill="#1d71b8" stroke="transparent" points="83.19,-2520.67 83.19,-2580.67 471.19,-2580.67 471.19,-2520.67 83.19,-2520.67"/>
<polygon fill="none" stroke="#29235c" points="83.19,-2520.67 83.19,-2580.67 471.19,-2580.67 471.19,-2520.67 83.19,-2520.67"/>
<text text-anchor="start" x="94.03" y="-2541.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;QuizConnectives &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="83.19,-2460.67 83.19,-2520.67 471.19,-2520.67 471.19,-2460.67 83.19,-2460.67"/>
<polygon fill="none" stroke="#29235c" points="83.19,-2460.67 83.19,-2520.67 471.19,-2520.67 471.19,-2460.67 83.19,-2460.67"/>
<text text-anchor="start" x="94.19" y="-2481.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="119.08" y="-2481.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="426.4" y="-2481.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="83.19,-2400.67 83.19,-2460.67 471.19,-2460.67 471.19,-2400.67 83.19,-2400.67"/>
<polygon fill="none" stroke="#29235c" points="83.19,-2400.67 83.19,-2460.67 471.19,-2460.67 471.19,-2400.67 83.19,-2400.67"/>
<text text-anchor="start" x="94.19" y="-2420.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="337.49" y="-2421.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="83.19,-2340.67 83.19,-2400.67 471.19,-2400.67 471.19,-2340.67 83.19,-2340.67"/>
<polygon fill="none" stroke="#29235c" points="83.19,-2340.67 83.19,-2400.67 471.19,-2400.67 471.19,-2340.67 83.19,-2340.67"/>
<text text-anchor="start" x="94.19" y="-2360.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="337.49" y="-2361.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="83.19,-2280.67 83.19,-2340.67 471.19,-2340.67 471.19,-2280.67 83.19,-2280.67"/>
<polygon fill="none" stroke="#29235c" points="83.19,-2280.67 83.19,-2340.67 471.19,-2340.67 471.19,-2280.67 83.19,-2280.67"/>
<text text-anchor="start" x="94.19" y="-2300.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">question_fh &#160;&#160;&#160;</text>
<text text-anchor="start" x="353.51" y="-2301.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="83.19,-2220.67 83.19,-2280.67 471.19,-2280.67 471.19,-2220.67 83.19,-2220.67"/>
<polygon fill="none" stroke="#29235c" points="83.19,-2220.67 83.19,-2280.67 471.19,-2280.67 471.19,-2220.67 83.19,-2220.67"/>
<text text-anchor="start" x="94.19" y="-2240.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">question_sh &#160;&#160;&#160;</text>
<text text-anchor="start" x="353.51" y="-2241.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="83.19,-2160.67 83.19,-2220.67 471.19,-2220.67 471.19,-2160.67 83.19,-2160.67"/>
<polygon fill="none" stroke="#29235c" points="83.19,-2160.67 83.19,-2220.67 471.19,-2220.67 471.19,-2160.67 83.19,-2160.67"/>
<text text-anchor="start" x="94.19" y="-2180.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">modal_ans &#160;&#160;&#160;</text>
<text text-anchor="start" x="353.51" y="-2181.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="83.19,-2100.67 83.19,-2160.67 471.19,-2160.67 471.19,-2100.67 83.19,-2100.67"/>
<polygon fill="none" stroke="#29235c" points="83.19,-2100.67 83.19,-2160.67 471.19,-2160.67 471.19,-2100.67 83.19,-2100.67"/>
<text text-anchor="start" x="94.19" y="-2120.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_id &#160;&#160;&#160;</text>
<text text-anchor="start" x="362.38" y="-2121.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">integer</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="82.19,-2099.67 82.19,-2581.67 472.19,-2581.67 472.19,-2099.67 82.19,-2099.67"/>
</g>
<!-- QuizConnectives&#45;&gt;QuizConnectivesCategories -->
<!-- QuizConnectives&#45;&gt;QuizConnectivesCategories -->
<g id="edge8" class="edge">
<title>QuizConnectives:e&#45;&gt;QuizConnectivesCategories:w</title>
<path fill="none" stroke="#29235c" stroke-width="3" d="M472.19,-2130.67C659.32,-2130.67 519.82,-2477.78 695.16,-2490.32"/>
<polygon fill="#29235c" stroke="#29235c" stroke-width="3" points="695.04,-2493.82 705.16,-2490.67 695.29,-2486.82 695.04,-2493.82"/>
<text text-anchor="middle" x="696.26" y="-2461.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">1</text>
<text text-anchor="middle" x="478.41" y="-2101.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">*</text>
</g>
<!-- LessonTypes -->
<g id="LessonTypes" class="node">
<title>LessonTypes</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="1640.36" cy="-3392.67" rx="240.33" ry="257.27"/>
<polygon fill="#1d71b8" stroke="transparent" points="1472.36,-3512.67 1472.36,-3572.67 1808.36,-3572.67 1808.36,-3512.67 1472.36,-3512.67"/>
<polygon fill="none" stroke="#29235c" points="1472.36,-3512.67 1472.36,-3572.67 1808.36,-3572.67 1808.36,-3512.67 1472.36,-3512.67"/>
<text text-anchor="start" x="1482.97" y="-3533.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;LessonTypes &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="1472.36,-3452.67 1472.36,-3512.67 1808.36,-3512.67 1808.36,-3452.67 1472.36,-3452.67"/>
<polygon fill="none" stroke="#29235c" points="1472.36,-3452.67 1472.36,-3512.67 1808.36,-3512.67 1808.36,-3452.67 1472.36,-3452.67"/>
<text text-anchor="start" x="1483.36" y="-3473.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="1508.25" y="-3473.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="1763.58" y="-3473.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="1472.36,-3392.67 1472.36,-3452.67 1808.36,-3452.67 1808.36,-3392.67 1472.36,-3392.67"/>
<polygon fill="none" stroke="#29235c" points="1472.36,-3392.67 1472.36,-3452.67 1808.36,-3452.67 1808.36,-3392.67 1472.36,-3392.67"/>
<text text-anchor="start" x="1483.36" y="-3412.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="1674.67" y="-3413.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="1472.36,-3332.67 1472.36,-3392.67 1808.36,-3392.67 1808.36,-3332.67 1472.36,-3332.67"/>
<polygon fill="none" stroke="#29235c" points="1472.36,-3332.67 1472.36,-3392.67 1808.36,-3392.67 1808.36,-3332.67 1472.36,-3332.67"/>
<text text-anchor="start" x="1483.36" y="-3352.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="1674.67" y="-3353.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="1472.36,-3272.67 1472.36,-3332.67 1808.36,-3332.67 1808.36,-3272.67 1472.36,-3272.67"/>
<polygon fill="none" stroke="#29235c" points="1472.36,-3272.67 1472.36,-3332.67 1808.36,-3332.67 1808.36,-3272.67 1472.36,-3272.67"/>
<text text-anchor="start" x="1483.36" y="-3292.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">name &#160;&#160;&#160;</text>
<text text-anchor="start" x="1690.69" y="-3293.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="1472.36,-3212.67 1472.36,-3272.67 1808.36,-3272.67 1808.36,-3212.67 1472.36,-3212.67"/>
<polygon fill="none" stroke="#29235c" points="1472.36,-3212.67 1472.36,-3272.67 1808.36,-3272.67 1808.36,-3212.67 1472.36,-3212.67"/>
<text text-anchor="start" x="1483.36" y="-3232.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">type &#160;&#160;&#160;</text>
<text text-anchor="start" x="1690.69" y="-3233.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="1471.36,-3211.67 1471.36,-3573.67 1809.36,-3573.67 1809.36,-3211.67 1471.36,-3211.67"/>
</g>
<!-- LessonCategories -->
<g id="LessonCategories" class="node">
<title>LessonCategories</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="977.16" cy="-3362.67" rx="288.5" ry="299.63"/>
<polygon fill="#1d71b8" stroke="transparent" points="775.16,-3512.67 775.16,-3572.67 1179.16,-3572.67 1179.16,-3512.67 775.16,-3512.67"/>
<polygon fill="none" stroke="#29235c" points="775.16,-3512.67 775.16,-3572.67 1179.16,-3572.67 1179.16,-3512.67 775.16,-3512.67"/>
<text text-anchor="start" x="785.99" y="-3533.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;LessonCategories &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="775.16,-3452.67 775.16,-3512.67 1179.16,-3512.67 1179.16,-3452.67 775.16,-3452.67"/>
<polygon fill="none" stroke="#29235c" points="775.16,-3452.67 775.16,-3512.67 1179.16,-3512.67 1179.16,-3452.67 775.16,-3452.67"/>
<text text-anchor="start" x="786.16" y="-3473.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="811.05" y="-3473.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="1134.38" y="-3473.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="775.16,-3392.67 775.16,-3452.67 1179.16,-3452.67 1179.16,-3392.67 775.16,-3392.67"/>
<polygon fill="none" stroke="#29235c" points="775.16,-3392.67 775.16,-3452.67 1179.16,-3452.67 1179.16,-3392.67 775.16,-3392.67"/>
<text text-anchor="start" x="786.16" y="-3412.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="1045.46" y="-3413.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="775.16,-3332.67 775.16,-3392.67 1179.16,-3392.67 1179.16,-3332.67 775.16,-3332.67"/>
<polygon fill="none" stroke="#29235c" points="775.16,-3332.67 775.16,-3392.67 1179.16,-3392.67 1179.16,-3332.67 775.16,-3332.67"/>
<text text-anchor="start" x="786.16" y="-3352.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="1045.46" y="-3353.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="775.16,-3272.67 775.16,-3332.67 1179.16,-3332.67 1179.16,-3272.67 775.16,-3272.67"/>
<polygon fill="none" stroke="#29235c" points="775.16,-3272.67 775.16,-3332.67 1179.16,-3332.67 1179.16,-3272.67 775.16,-3272.67"/>
<text text-anchor="start" x="786.16" y="-3292.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_name &#160;&#160;&#160;</text>
<text text-anchor="start" x="1061.49" y="-3293.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="775.16,-3212.67 775.16,-3272.67 1179.16,-3272.67 1179.16,-3212.67 775.16,-3212.67"/>
<polygon fill="none" stroke="#29235c" points="775.16,-3212.67 775.16,-3272.67 1179.16,-3272.67 1179.16,-3212.67 775.16,-3212.67"/>
<text text-anchor="start" x="786.16" y="-3232.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_image &#160;&#160;&#160;</text>
<text text-anchor="start" x="1061.49" y="-3233.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="775.16,-3152.67 775.16,-3212.67 1179.16,-3212.67 1179.16,-3152.67 775.16,-3152.67"/>
<polygon fill="none" stroke="#29235c" points="775.16,-3152.67 775.16,-3212.67 1179.16,-3212.67 1179.16,-3152.67 775.16,-3152.67"/>
<text text-anchor="start" x="786.16" y="-3172.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">lesson_type_id &#160;&#160;&#160;</text>
<text text-anchor="start" x="1070.36" y="-3173.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">integer</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="774.16,-3151.67 774.16,-3573.67 1180.16,-3573.67 1180.16,-3151.67 774.16,-3151.67"/>
</g>
<!-- LessonCategories&#45;&gt;LessonTypes -->
<!-- LessonCategories&#45;&gt;LessonTypes -->
<g id="edge10" class="edge">
<title>LessonCategories:e&#45;&gt;LessonTypes:w</title>
<path fill="none" stroke="#29235c" stroke-width="3" d="M1180.16,-3182.67C1362.53,-3182.67 1288.44,-3471.64 1461.29,-3482.36"/>
<polygon fill="#29235c" stroke="#29235c" stroke-width="3" points="1461.26,-3485.86 1471.36,-3482.67 1461.47,-3478.86 1461.26,-3485.86"/>
<text text-anchor="middle" x="1462.47" y="-3492.27" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">1</text>
<text text-anchor="middle" x="1186.38" y="-3192.27" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">*</text>
</g>
<!-- Vocabularies -->
<g id="Vocabularies" class="node">
<title>Vocabularies</title>
<ellipse fill="none" stroke="black" stroke-width="0" cx="277.19" cy="-3212.67" rx="236.76" ry="511.89"/>
<polygon fill="#1d71b8" stroke="transparent" points="112.19,-3512.67 112.19,-3572.67 443.19,-3572.67 443.19,-3512.67 112.19,-3512.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-3512.67 112.19,-3572.67 443.19,-3572.67 443.19,-3512.67 112.19,-3512.67"/>
<text text-anchor="start" x="122.97" y="-3533.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#ffffff"> &#160;&#160;&#160;&#160;&#160;&#160;Vocabularies &#160;&#160;&#160;&#160;&#160;&#160;</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-3452.67 112.19,-3512.67 443.19,-3512.67 443.19,-3452.67 112.19,-3452.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-3452.67 112.19,-3512.67 443.19,-3512.67 443.19,-3452.67 112.19,-3452.67"/>
<text text-anchor="start" x="123.19" y="-3473.87" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="32.00" fill="#29235c">id</text>
<text text-anchor="start" x="148.08" y="-3473.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c"> &#160;&#160;&#160;</text>
<text text-anchor="start" x="398.4" y="-3473.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">int</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-3392.67 112.19,-3452.67 443.19,-3452.67 443.19,-3392.67 112.19,-3392.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-3392.67 112.19,-3452.67 443.19,-3452.67 443.19,-3392.67 112.19,-3392.67"/>
<text text-anchor="start" x="123.19" y="-3412.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">created &#160;&#160;&#160;</text>
<text text-anchor="start" x="309.49" y="-3413.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-3332.67 112.19,-3392.67 443.19,-3392.67 443.19,-3332.67 112.19,-3332.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-3332.67 112.19,-3392.67 443.19,-3392.67 443.19,-3332.67 112.19,-3332.67"/>
<text text-anchor="start" x="123.19" y="-3352.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">updated &#160;&#160;&#160;</text>
<text text-anchor="start" x="309.49" y="-3353.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">datetime</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-3272.67 112.19,-3332.67 443.19,-3332.67 443.19,-3272.67 112.19,-3272.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-3272.67 112.19,-3332.67 443.19,-3332.67 443.19,-3272.67 112.19,-3272.67"/>
<text text-anchor="start" x="123.19" y="-3292.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">image &#160;&#160;&#160;</text>
<text text-anchor="start" x="325.51" y="-3293.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-3212.67 112.19,-3272.67 443.19,-3272.67 443.19,-3212.67 112.19,-3212.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-3212.67 112.19,-3272.67 443.19,-3272.67 443.19,-3212.67 112.19,-3212.67"/>
<text text-anchor="start" x="123.19" y="-3232.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">sound &#160;&#160;&#160;</text>
<text text-anchor="start" x="325.51" y="-3233.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-3152.67 112.19,-3212.67 443.19,-3212.67 443.19,-3152.67 112.19,-3152.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-3152.67 112.19,-3212.67 443.19,-3212.67 443.19,-3152.67 112.19,-3152.67"/>
<text text-anchor="start" x="123.19" y="-3172.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">word &#160;&#160;&#160;</text>
<text text-anchor="start" x="325.51" y="-3173.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-3092.67 112.19,-3152.67 443.19,-3152.67 443.19,-3092.67 112.19,-3092.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-3092.67 112.19,-3152.67 443.19,-3152.67 443.19,-3092.67 112.19,-3092.67"/>
<text text-anchor="start" x="123.19" y="-3112.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">word_c &#160;&#160;&#160;</text>
<text text-anchor="start" x="325.51" y="-3113.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-3032.67 112.19,-3092.67 443.19,-3092.67 443.19,-3032.67 112.19,-3032.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-3032.67 112.19,-3092.67 443.19,-3092.67 443.19,-3032.67 112.19,-3032.67"/>
<text text-anchor="start" x="123.19" y="-3052.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">sample_e &#160;&#160;&#160;</text>
<text text-anchor="start" x="325.51" y="-3053.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-2972.67 112.19,-3032.67 443.19,-3032.67 443.19,-2972.67 112.19,-2972.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-2972.67 112.19,-3032.67 443.19,-3032.67 443.19,-2972.67 112.19,-2972.67"/>
<text text-anchor="start" x="123.19" y="-2992.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">sample_c &#160;&#160;&#160;</text>
<text text-anchor="start" x="325.51" y="-2993.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-2912.67 112.19,-2972.67 443.19,-2972.67 443.19,-2912.67 112.19,-2912.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-2912.67 112.19,-2972.67 443.19,-2972.67 443.19,-2912.67 112.19,-2912.67"/>
<text text-anchor="start" x="123.19" y="-2932.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">cat_id &#160;&#160;&#160;</text>
<text text-anchor="start" x="334.38" y="-2933.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">integer</text>
<polygon fill="#e7e2dd" stroke="transparent" points="112.19,-2852.67 112.19,-2912.67 443.19,-2912.67 443.19,-2852.67 112.19,-2852.67"/>
<polygon fill="none" stroke="#29235c" points="112.19,-2852.67 112.19,-2912.67 443.19,-2912.67 443.19,-2852.67 112.19,-2852.67"/>
<text text-anchor="start" x="123.19" y="-2872.87" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">category &#160;&#160;&#160;</text>
<text text-anchor="start" x="325.51" y="-2873.87" font-family="Helvetica,sans-Serif" font-style="italic" font-size="32.00" fill="#29235c">varchar</text>
<polygon fill="none" stroke="#29235c" stroke-width="2" points="110.69,-2851.67 110.69,-3573.67 443.69,-3573.67 443.69,-2851.67 110.69,-2851.67"/>
</g>
<!-- Vocabularies&#45;&gt;LessonCategories -->
<!-- Vocabularies&#45;&gt;LessonCategories -->
<g id="edge12" class="edge">
<title>Vocabularies:e&#45;&gt;LessonCategories:w</title>
<path fill="none" stroke="#29235c" stroke-width="3" d="M444.19,-2942.67C722.01,-2942.67 498.5,-3469.56 764.09,-3482.43"/>
<polygon fill="#29235c" stroke="#29235c" stroke-width="3" points="764.08,-3485.93 774.16,-3482.67 764.25,-3478.93 764.08,-3485.93"/>
<text text-anchor="middle" x="765.26" y="-3492.27" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">1</text>
<text text-anchor="middle" x="450.41" y="-2952.27" font-family="Helvetica,sans-Serif" font-size="32.00" fill="#29235c">*</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 50 KiB

View File

@@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -ex
npm install -g @softwaretechnik/dbml-renderer
dbml-renderer -i schema.dbml -o output.svg
echo "done"

View File

@@ -0,0 +1,137 @@
// LessonTypes stores different types of lessons
Table LessonTypes {
// system field
id int [pk, increment] // unique identifier for the lesson type
created datetime [default: `now()`] // timestamp when the lesson type was created
updated datetime // timestamp when the lesson type was last updated
// value field
name varchar // name of the lesson type
type varchar // type category
}
// LessonCategories stores categories of lessons
Table LessonCategories {
// system field
id int [pk, increment] // unique identifier for the lesson category
created datetime [default: `now()`] // timestamp when the category was created
updated datetime // timestamp when the category was last updated
// value field
cat_name varchar // image file name
cat_image varchar // image representing the category
lesson_type_id integer [ref: > LessonTypes.id] // foreign key referencing LessonTypes.id
}
Table Helloworlds {
// system field
id int [pk, increment] // id field, increment
created datetime [default: `now()`] // record create time
updated datetime // record update time
}
Table Users {
// system field
id int [pk, increment]
created datetime [default: `now()`]
updated datetime
// value field
email varchar
emailVisibility boolean
verified boolean
name varchar
avatar blob
}
Table UserMetas {
// system field
id int [pk, increment]
created datetime [default: `now()`]
updated datetime
// value field
helloworld varchar
app_on_time_s integer
user_id integer [ref: > Users.id]
}
Table QuizCategories {
// system field
id int [pk, increment]
created datetime [default: `now()`]
updated datetime
// value field
cat_name varchar // category name
cat_image varchar // category image
}
// stores all questions of matching frenzy
Table QuizMatchings {
// system field
id int [pk, increment] // id field, increment
created datetime [default: `now()`] // record create time
updated datetime // record update time
// value field
word varchar // modal answer
word_c varchar // question
cat_id integer [ref: > QuizCategories.id] // foreign key to QuizCategories.id
}
// QuizListening stores all listening quiz data
Table QuizListenings {
// system field
id int [pk, increment] // id field, increment
created datetime [default: `now()`] // record create time
updated datetime // record update time
// value field
sound varchar // URL to the sound file
word varchar // The word in the quiz
cat_id integer [ref: > QuizCategories.id]
}
// stores all categories of connectives revision quiz
Table QuizConnectivesCategories {
// system field
id int [pk, increment] // id field, increment
created datetime [default: `now()`] // record create time
updated datetime // record update time
// value field
cat_name varchar // category name
cat_image varchar // category image
}
// stores all questions of connectives revision quiz
Table QuizConnectives {
// system field
id int [pk, increment] // id field, increment
created datetime [default: `now()`] // record create time
updated datetime // record update time
// value field
question_fh varchar // first half
question_sh varchar // second half
modal_ans varchar // modal ans
cat_id integer [ref: > QuizConnectivesCategories.id] // foreign key to QuizConnectivesCategories.id
}
// Lessons stores all lessons in the database
Table Vocabularies {
// system field
id int [pk, increment] // unique identifier for the lesson
created datetime [default: `now()`] // timestamp when the lesson was created
updated datetime // timestamp when the lesson was last updated
// value field
image varchar // URL to the image associated with the lesson
sound varchar // URL to the sound file associated with the lesson
word varchar // The word in English
word_c varchar // The word in Chinese
sample_e varchar // Sample sentence in English using the word
sample_c varchar // Sample sentence in Chinese using the word
cat_id integer [ref: > LessonCategories.id] // foreign key referring to LessonCategories.id
category varchar // The category to which the lesson belongs
}