Add visual diagrams for relationships.
Visual diagrams could help readers to understand associations between models more easily. Closes #10
This commit is contained in:
parent
a2f6152337
commit
edcc75f003
6 changed files with 60 additions and 0 deletions
|
@ -44,6 +44,8 @@ This type of relationship is used when only a single model is related. In our ch
|
||||||
|
|
||||||
### Direct
|
### 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:
|
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.
|
- **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
|
||||||
|
|
||||||
|
![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:
|
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.
|
- _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
|
||||||
|
|
||||||
|
![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:
|
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.
|
- **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
|
||||||
|
|
||||||
|
![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:
|
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.
|
- **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
|
||||||
|
|
||||||
|
![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:
|
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.
|
- **mandatory** `table`: name of the pivot / intermediate / join table.
|
||||||
|
|
10
docs/public/relationships/many-direct.svg
Normal file
10
docs/public/relationships/many-direct.svg
Normal 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 |
10
docs/public/relationships/many-through.svg
Normal file
10
docs/public/relationships/many-through.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 9.9 KiB |
10
docs/public/relationships/one-direct.svg
Normal file
10
docs/public/relationships/one-direct.svg
Normal 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 |
10
docs/public/relationships/one-reverse.svg
Normal file
10
docs/public/relationships/one-reverse.svg
Normal 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 |
10
docs/public/relationships/one-through.svg
Normal file
10
docs/public/relationships/one-through.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 10 KiB |
Loading…
Reference in a new issue