Add visual diagrams for relationships.

Visual diagrams could help readers to understand associations between models more easily.

Closes #10
This commit is contained in:
Madeorsk 2024-11-27 19:49:30 +01:00
parent a2f6152337
commit edcc75f003
Signed by: Madeorsk
GPG key ID: 677E51CA765BB79F
6 changed files with 60 additions and 0 deletions

View file

@ -44,6 +44,8 @@ This type of relationship is used when only a single model is related. In our ch
### Direct
![Direct one relation diagram](/relationships/one-direct.svg)
The direct one relationship uses a local foreign key to get the related model. In other libraries, this type of relationship can be referred as "belongs to". It has two parameters:
- **mandatory** `foreignKey`: name of the field / column where the related model key is stored.
@ -61,6 +63,8 @@ const MessageRelationships = MessageRepository.relationships.define(.{
### Reverse
![Reverse one relation diagram](/relationships/one-reverse.svg)
The reverse one relationship uses a distant foreign key to get the related model. It can be used to get related models when they hold a foreign key to the origin model. In other libraries, this type of relationship can be referred as "has one". It has two parameters:
- _optional_ `foreignKey`: name of the field / column where the related model key is stored. When none is provided, the default related model key name is used.
@ -78,6 +82,8 @@ const UserRelationships = UserRepository.relationships.define(.{
### Through
![Through one relation diagram](/relationships/one-through.svg)
The through one relationship uses a pivot table to get the related model. It can be used to get related models when the foreign key is hold by an intermediate table. In other libraries, this type of relationship can be referred as "has one through". It has five parameters:
- **mandatory** `table`: name of the pivot / intermediate / join table.
@ -111,6 +117,8 @@ This type of relationship is used when only a many models are related. In our ch
### Direct
![Direct many relation diagram](/relationships/many-direct.svg)
The direct many relationship uses a distant foreign key to get related models. It's often used at the opposite side of a direct one relationship. In other libraries, this type of relationship can be referred as "has many". It has two parameters:
- **mandatory** `foreignKey`: name of the field / column where the origin model key is stored.
@ -128,6 +136,8 @@ const UserRelationships = UserRepository.relationships.define(.{
### Through
![Through many relation diagram](/relationships/many-through.svg)
The through many relationship uses a pivot table to get the related models. It can be used to get related models when the foreign key is hold by an intermediate table. In other libraries, this type of relationship can be referred as "belongs to many". It has five parameters:
- **mandatory** `table`: name of the pivot / intermediate / join table.

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 764 205.5" width="1528" height="411">
<!-- svg-source:excalidraw -->
<defs>
<style class="style-fonts">
@font-face { font-family: Comic Shanns; src: url(data:font/woff2;base64,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); }
</style>
</defs>
<rect x="0" y="0" width="764" height="205.5" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 10.5) rotate(0 144 92.5)"><path d="M-1.9 2.89 C107.45 2.5, 215.36 -0.37, 288.24 -1.34 M0.3 -1.46 C60.12 2.91, 118.57 1.74, 288.16 -0.34 M289.18 0.14 C283.94 72.43, 283.38 137.42, 287.33 183.94 M288.17 0.63 C291.55 57.13, 290.37 112.79, 289.04 184.41 M289.27 186.5 C182.41 187.24, 70.16 188.74, -0.96 186.3 M288.37 185.34 C200.27 180.6, 113.28 182.46, -0.39 185.05 M-0.45 187.47 C-0.47 133.34, -1.48 78.47, -1.75 3.41 M0.42 185.7 C1.02 111.53, 2.96 40.05, -1.35 1.65" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(123.20000076293945 50.5) rotate(0 30.799999237060547 52.5)"><text x="30.799999237060547" y="24.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">User</text><text x="30.799999237060547" y="59.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="30.799999237060547" y="94.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">id</text></g><g stroke-linecap="round" transform="translate(466 10) rotate(0 144 92.5)"><path d="M-1.91 -2.48 C61.07 -0.47, 118.05 0.32, 290.41 0.17 M-0.13 0.34 C87.86 -0.65, 173.95 -0.96, 288.19 -1.16 M288.41 1.95 C287.54 73.71, 287.93 147.22, 289.12 183.82 M289.11 -0.34 C290.62 53.43, 289.32 109.98, 289.38 186.73 M285.75 183.56 C196.57 186.45, 109.03 184.93, -1.97 184.69 M289.02 184.05 C191.11 188.42, 95.52 189.53, 0.53 186.34 M2.04 184.56 C-3.39 134.65, -0.79 80.46, -1.68 3.39 M1.42 186.98 C-1.58 112.68, -2.92 40.52, -0.86 -0.68" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(555.8 50) rotate(0 54.19999999999999 52.5)"><text x="54.199999999999996" y="24.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Message</text><text x="54.199999999999996" y="59.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="54.199999999999996" y="94.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">user_id</text></g><g stroke-linecap="round"><g transform="translate(303 135.5) rotate(0 79 0)"><path d="M0 0 C60.99 -4.14, 121.8 -0.06, 158 0 M0 0 C62.51 1.54, 121.81 -1.18, 158 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(303 135.5) rotate(0 79 0)"><path d="M135.05 7.74 C144.41 6.39, 153.93 3.3, 158.05 1.56 M134.98 8.6 C143.26 6.19, 151.68 1.44, 158.35 -0.98" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(303 135.5) rotate(0 79 0)"><path d="M135.15 -9.36 C144.59 -4.24, 154.08 -0.86, 158.05 1.56 M135.08 -8.5 C143.31 -4.4, 151.7 -2.64, 158.35 -0.98" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask></svg>

After

Width:  |  Height:  |  Size: 7.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.9 KiB

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 765 206.5" width="1530" height="413">
<!-- svg-source:excalidraw -->
<defs>
<style class="style-fonts">
@font-face { font-family: Comic Shanns; src: url(data:font/woff2;base64,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); }
</style>
</defs>
<rect x="0" y="0" width="765" height="206.5" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 11.5) rotate(0 144 92.5)"><path d="M-1.9 2.89 C107.45 2.5, 215.36 -0.37, 288.24 -1.34 M0.3 -1.46 C60.12 2.91, 118.57 1.74, 288.16 -0.34 M289.18 0.14 C283.94 72.43, 283.38 137.42, 287.33 183.94 M288.17 0.63 C291.55 57.13, 290.37 112.79, 289.04 184.41 M289.27 186.5 C182.41 187.24, 70.16 188.74, -0.96 186.3 M288.37 185.34 C200.27 180.6, 113.28 182.46, -0.39 185.05 M-0.45 187.47 C-0.47 133.34, -1.48 78.47, -1.75 3.41 M0.42 185.7 C1.02 111.53, 2.96 40.05, -1.35 1.65" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(99.80000000000001 51.5) rotate(0 54.19999999999999 52.5)"><text x="54.199999999999996" y="24.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Message</text><text x="54.199999999999996" y="59.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="54.199999999999996" y="94.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">user_id</text></g><g stroke-linecap="round" transform="translate(467 10) rotate(0 144 92.5)"><path d="M-1.91 -2.48 C61.07 -0.47, 118.05 0.32, 290.41 0.17 M-0.13 0.34 C87.86 -0.65, 173.95 -0.96, 288.19 -1.16 M288.41 1.95 C287.54 73.71, 287.93 147.22, 289.12 183.82 M289.11 -0.34 C290.62 53.43, 289.32 109.98, 289.38 186.73 M285.75 183.56 C196.57 186.45, 109.03 184.93, -1.97 184.69 M289.02 184.05 C191.11 188.42, 95.52 189.53, 0.53 186.34 M2.04 184.56 C-3.39 134.65, -0.79 80.46, -1.68 3.39 M1.42 186.98 C-1.58 112.68, -2.92 40.52, -0.86 -0.68" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(580.2000007629395 50) rotate(0 30.799999237060547 52.5)"><text x="30.799999237060547" y="24.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">User</text><text x="30.799999237060547" y="59.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="30.799999237060547" y="94.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">id</text></g><g stroke-linecap="round"><g transform="translate(303 139.5) rotate(0 79.5 0)"><path d="M0 0 C56.02 -2.21, 117.58 -0.34, 159 0 M0 0 C35.29 -1.93, 74.18 -2.9, 159 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(303 139.5) rotate(0 79.5 0)"><path d="M134.16 6.09 C144.55 4.22, 151.3 0.71, 160.71 -0.86 M135.07 8.52 C143.72 5.45, 151.61 2.34, 158.53 -0.88" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(303 139.5) rotate(0 79.5 0)"><path d="M134.59 -11.01 C144.66 -6.61, 151.26 -3.84, 160.71 -0.86 M135.5 -8.58 C144.17 -5.85, 151.91 -3.14, 158.53 -0.88" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask></svg>

After

Width:  |  Height:  |  Size: 7.3 KiB

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 765 206.5" width="1530" height="413">
<!-- svg-source:excalidraw -->
<defs>
<style class="style-fonts">
@font-face { font-family: Comic Shanns; src: url(data:font/woff2;base64,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); }
</style>
</defs>
<rect x="0" y="0" width="765" height="206.5" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 11.5) rotate(0 144 92.5)"><path d="M-1.9 2.89 C107.45 2.5, 215.36 -0.37, 288.24 -1.34 M0.3 -1.46 C60.12 2.91, 118.57 1.74, 288.16 -0.34 M289.18 0.14 C283.94 72.43, 283.38 137.42, 287.33 183.94 M288.17 0.63 C291.55 57.13, 290.37 112.79, 289.04 184.41 M289.27 186.5 C182.41 187.24, 70.16 188.74, -0.96 186.3 M288.37 185.34 C200.27 180.6, 113.28 182.46, -0.39 185.05 M-0.45 187.47 C-0.47 133.34, -1.48 78.47, -1.75 3.41 M0.42 185.7 C1.02 111.53, 2.96 40.05, -1.35 1.65" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(123.20000076293945 51.5) rotate(0 30.799999237060547 52.5)"><text x="30.799999237060547" y="24.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">User</text><text x="30.799999237060547" y="59.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="30.799999237060547" y="94.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">id</text></g><g stroke-linecap="round" transform="translate(467 10) rotate(0 144 92.5)"><path d="M-1.91 -2.48 C61.07 -0.47, 118.05 0.32, 290.41 0.17 M-0.13 0.34 C87.86 -0.65, 173.95 -0.96, 288.19 -1.16 M288.41 1.95 C287.54 73.71, 287.93 147.22, 289.12 183.82 M289.11 -0.34 C290.62 53.43, 289.32 109.98, 289.38 186.73 M285.75 183.56 C196.57 186.45, 109.03 184.93, -1.97 184.69 M289.02 184.05 C191.11 188.42, 95.52 189.53, 0.53 186.34 M2.04 184.56 C-3.39 134.65, -0.79 80.46, -1.68 3.39 M1.42 186.98 C-1.58 112.68, -2.92 40.52, -0.86 -0.68" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(549.4000015258789 50) rotate(0 61.599998474121094 52.5)"><text x="61.599998474121094" y="24.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">UserInfo</text><text x="61.599998474121094" y="59.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="61.599998474121094" y="94.5" font-family="Comic Shanns, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">user_id</text></g><g stroke-linecap="round"><g transform="translate(462 140.5) rotate(0 -79.5 0)"><path d="M0 0 C-54.59 2.6, -117.22 -0.35, -159 0 M0 0 C-52.69 -4.86, -106.46 -4.13, -159 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(462 140.5) rotate(0 -79.5 0)"><path d="M-134.7 -8.66 C-145.74 -6.56, -151.87 -1.4, -160.97 1.3 M-135.21 -9.29 C-140.81 -7.26, -145.18 -5.29, -158.97 -0.27" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(462 140.5) rotate(0 -79.5 0)"><path d="M-133.72 8.41 C-144.96 4.36, -151.45 3.37, -160.97 1.3 M-134.23 7.78 C-140.16 6.16, -144.74 4.48, -158.97 -0.27" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(608 68.5) rotate(0 0 0)"><path d="M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(608 68.5) rotate(0 0 0)"><path d="MNaN NaN CNaN NaN, NaN NaN, NaN NaN MNaN NaN CNaN NaN, NaN NaN, NaN NaN" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(608 68.5) rotate(0 0 0)"><path d="MNaN NaN CNaN NaN, NaN NaN, NaN NaN MNaN NaN CNaN NaN, NaN NaN, NaN NaN" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask></svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB