mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-10-14 17:54:42 +00:00
* Integrate Spectre.Console into seed application, use async data loading * Replace stored-procedure repositories with Dapper-based repositories Removes the USP_* stored procedures for Auth, Location, and Brewery data access in favour of services built with Dapper. Adds a new Features.Locations slice and optimistic concurrency support for the Brewery slice. * Add new documentation for Dapper migration/database schema * Update FluentAssertions to most recent open source ver * Update XML doc comment in backend projects * Modify brewery location dto to include denormalized data * - Updated column names from 'Timer' to 'RowVersion' in schema.sql for - Introduced new BeerPost entity and updated BreweryPost and BreweryPostLocation entities to use 'RowVersion' for concurrency. - Modified UserAccount, UserCredential, UserVerification, City, StateProvince, and Country entities to use 'RowVersion' instead of 'Timer'. - Updated tests and command handlers to reflect changes in concurrency token from 'Timer' to 'RowVersion'. - Adjusted BreweryDto and BreweryDtoMapper to include 'RowVersion' and updated mapping logic accordingly. - Ensured all repository methods and interfaces are aligned with the new concurrency handling approach. * updates * Add BeerStyle entity and related properties; refactor BreweryDto to remove BeerPosts * Fix Api.Specs test failures: stale Timer column refs and missing test.user fixture * Remove repository tests, usages of registration dto used in repo * archive old stored procs/functions * update stale docs * Add instructions for generating cryptographically secure base64 secrets on macOS/Linux and Windows
1 line
71 KiB
XML
1 line
71 KiB
XML
<?plantuml 1.2026.2?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="CLASS" height="1204px" preserveAspectRatio="none" style="width:4426px;height:1204px;background:#FFFFFF;" version="1.1" viewBox="0 0 4426 1204" width="4426px" zoomAndPan="magnify"><title>Database Schema</title><defs/><g><g class="title" data-source-line="7"><text fill="#000000" font-family="Arial" font-size="22" font-weight="bold" lengthAdjust="spacing" textLength="188.3213" x="2114.3394" y="35.6357">Database Schema</text></g><!--cluster User & Auth--><g class="cluster" data-qualified-name="User . Auth" data-source-line="10" id="ent0002"><rect fill="#FFFFFF" height="608.87" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="1496" x="2212" y="58.2979"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="80.8965" x="2919.5518" y="73.4297">User & Auth</text></g><!--cluster Location--><g class="cluster" data-qualified-name="Location" data-source-line="65" id="ent0009"><rect fill="#FFFFFF" height="560.57" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="336" x="4084" y="98.5479"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="58.3311" x="4222.8345" y="113.6797">Location</text></g><!--cluster Brewery--><g class="cluster" data-qualified-name="Brewery" data-source-line="89" id="ent0013"><rect fill="#FFFFFF" height="346.39" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="1103" x="1077" y="569.6179"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="55.2549" x="1600.8726" y="584.7497">Brewery</text></g><!--cluster Beer (*)--><g class="cluster" data-qualified-name="Beer ..." data-source-line="120" id="ent0017"><rect fill="#FFFFFF" height="633.02" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="711" x="12" y="515.8279"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="49.793" x="342.6035" y="530.9597">Beer (*)</text></g><!--class User--><g class="entity" data-qualified-name="User . Auth.User" data-source-line="11" id="ent0003"><rect fill="#FFFFFF" height="172.7891" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="296.2891" x="2799.86" y="93.2979"/><ellipse cx="2904.1823" cy="107.2979" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M2900.5416,113.7979 L2900.5416,101.6572 L2908.1979,101.6572 L2908.1979,103.7822 L2902.9166,103.7822 L2902.9166,106.4385 L2907.9323,106.4385 L2907.9323,108.5635 L2902.9166,108.5635 L2902.9166,111.6729 L2908.1979,111.6729 L2908.1979,113.7979 L2900.5416,113.7979 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="80.1445" x="2921.6823" y="112.3804">UserAccount</text><line style="stroke:#000000;stroke-width:1;" x1="2800.86" x2="3095.1491" y1="121.2979" y2="121.2979"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2810.86" cy="134.8472" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="272.2891" x="2817.86" y="138.4297">UserAccountID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2800.86" x2="3095.1491" y1="145.3965" y2="145.3965"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2810.86" cy="158.9458" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="239.6201" x="2817.86" y="162.5283">Username: VARCHAR(64) «UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2810.86" cy="175.0444" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="183.5859" x="2817.86" y="178.627">FirstName: NVARCHAR(128)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2810.86" cy="191.1431" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="182.834" x="2817.86" y="194.7256">LastName: NVARCHAR(128)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2810.86" cy="207.2417" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="217.834" x="2817.86" y="210.8242">Email: VARCHAR(128) «UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2810.86" cy="223.3403" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.5928" x="2817.86" y="226.9229">CreatedAt: DATETIME</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="144.7168" x="2817.86" y="243.0215">UpdatedAt: DATETIME</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2810.86" cy="255.5376" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="118.2549" x="2817.86" y="259.1201">DateOfBirth: DATE</text></g><!--class Cred--><g class="entity" data-qualified-name="User . Auth.Cred" data-source-line="23" id="ent0004"><rect fill="#FFFFFF" height="156.6904" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="309.5166" x="2228.24" y="326.0879"/><ellipse cx="2332.5623" cy="340.0879" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M2328.9216,346.5879 L2328.9216,334.4472 L2336.5779,334.4472 L2336.5779,336.5722 L2331.2966,336.5722 L2331.2966,339.2285 L2336.3123,339.2285 L2336.3123,341.3535 L2331.2966,341.3535 L2331.2966,344.4629 L2336.5779,344.4629 L2336.5779,346.5879 L2328.9216,346.5879 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="93.3721" x="2350.0623" y="345.1704">UserCredential</text><line style="stroke:#000000;stroke-width:1;" x1="2229.24" x2="2536.7566" y1="354.0879" y2="354.0879"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2239.24" cy="367.6372" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="285.5166" x="2246.24" y="371.2197">UserCredentialID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2229.24" x2="2536.7566" y1="378.1865" y2="378.1865"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2239.24" cy="391.7358" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="271.5029" x="2246.24" y="395.3183">UserAccountID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2239.24" cy="407.8344" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.5928" x="2246.24" y="411.417">CreatedAt: DATETIME</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2239.24" cy="423.9331" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="117.4551" x="2246.24" y="427.5156">Expiry: DATETIME</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2239.24" cy="440.0317" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="151.71" x="2246.24" y="443.6142">Hash: NVARCHAR(256)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2239.24" cy="456.1303" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="95.7031" x="2246.24" y="459.7129">IsRevoked: BIT</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="147.041" x="2246.24" y="475.8115">RevokedAt: DATETIME</text></g><!--class Verify--><g class="entity" data-qualified-name="User . Auth.Verify" data-source-line="34" id="ent0005"><rect fill="#FFFFFF" height="92.2959" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="357.7305" x="2573.13" y="358.2879"/><ellipse cx="2698.8385" cy="372.2879" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M2695.1979,378.7879 L2695.1979,366.6472 L2702.8541,366.6472 L2702.8541,368.7722 L2697.5729,368.7722 L2697.5729,371.4285 L2702.5885,371.4285 L2702.5885,373.5535 L2697.5729,373.5535 L2697.5729,376.6629 L2702.8541,376.6629 L2702.8541,378.7879 L2695.1979,378.7879 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="98.8135" x="2716.3385" y="377.3704">UserVerification</text><line style="stroke:#000000;stroke-width:1;" x1="2574.13" x2="2929.8605" y1="386.2879" y2="386.2879"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2584.13" cy="399.8372" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="290.958" x="2591.13" y="403.4197">UserVerificationID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2574.13" x2="2929.8605" y1="410.3865" y2="410.3865"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2584.13" cy="423.9358" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="333.7305" x="2591.13" y="427.5183">UserAccountID: UNIQUEIDENTIFIER «FK, UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2584.13" cy="440.0344" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="208.4961" x="2591.13" y="443.617">VerificationDateTime: DATETIME</text></g><!--class Avatar--><g class="entity" data-qualified-name="User . Auth.Avatar" data-source-line="41" id="ent0006"><rect fill="#FFFFFF" height="92.2959" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="357.7305" x="2966.13" y="358.2879"/><ellipse cx="3096.9039" cy="372.2879" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M3093.2633,378.7879 L3093.2633,366.6472 L3100.9196,366.6472 L3100.9196,368.7722 L3095.6383,368.7722 L3095.6383,371.4285 L3100.6539,371.4285 L3100.6539,373.5535 L3095.6383,373.5535 L3095.6383,376.6629 L3100.9196,376.6629 L3100.9196,378.7879 L3093.2633,378.7879 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="88.6826" x="3114.4039" y="377.3704">UserAvatar (*)</text><line style="stroke:#000000;stroke-width:1;" x1="2967.13" x2="3322.8605" y1="386.2879" y2="386.2879"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2977.13" cy="399.8372" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="262.165" x="2984.13" y="403.4197">UserAvatarID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2967.13" x2="3322.8605" y1="410.3865" y2="410.3865"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2977.13" cy="423.9358" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="333.7305" x="2984.13" y="427.5183">UserAccountID: UNIQUEIDENTIFIER «FK, UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2977.13" cy="440.0344" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="227.9443" x="2984.13" y="443.617">PhotoID: UNIQUEIDENTIFIER «FK»</text></g><!--class Follow--><g class="entity" data-qualified-name="User . Auth.Follow" data-source-line="48" id="ent0007"><rect fill="#FFFFFF" height="108.3945" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="295.5029" x="3359.25" y="350.2379"/><ellipse cx="3458.9136" cy="364.2379" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M3455.2729,370.7379 L3455.2729,358.5972 L3462.9292,358.5972 L3462.9292,360.7222 L3457.6479,360.7222 L3457.6479,363.3785 L3462.6636,363.3785 L3462.6636,365.5035 L3457.6479,365.5035 L3457.6479,368.6129 L3462.9292,368.6129 L3462.9292,370.7379 L3455.2729,370.7379 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="88.6758" x="3476.4136" y="369.3204">UserFollow (*)</text><line style="stroke:#000000;stroke-width:1;" x1="3360.25" x2="3653.7529" y1="378.2379" y2="378.2379"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="3370.25" cy="391.7872" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="262.1582" x="3377.25" y="395.3697">UserFollowID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="3360.25" x2="3653.7529" y1="402.3365" y2="402.3365"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="3370.25" cy="415.8858" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="271.5029" x="3377.25" y="419.4683">UserAccountID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="3370.25" cy="431.9844" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="250.4961" x="3377.25" y="435.567">FollowingID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="3370.25" cy="448.0831" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.5928" x="3377.25" y="451.6656">CreatedAt: DATETIME</text></g><!--class Photo--><g class="entity" data-qualified-name="User . Auth.Photo" data-source-line="56" id="ent0008"><rect fill="#FFFFFF" height="108.3945" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="291.6338" x="2613.18" y="542.7779"/><ellipse cx="2727.6229" cy="556.7779" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M2723.9822,563.2779 L2723.9822,551.1372 L2731.6385,551.1372 L2731.6385,553.2622 L2726.3572,553.2622 L2726.3572,555.9185 L2731.3729,555.9185 L2731.3729,558.0435 L2726.3572,558.0435 L2726.3572,561.1529 L2731.6385,561.1529 L2731.6385,563.2779 L2723.9822,563.2779 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="55.248" x="2745.1229" y="561.8604">Photo (*)</text><line style="stroke:#000000;stroke-width:1;" x1="2614.18" x2="2903.8138" y1="570.7779" y2="570.7779"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2624.18" cy="584.3272" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="228.7305" x="2631.18" y="587.9097">PhotoID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2614.18" x2="2903.8138" y1="594.8765" y2="594.8765"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="177.3789" x="2631.18" y="612.0083">Hyperlink: NVARCHAR(256)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2624.18" cy="624.5244" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="267.6338" x="2631.18" y="628.107">UploadedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2624.18" cy="640.6231" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="151.7236" x="2631.18" y="644.2056">UploadedAt: DATETIME</text></g><!--class Country--><g class="entity" data-qualified-name="Location.Country" data-source-line="66" id="ent0010"><rect fill="#FFFFFF" height="92.2959" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="265.165" x="4119.42" y="133.5479"/><ellipse cx="4223.7423" cy="147.5479" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M4220.1016,154.0479 L4220.1016,141.9072 L4227.7579,141.9072 L4227.7579,144.0322 L4222.4766,144.0322 L4222.4766,146.6885 L4227.4923,146.6885 L4227.4923,148.8135 L4222.4766,148.8135 L4222.4766,151.9229 L4227.7579,151.9229 L4227.7579,154.0479 L4220.1016,154.0479 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="49.0205" x="4241.2423" y="152.6304">Country</text><line style="stroke:#000000;stroke-width:1;" x1="4120.42" x2="4383.585" y1="161.5479" y2="161.5479"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4130.42" cy="175.0972" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="241.165" x="4137.42" y="178.6797">CountryID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="4120.42" x2="4383.585" y1="185.6465" y2="185.6465"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4130.42" cy="199.1958" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="205.3926" x="4137.42" y="202.7783">CountryName: NVARCHAR(100)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4130.42" cy="215.2944" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="209.3027" x="4137.42" y="218.877">ISO3166_1: CHAR(2) «UNIQUE»</text></g><!--class StateProvince--><g class="entity" data-qualified-name="Location.StateProvince" data-source-line="73" id="ent0011"><rect fill="#FFFFFF" height="108.3945" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="303.3027" x="4100.35" y="350.2379"/><ellipse cx="4204.6723" cy="364.2379" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M4201.0316,370.7379 L4201.0316,358.5972 L4208.6879,358.5972 L4208.6879,360.7222 L4203.4066,360.7222 L4203.4066,363.3785 L4208.4223,363.3785 L4208.4223,365.5035 L4203.4066,365.5035 L4203.4066,368.6129 L4208.6879,368.6129 L4208.6879,370.7379 L4201.0316,370.7379 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="87.1582" x="4222.1723" y="369.3204">StateProvince</text><line style="stroke:#000000;stroke-width:1;" x1="4101.35" x2="4402.6527" y1="378.2379" y2="378.2379"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4111.35" cy="391.7872" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="279.3027" x="4118.35" y="395.3697">StateProvinceID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="4101.35" x2="4402.6527" y1="402.3365" y2="402.3365"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4111.35" cy="415.8858" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="243.5303" x="4118.35" y="419.4683">StateProvinceName: NVARCHAR(100)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4111.35" cy="431.9844" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="209.3027" x="4118.35" y="435.567">ISO3166_2: CHAR(6) «UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4111.35" cy="448.0831" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="240.3789" x="4118.35" y="451.6656">CountryID: UNIQUEIDENTIFIER «FK»</text></g><!--class City--><g class="entity" data-qualified-name="Location.City" data-source-line="81" id="ent0012"><rect fill="#FFFFFF" height="92.2959" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="302.5166" x="4099.74" y="550.8279"/><ellipse cx="4235.1931" cy="564.8279" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M4231.5525,571.3279 L4231.5525,559.1872 L4239.2088,559.1872 L4239.2088,561.3122 L4233.9275,561.3122 L4233.9275,563.9685 L4238.9431,563.9685 L4238.9431,566.0935 L4233.9275,566.0935 L4233.9275,569.2029 L4239.2088,569.2029 L4239.2088,571.3279 L4231.5525,571.3279 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="24.1104" x="4252.6931" y="569.9104">City</text><line style="stroke:#000000;stroke-width:1;" x1="4100.74" x2="4401.2566" y1="578.8279" y2="578.8279"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4110.74" cy="592.3772" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="216.2549" x="4117.74" y="595.9597">CityID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="4100.74" x2="4401.2566" y1="602.9265" y2="602.9265"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4110.74" cy="616.4758" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="180.4824" x="4117.74" y="620.0583">CityName: NVARCHAR(100)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4110.74" cy="632.5744" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="278.5166" x="4117.74" y="636.157">StateProvinceID: UNIQUEIDENTIFIER «FK»</text></g><!--class Brewery--><g class="entity" data-qualified-name="Brewery.Brewery" data-source-line="90" id="ent0014"><rect fill="#FFFFFF" height="140.5918" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="295.5029" x="1101.25" y="743.3679"/><ellipse cx="1205.5723" cy="757.3679" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M1201.9316,763.8679 L1201.9316,751.7272 L1209.5879,751.7272 L1209.5879,753.8522 L1204.3066,753.8522 L1204.3066,756.5085 L1209.3223,756.5085 L1209.3223,758.6335 L1204.3066,758.6335 L1204.3066,761.7429 L1209.5879,761.7429 L1209.5879,763.8679 L1201.9316,763.8679 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="79.3584" x="1223.0723" y="762.4504">BreweryPost</text><line style="stroke:#000000;stroke-width:1;" x1="1102.25" x2="1395.7529" y1="771.3679" y2="771.3679"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1112.25" cy="784.9172" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="271.5029" x="1119.25" y="788.4997">BreweryPostID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="1102.25" x2="1395.7529" y1="795.4665" y2="795.4665"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1112.25" cy="809.0158" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="207.7168" x="1119.25" y="812.5983">BreweryName: NVARCHAR(256)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1112.25" cy="825.1144" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="251.2822" x="1119.25" y="828.697">PostedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1112.25" cy="841.2131" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="189.0547" x="1119.25" y="844.7956">Description: NVARCHAR(512)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1112.25" cy="857.3117" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.5928" x="1119.25" y="860.8942">CreatedAt: DATETIME</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="144.7168" x="1119.25" y="876.9929">UpdatedAt: DATETIME</text></g><!--class BreweryLoc--><g class="entity" data-qualified-name="Brewery.BreweryLoc" data-source-line="100" id="ent0015"><rect fill="#FFFFFF" height="156.6904" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="356.9443" x="1799.53" y="735.3179"/><ellipse cx="1908.1076" cy="749.3179" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M1904.467,755.8179 L1904.467,743.6772 L1912.1233,743.6772 L1912.1233,745.8022 L1906.842,745.8022 L1906.842,748.4585 L1911.8576,748.4585 L1911.8576,750.5835 L1906.842,750.5835 L1906.842,753.6929 L1912.1233,753.6929 L1912.1233,755.8179 L1904.467,755.8179 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="132.2891" x="1925.6076" y="754.4004">BreweryPostLocation</text><line style="stroke:#000000;stroke-width:1;" x1="1800.53" x2="2155.4743" y1="763.3179" y2="763.3179"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1810.53" cy="776.8672" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="324.4336" x="1817.53" y="780.4497">BreweryPostLocationID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="1800.53" x2="2155.4743" y1="787.4165" y2="787.4165"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1810.53" cy="800.9658" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="332.9443" x="1817.53" y="804.5483">BreweryPostID: UNIQUEIDENTIFIER «FK, UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1810.53" cy="817.0644" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="204.6406" x="1817.53" y="820.647">AddressLine1: NVARCHAR(256)</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="204.6406" x="1817.53" y="836.7456">AddressLine2: NVARCHAR(256)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1810.53" cy="849.2617" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="183.6201" x="1817.53" y="852.8442">PostalCode: NVARCHAR(20)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1810.53" cy="865.3603" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="215.4688" x="1817.53" y="868.9429">CityID: UNIQUEIDENTIFIER «FK»</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="173.5098" x="1817.53" y="885.0415">Coordinates: GEOGRAPHY</text></g><!--class BreweryPhoto--><g class="entity" data-qualified-name="Brewery.BreweryPhoto" data-source-line="111" id="ent0016"><rect fill="#FFFFFF" height="108.3945" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="332.0889" x="1431.96" y="759.4679"/><ellipse cx="1526.9512" cy="773.4679" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M1523.3106,779.9679 L1523.3106,767.8272 L1530.9668,767.8272 L1530.9668,769.9522 L1525.6856,769.9522 L1525.6856,772.6085 L1530.7012,772.6085 L1530.7012,774.7335 L1525.6856,774.7335 L1525.6856,777.8429 L1530.9668,777.8429 L1530.9668,779.9679 L1523.3106,779.9679 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="134.6064" x="1544.4512" y="778.5504">BreweryPostPhoto (*)</text><line style="stroke:#000000;stroke-width:1;" x1="1432.96" x2="1763.0489" y1="787.4679" y2="787.4679"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1442.96" cy="801.0172" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="308.0889" x="1449.96" y="804.5997">BreweryPostPhotoID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="1432.96" x2="1763.0489" y1="811.5665" y2="811.5665"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1442.96" cy="825.1158" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="270.7168" x="1449.96" y="828.6983">BreweryPostID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1442.96" cy="841.2144" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="227.9443" x="1449.96" y="844.797">PhotoID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1442.96" cy="857.3131" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="133.041" x="1449.96" y="860.8956">LinkedAt: DATETIME</text></g><!--class BeerStyle--><g class="entity" data-qualified-name="Beer ....BeerStyle" data-source-line="121" id="ent0018"><rect fill="#FFFFFF" height="92.2959" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="285.4063" x="347.3" y="550.8279"/><ellipse cx="446.5739" cy="564.8279" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M442.9333,571.3279 L442.9333,559.1872 L450.5896,559.1872 L450.5896,561.3122 L445.3083,561.3122 L445.3083,563.9685 L450.3239,563.9685 L450.3239,566.0935 L445.3083,566.0935 L445.3083,569.2029 L450.5896,569.2029 L450.5896,571.3279 L442.9333,571.3279 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="79.3584" x="464.0739" y="569.9104">BeerStyle (*)</text><line style="stroke:#000000;stroke-width:1;" x1="348.3" x2="631.7063" y1="578.8279" y2="578.8279"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="358.3" cy="592.3772" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="252.8408" x="365.3" y="595.9597">BeerStyleID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="348.3" x2="631.7063" y1="602.9265" y2="602.9265"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="358.3" cy="616.4758" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="261.4063" x="365.3" y="620.0583">StyleName: NVARCHAR(100) «UNIQUE»</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="196.0342" x="365.3" y="636.157">Description: NVARCHAR(MAX)</text></g><!--class Beer--><g class="entity" data-qualified-name="Beer ....Beer" data-source-line="128" id="ent0019"><rect fill="#FFFFFF" height="204.9863" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="279.165" x="350.42" y="711.1679"/><ellipse cx="448.1285" cy="725.1679" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M444.4879,731.6679 L444.4879,719.5272 L452.1441,719.5272 L452.1441,721.6522 L446.8629,721.6522 L446.8629,724.3085 L451.8785,724.3085 L451.8785,726.4335 L446.8629,726.4335 L446.8629,729.5429 L452.1441,729.5429 L452.1441,731.6679 L444.4879,731.6679 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="76.248" x="465.6285" y="730.2504">BeerPost (*)</text><line style="stroke:#000000;stroke-width:1;" x1="351.42" x2="628.585" y1="739.1679" y2="739.1679"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="361.42" cy="752.7172" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="249.7305" x="368.42" y="756.2997">BeerPostID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="351.42" x2="628.585" y1="763.2665" y2="763.2665"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="361.42" cy="776.8158" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="156.3721" x="368.42" y="780.3983">Name: NVARCHAR(100)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="361.42" cy="792.9144" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="196.0342" x="368.42" y="796.497">Description: NVARCHAR(MAX)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="361.42" cy="809.0131" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="126.8135" x="368.42" y="812.5956">ABV: DECIMAL(4,2)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="361.42" cy="825.1117" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="53.6689" x="368.42" y="828.6942">IBU: INT</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="361.42" cy="841.2103" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="251.2822" x="368.42" y="844.7929">PostedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="361.42" cy="857.309" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="252.0547" x="368.42" y="860.8915">BeerStyleID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="361.42" cy="873.4076" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="255.165" x="368.42" y="876.9901">BrewedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="361.42" cy="889.5062" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.5928" x="368.42" y="893.0887">CreatedAt: DATETIME</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="144.7168" x="368.42" y="909.1874">UpdatedAt: DATETIME</text></g><!--class BeerPhoto--><g class="entity" data-qualified-name="Beer ....BeerPhoto" data-source-line="142" id="ent0020"><rect fill="#FFFFFF" height="108.3945" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="310.3164" x="396.84" y="1000.3079"/><ellipse cx="491.8312" cy="1014.3079" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M488.1906,1020.8079 L488.1906,1008.6672 L495.8468,1008.6672 L495.8468,1010.7922 L490.5656,1010.7922 L490.5656,1013.4485 L495.5812,1013.4485 L495.5812,1015.5735 L490.5656,1015.5735 L490.5656,1018.6829 L495.8468,1018.6829 L495.8468,1020.8079 L488.1906,1020.8079 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="112.834" x="509.3312" y="1019.3904">BeerPostPhoto (*)</text><line style="stroke:#000000;stroke-width:1;" x1="397.84" x2="706.1564" y1="1028.3079" y2="1028.3079"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="407.84" cy="1041.8572" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="286.3164" x="414.84" y="1045.4397">BeerPostPhotoID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="397.84" x2="706.1564" y1="1052.4065" y2="1052.4065"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="407.84" cy="1065.9558" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="248.9443" x="414.84" y="1069.5383">BeerPostID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="407.84" cy="1082.0544" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="227.9443" x="414.84" y="1085.637">PhotoID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="407.84" cy="1098.1531" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="133.041" x="414.84" y="1101.7356">LinkedAt: DATETIME</text></g><!--class BeerComment--><g class="entity" data-qualified-name="Beer ....BeerComment" data-source-line="150" id="ent0021"><rect fill="#FFFFFF" height="156.6904" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="334.4131" x="27.79" y="976.1579"/><ellipse cx="122.7812" cy="990.1579" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M119.1406,996.6579 L119.1406,984.5172 L126.7968,984.5172 L126.7968,986.6422 L121.5156,986.6422 L121.5156,989.2985 L126.5312,989.2985 L126.5312,991.4235 L121.5156,991.4235 L121.5156,994.5329 L126.7968,994.5329 L126.7968,996.6579 L119.1406,996.6579 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="136.9307" x="140.2812" y="995.2404">BeerPostComment (*)</text><line style="stroke:#000000;stroke-width:1;" x1="28.79" x2="361.2031" y1="1004.1579" y2="1004.1579"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.79" cy="1017.7072" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="310.4131" x="45.79" y="1021.2897">BeerPostCommentID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="28.79" x2="361.2031" y1="1028.2565" y2="1028.2565"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.79" cy="1041.8058" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="179.71" x="45.79" y="1045.3883">Comment: NVARCHAR(250)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.79" cy="1057.9044" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="248.9443" x="45.79" y="1061.487">BeerPostID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.79" cy="1074.0031" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="283.9512" x="45.79" y="1077.5856">CommentedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.79" cy="1090.1017" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="70.7998" x="45.79" y="1093.6842">Rating: INT</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.79" cy="1106.2003" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.5928" x="45.79" y="1109.7829">CreatedAt: DATETIME</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="144.7168" x="45.79" y="1125.8815">UpdatedAt: DATETIME</text></g><g class="entity" data-qualified-name="GMN43" data-source-line="192" id="ent0044"><path d="M3727.1,362.0579 L3727.1,446.8015 L4064.9052,446.8015 L4064.9052,372.0579 L4054.9052,362.0579 L3727.1,362.0579" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M4054.9052,362.0579 L4054.9052,372.0579 L4064.9052,372.0579 L4054.9052,362.0579" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="316.8052" x="3733.1" y="379.2517">Backed by Features.Auth/Features.UserManagement's</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="213.8779" x="3733.1" y="394.2004">Dapper repositories (AuthRepository,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="280.3379" x="3733.1" y="409.1492">UserAccountRepository) - registration, credential</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="260.146" x="3733.1" y="424.0979">rotation, and verification each issue their own</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="190.0552" x="3733.1" y="439.0466">inline SQL, no stored procedures</text></g><g class="entity" data-qualified-name="GMN46" data-source-line="200" id="ent0047"><path d="M739.03,778.7679 L739.03,848.5628 L1052.9616,848.5628 L1052.9616,788.7679 L1042.9616,778.7679 L739.03,778.7679" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1042.9616,778.7679 L1042.9616,788.7679 L1052.9616,788.7679 L1042.9616,778.7679" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="292.9316" x="745.03" y="795.9617">Backed by Features.Breweries' BreweryRepository</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="263.0469" x="745.03" y="810.9104">(Dapper); create/update/delete run inline SQL</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="274.5615" x="745.03" y="825.8592">inside a transaction, with optimistic concurrency</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="90.3145" x="745.03" y="840.8079">via RowVersion</text></g><!--link User to Cred--><g class="link" data-entity-1="ent0003" data-entity-2="ent0004" data-link-type="crowfoot" data-source-line="163" id="lnk22"><path codeLine="163" d="M2843.53,274.1779 C2843.53,311.0979 2843.53,337.8479 2843.53,337.8479 C2843.53,337.8479 2689.69,337.8479 2555.95,337.8479" fill="none" id="User-Cred" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2839.53" x2="2847.53" y1="270.1779" y2="270.1779"/><line style="stroke:#000000;stroke-width:1;" x1="2839.53" x2="2847.53" y1="273.1779" y2="273.1779"/><line style="stroke:#000000;stroke-width:1;" x1="2843.53" x2="2843.53" y1="274.1779" y2="266.1779"/><line style="stroke:#000000;stroke-width:1;" x1="2545.95" x2="2537.95" y1="337.8479" y2="343.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2545.95" x2="2537.95" y1="337.8479" y2="331.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2545.95" x2="2537.95" y1="337.8479" y2="337.8479"/><ellipse cx="2551.95" cy="337.8479" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.96" x="2705.57" y="335.0417">has</text></g><!--link User to Verify--><g class="link" data-entity-1="ent0003" data-entity-2="ent0005" data-link-type="association" data-source-line="164" id="lnk23"><path codeLine="164" d="M2887.2,274.5779 C2887.2,305.7079 2887.2,316.5879 2887.2,342.9679" fill="none" id="User-Verify" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2883.2" x2="2891.2" y1="270.5779" y2="270.5779"/><line style="stroke:#000000;stroke-width:1;" x1="2883.2" x2="2891.2" y1="273.5779" y2="273.5779"/><line style="stroke:#000000;stroke-width:1;" x1="2887.2" x2="2887.2" y1="274.5779" y2="266.5779"/><line style="stroke:#000000;stroke-width:1;" x1="2887.2" x2="2887.2" y1="346.9679" y2="357.9679"/><ellipse cx="2887.2" cy="346.9679" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2891.2" x2="2883.2" y1="353.9679" y2="353.9679"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.96" x="2866.2" y="309.4717">has</text></g><!--link User to Avatar--><g class="link" data-entity-1="ent0003" data-entity-2="ent0006" data-link-type="association" data-source-line="165" id="lnk24"><path codeLine="165" d="M2998.64,274.5779 C2998.64,305.7079 2998.64,316.5879 2998.64,342.9679" fill="none" id="User-Avatar" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2994.64" x2="3002.64" y1="270.5779" y2="270.5779"/><line style="stroke:#000000;stroke-width:1;" x1="2994.64" x2="3002.64" y1="273.5779" y2="273.5779"/><line style="stroke:#000000;stroke-width:1;" x1="2998.64" x2="2998.64" y1="274.5779" y2="266.5779"/><line style="stroke:#000000;stroke-width:1;" x1="2998.64" x2="2998.64" y1="346.9679" y2="357.9679"/><ellipse cx="2998.64" cy="346.9679" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="3002.64" x2="2994.64" y1="353.9679" y2="353.9679"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.96" x="2977.64" y="309.4717">has</text></g><!--link Avatar to Photo--><g class="link" data-entity-1="ent0006" data-entity-2="ent0008" data-link-type="crowfoot" data-source-line="166" id="lnk25"><path codeLine="166" d="M3145,468.9979 C3145,510.8679 3145,547.8479 3145,547.8479 C3145,547.8479 3022.46,547.8479 2913.21,547.8479" fill="none" id="Avatar-Photo" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="3145" x2="3139" y1="458.9979" y2="450.9979"/><line style="stroke:#000000;stroke-width:1;" x1="3145" x2="3151" y1="458.9979" y2="450.9979"/><line style="stroke:#000000;stroke-width:1;" x1="3145" x2="3145" y1="458.9979" y2="450.9979"/><ellipse cx="3145" cy="464.9979" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2909.21" x2="2909.21" y1="551.8479" y2="543.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2912.21" x2="2912.21" y1="551.8479" y2="543.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2913.21" x2="2905.21" y1="547.8479" y2="547.8479"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="47.6836" x="3025.53" y="545.0417">refers to</text></g><!--link User to Follow--><g class="link" data-entity-1="ent0003" data-entity-2="ent0007" data-link-type="crowfoot" data-source-line="167" id="lnk26"><path codeLine="167" d="M3063.64,274.5279 C3063.64,317.7279 3063.64,352.8479 3063.64,352.8479 C3063.64,352.8479 3211.86,352.8479 3340.75,352.8479" fill="none" id="User-Follow" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="3059.64" x2="3067.64" y1="270.5279" y2="270.5279"/><line style="stroke:#000000;stroke-width:1;" x1="3059.64" x2="3067.64" y1="273.5279" y2="273.5279"/><line style="stroke:#000000;stroke-width:1;" x1="3063.64" x2="3063.64" y1="274.5279" y2="266.5279"/><line style="stroke:#000000;stroke-width:1;" x1="3350.75" x2="3358.75" y1="352.8479" y2="346.8479"/><line style="stroke:#000000;stroke-width:1;" x1="3350.75" x2="3358.75" y1="352.8479" y2="358.8479"/><line style="stroke:#000000;stroke-width:1;" x1="3350.75" x2="3358.75" y1="352.8479" y2="352.8479"/><ellipse cx="3344.75" cy="352.8479" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="139.4263" x="3028.03" y="350.0417">follows (UserAccountID)</text></g><!--link User to Follow--><g class="link" data-entity-1="ent0003" data-entity-2="ent0007" data-link-type="crowfoot" data-source-line="168" id="lnk27"><path codeLine="168" d="M3031.14,274.4779 C3031.14,318.9479 3031.14,355.8479 3031.14,355.8479 C3031.14,355.8479 3201.35,355.8479 3341.04,355.8479" fill="none" id="User-Follow-1" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="3027.14" x2="3035.14" y1="270.4779" y2="270.4779"/><line style="stroke:#000000;stroke-width:1;" x1="3027.14" x2="3035.14" y1="273.4779" y2="273.4779"/><line style="stroke:#000000;stroke-width:1;" x1="3031.14" x2="3031.14" y1="274.4779" y2="266.4779"/><line style="stroke:#000000;stroke-width:1;" x1="3351.04" x2="3359.04" y1="355.8479" y2="349.8479"/><line style="stroke:#000000;stroke-width:1;" x1="3351.04" x2="3359.04" y1="355.8479" y2="361.8479"/><line style="stroke:#000000;stroke-width:1;" x1="3351.04" x2="3359.04" y1="355.8479" y2="355.8479"/><ellipse cx="3345.04" cy="355.8479" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="145.2217" x="3151.41" y="353.0417">followed by (FollowingID)</text></g><!--link User to Photo--><g class="link" data-entity-1="ent0003" data-entity-2="ent0008" data-link-type="crowfoot" data-source-line="169" id="lnk28"><path codeLine="169" d="M2939.68,274.4679 C2939.68,382.7479 2939.68,545.8479 2939.68,545.8479 C2939.68,545.8479 2943.59,545.8479 2923.27,545.8479" fill="none" id="User-Photo" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2935.68" x2="2943.68" y1="270.4679" y2="270.4679"/><line style="stroke:#000000;stroke-width:1;" x1="2935.68" x2="2943.68" y1="273.4679" y2="273.4679"/><line style="stroke:#000000;stroke-width:1;" x1="2939.68" x2="2939.68" y1="274.4679" y2="266.4679"/><line style="stroke:#000000;stroke-width:1;" x1="2913.27" x2="2905.27" y1="545.8479" y2="551.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2913.27" x2="2905.27" y1="545.8479" y2="539.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2913.27" x2="2905.27" y1="545.8479" y2="545.8479"/><ellipse cx="2919.27" cy="545.8479" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="53.498" x="2913.18" y="436.5517">uploaded</text></g><!--link Country to StateProvince--><g class="link" data-entity-1="ent0010" data-entity-2="ent0011" data-link-type="crowfoot" data-source-line="172" id="lnk29"><path codeLine="172" d="M4252,234.2579 C4252,270.2579 4252,294.1679 4252,332.0079" fill="none" id="Country-StateProvince" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="4248" x2="4256" y1="230.2579" y2="230.2579"/><line style="stroke:#000000;stroke-width:1;" x1="4248" x2="4256" y1="233.2579" y2="233.2579"/><line style="stroke:#000000;stroke-width:1;" x1="4252" x2="4252" y1="234.2579" y2="226.2579"/><line style="stroke:#000000;stroke-width:1;" x1="4252" x2="4258" y1="342.0079" y2="350.0079"/><line style="stroke:#000000;stroke-width:1;" x1="4252" x2="4246" y1="342.0079" y2="350.0079"/><line style="stroke:#000000;stroke-width:1;" x1="4252" x2="4252" y1="342.0079" y2="350.0079"/><ellipse cx="4252" cy="336.0079" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.96" x="4231" y="285.3317">has</text></g><!--link StateProvince to City--><g class="link" data-entity-1="ent0011" data-entity-2="ent0012" data-link-type="crowfoot" data-source-line="173" id="lnk30"><path codeLine="173" d="M4251.3,467.0879 C4251.3,495.8879 4251.3,504.8279 4251.3,532.3379" fill="none" id="StateProvince-City" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="4247.3" x2="4255.3" y1="463.0879" y2="463.0879"/><line style="stroke:#000000;stroke-width:1;" x1="4247.3" x2="4255.3" y1="466.0879" y2="466.0879"/><line style="stroke:#000000;stroke-width:1;" x1="4251.3" x2="4251.3" y1="467.0879" y2="459.0879"/><line style="stroke:#000000;stroke-width:1;" x1="4251.3" x2="4257.3" y1="542.3379" y2="550.3379"/><line style="stroke:#000000;stroke-width:1;" x1="4251.3" x2="4245.3" y1="542.3379" y2="550.3379"/><line style="stroke:#000000;stroke-width:1;" x1="4251.3" x2="4251.3" y1="542.3379" y2="550.3379"/><ellipse cx="4251.3" cy="536.3379" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.96" x="4230.3" y="501.9117">has</text></g><!--link User to Brewery--><g class="link" data-entity-1="ent0003" data-entity-2="ent0013" data-link-type="crowfoot" data-source-line="176" id="lnk31"><path codeLine="176" d="M2791.38,179.8479 C2440.57,179.8479 1598.33,179.8479 1598.33,179.8479 C1598.33,179.8479 1598.33,279.2979 1598.33,381.0791 C1598.33,431.9697 1598.33,483.4432 1598.33,523.3596 C1598.33,533.3387 1598.33,542.5955 1598.33,550.9402 C1598.33,555.1126 1598.33,559.057 1598.33,562.7497 C1598.33,564.5961 1598.33,566.3795 1598.33,568.097 C1598.33,568.5264 1598.33,550.9516 1598.33,551.3727" fill="none" id="User-Brewery" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2795.38" x2="2795.38" y1="175.8479" y2="183.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2792.38" x2="2792.38" y1="175.8479" y2="183.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2791.38" x2="2799.38" y1="179.8479" y2="179.8479"/><line style="stroke:#000000;stroke-width:1;" x1="1598.33" x2="1604.33" y1="561.3727" y2="569.3727"/><line style="stroke:#000000;stroke-width:1;" x1="1598.33" x2="1592.33" y1="561.3727" y2="569.3727"/><line style="stroke:#000000;stroke-width:1;" x1="1598.33" x2="1598.33" y1="561.3727" y2="569.3727"/><ellipse cx="1598.33" cy="555.3727" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="39.0317" x="1950.63" y="177.0417">posted</text></g><!--link Brewery to BreweryLoc--><g class="link" data-entity-1="ent0013" data-entity-2="ent0015" data-link-type="association" data-source-line="177" id="lnk32"><path codeLine="177" d="M1606.62,596.8479 C1623.6,596.8479 1978,596.8479 1978,596.8479 C1978,596.8479 1978,658.0379 1978,720.0779" fill="none" id="Brewery-BreweryLoc" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1602.62" x2="1602.62" y1="600.8479" y2="592.8479"/><line style="stroke:#000000;stroke-width:1;" x1="1605.62" x2="1605.62" y1="600.8479" y2="592.8479"/><line style="stroke:#000000;stroke-width:1;" x1="1606.62" x2="1598.62" y1="596.8479" y2="596.8479"/><line style="stroke:#000000;stroke-width:1;" x1="1978" x2="1978" y1="724.0779" y2="735.0779"/><ellipse cx="1978" cy="724.0779" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1982" x2="1974" y1="731.0779" y2="731.0779"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.96" x="1836.43" y="594.0417">has</text></g><!--link City to BreweryLoc--><g class="link" data-entity-1="ent0012" data-entity-2="ent0015" data-link-type="crowfoot" data-source-line="178" id="lnk33"><path codeLine="178" d="M4251,651.4979 C4251,715.2279 4251,813.8479 4251,813.8479 C4251,813.8479 2711.12,813.8479 2174.83,813.8479" fill="none" id="City-BreweryLoc" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="4247" x2="4255" y1="647.4979" y2="647.4979"/><line style="stroke:#000000;stroke-width:1;" x1="4247" x2="4255" y1="650.4979" y2="650.4979"/><line style="stroke:#000000;stroke-width:1;" x1="4251" x2="4251" y1="651.4979" y2="643.4979"/><line style="stroke:#000000;stroke-width:1;" x1="2164.83" x2="2156.83" y1="813.8479" y2="819.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2164.83" x2="2156.83" y1="813.8479" y2="807.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2164.83" x2="2156.83" y1="813.8479" y2="813.8479"/><ellipse cx="2170.83" cy="813.8479" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="55.6499" x="3233.09" y="811.0417">located in</text></g><!--link Brewery to BreweryPhoto--><g class="link" data-entity-1="ent0013" data-entity-2="ent0016" data-link-type="crowfoot" data-source-line="179" id="lnk34"><path codeLine="179" d="M1598,605.5979 C1598,614.0079 1598,680.0079 1598,741.2079" fill="none" id="Brewery-BreweryPhoto" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1594" x2="1602" y1="601.5979" y2="601.5979"/><line style="stroke:#000000;stroke-width:1;" x1="1594" x2="1602" y1="604.5979" y2="604.5979"/><line style="stroke:#000000;stroke-width:1;" x1="1598" x2="1598" y1="605.5979" y2="597.5979"/><line style="stroke:#000000;stroke-width:1;" x1="1598" x2="1604" y1="751.2079" y2="759.2079"/><line style="stroke:#000000;stroke-width:1;" x1="1598" x2="1592" y1="751.2079" y2="759.2079"/><line style="stroke:#000000;stroke-width:1;" x1="1598" x2="1598" y1="751.2079" y2="759.2079"/><ellipse cx="1598" cy="745.2079" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.96" x="1577" y="675.6017">has</text></g><!--link Photo to BreweryPhoto--><g class="link" data-entity-1="ent0008" data-entity-2="ent0016" data-link-type="crowfoot" data-source-line="180" id="lnk35"><path codeLine="180" d="M2604.85,648.8479 C2310.37,648.8479 1681.52,648.8479 1681.52,648.8479 C1681.52,648.8479 1681.52,693.2379 1681.52,741.2379" fill="none" id="Photo-BreweryPhoto" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2608.85" x2="2608.85" y1="644.8479" y2="652.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2605.85" x2="2605.85" y1="644.8479" y2="652.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2604.85" x2="2612.85" y1="648.8479" y2="648.8479"/><line style="stroke:#000000;stroke-width:1;" x1="1681.52" x2="1687.52" y1="751.2379" y2="759.2379"/><line style="stroke:#000000;stroke-width:1;" x1="1681.52" x2="1675.52" y1="751.2379" y2="759.2379"/><line style="stroke:#000000;stroke-width:1;" x1="1681.52" x2="1681.52" y1="751.2379" y2="759.2379"/><ellipse cx="1681.52" cy="745.2379" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="48.4199" x="2042.99" y="646.0417">linked to</text></g><!--link User to Beer--><g class="link" data-entity-1="ent0003" data-entity-2="ent0019" data-link-type="crowfoot" data-source-line="183" id="lnk36"><path codeLine="183" d="M2948.5,274.3879 C2948.5,428.6779 2948.5,726.8479 2948.5,726.8479 C2948.5,726.8479 1168.33,726.8479 647.67,726.8479" fill="none" id="User-Beer" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2944.5" x2="2952.5" y1="270.3879" y2="270.3879"/><line style="stroke:#000000;stroke-width:1;" x1="2944.5" x2="2952.5" y1="273.3879" y2="273.3879"/><line style="stroke:#000000;stroke-width:1;" x1="2948.5" x2="2948.5" y1="274.3879" y2="266.3879"/><line style="stroke:#000000;stroke-width:1;" x1="637.67" x2="629.67" y1="726.8479" y2="732.8479"/><line style="stroke:#000000;stroke-width:1;" x1="637.67" x2="629.67" y1="726.8479" y2="720.8479"/><line style="stroke:#000000;stroke-width:1;" x1="637.67" x2="629.67" y1="726.8479" y2="726.8479"/><ellipse cx="643.67" cy="726.8479" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="39.0317" x="1979.31" y="724.0417">posted</text></g><!--link BeerStyle to Beer--><g class="link" data-entity-1="ent0018" data-entity-2="ent0019" data-link-type="crowfoot" data-source-line="184" id="lnk37"><path codeLine="184" d="M490,651.4579 C490,671.2279 490,669.1379 490,692.7079" fill="none" id="BeerStyle-Beer" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="486" x2="494" y1="647.4579" y2="647.4579"/><line style="stroke:#000000;stroke-width:1;" x1="486" x2="494" y1="650.4579" y2="650.4579"/><line style="stroke:#000000;stroke-width:1;" x1="490" x2="490" y1="651.4579" y2="643.4579"/><line style="stroke:#000000;stroke-width:1;" x1="490" x2="496" y1="702.7079" y2="710.7079"/><line style="stroke:#000000;stroke-width:1;" x1="490" x2="484" y1="702.7079" y2="710.7079"/><line style="stroke:#000000;stroke-width:1;" x1="490" x2="490" y1="702.7079" y2="710.7079"/><ellipse cx="490" cy="696.7079" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="66.479" x="423" y="674.2717">categorizes</text></g><!--link Brewery to Beer--><g class="link" data-entity-1="ent0013" data-entity-2="ent0019" data-link-type="crowfoot" data-source-line="185" id="lnk38"><path codeLine="185" d="M1066.4134,718.8479 C1054.2181,718.8479 1045.4,718.8479 1033.1289,718.8479 C984.0446,718.8479 934.5807,718.8479 886.5486,718.8479 C790.4844,718.8479 718.1475,718.8479 648.03,718.8479" fill="none" id="Brewery-Beer" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1070.4134" x2="1070.4134" y1="714.8479" y2="722.8479"/><line style="stroke:#000000;stroke-width:1;" x1="1067.4134" x2="1067.4134" y1="714.8479" y2="722.8479"/><line style="stroke:#000000;stroke-width:1;" x1="1066.4134" x2="1074.4134" y1="718.8479" y2="718.8479"/><line style="stroke:#000000;stroke-width:1;" x1="638.03" x2="630.03" y1="718.8479" y2="724.8479"/><line style="stroke:#000000;stroke-width:1;" x1="638.03" x2="630.03" y1="718.8479" y2="712.8479"/><line style="stroke:#000000;stroke-width:1;" x1="638.03" x2="630.03" y1="718.8479" y2="718.8479"/><ellipse cx="644.03" cy="718.8479" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="42.6372" x="1154.63" y="716.0417">brewed</text></g><!--link Beer to BeerPhoto--><g class="link" data-entity-1="ent0019" data-entity-2="ent0020" data-link-type="crowfoot" data-source-line="186" id="lnk39"><path codeLine="186" d="M513.21,924.4979 C513.21,953.1379 513.21,957.1279 513.21,981.8179" fill="none" id="Beer-BeerPhoto" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="509.21" x2="517.21" y1="920.4979" y2="920.4979"/><line style="stroke:#000000;stroke-width:1;" x1="509.21" x2="517.21" y1="923.4979" y2="923.4979"/><line style="stroke:#000000;stroke-width:1;" x1="513.21" x2="513.21" y1="924.4979" y2="916.4979"/><line style="stroke:#000000;stroke-width:1;" x1="513.21" x2="519.21" y1="991.8179" y2="999.8179"/><line style="stroke:#000000;stroke-width:1;" x1="513.21" x2="507.21" y1="991.8179" y2="999.8179"/><line style="stroke:#000000;stroke-width:1;" x1="513.21" x2="513.21" y1="991.8179" y2="999.8179"/><ellipse cx="513.21" cy="985.8179" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.96" x="492.21" y="955.3517">has</text></g><!--link Photo to BeerPhoto--><g class="link" data-entity-1="ent0008" data-entity-2="ent0020" data-link-type="crowfoot" data-source-line="187" id="lnk40"><path codeLine="187" d="M2604.93,645.8479 C2130.29,645.8479 669.93,645.8479 669.93,645.8479 C669.93,645.8479 669.93,870.4579 669.93,981.8179" fill="none" id="Photo-BeerPhoto" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2608.93" x2="2608.93" y1="641.8479" y2="649.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2605.93" x2="2605.93" y1="641.8479" y2="649.8479"/><line style="stroke:#000000;stroke-width:1;" x1="2604.93" x2="2612.93" y1="645.8479" y2="645.8479"/><line style="stroke:#000000;stroke-width:1;" x1="669.93" x2="675.93" y1="991.8179" y2="999.8179"/><line style="stroke:#000000;stroke-width:1;" x1="669.93" x2="663.93" y1="991.8179" y2="999.8179"/><line style="stroke:#000000;stroke-width:1;" x1="669.93" x2="669.93" y1="991.8179" y2="999.8179"/><ellipse cx="669.93" cy="985.8179" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="48.4199" x="1415.45" y="643.0417">linked to</text></g><!--link Beer to BeerComment--><g class="link" data-entity-1="ent0019" data-entity-2="ent0021" data-link-type="crowfoot" data-source-line="188" id="lnk41"><path codeLine="188" d="M356.31,924.4979 C356.31,944.3179 356.31,938.7779 356.31,957.6879" fill="none" id="Beer-BeerComment" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="352.31" x2="360.31" y1="920.4979" y2="920.4979"/><line style="stroke:#000000;stroke-width:1;" x1="352.31" x2="360.31" y1="923.4979" y2="923.4979"/><line style="stroke:#000000;stroke-width:1;" x1="356.31" x2="356.31" y1="924.4979" y2="916.4979"/><line style="stroke:#000000;stroke-width:1;" x1="356.31" x2="362.31" y1="967.6879" y2="975.6879"/><line style="stroke:#000000;stroke-width:1;" x1="356.31" x2="350.31" y1="967.6879" y2="975.6879"/><line style="stroke:#000000;stroke-width:1;" x1="356.31" x2="356.31" y1="967.6879" y2="975.6879"/><ellipse cx="356.31" cy="961.6879" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.96" x="335.31" y="943.2917">has</text></g><!--link User to BeerComment--><g class="link" data-entity-1="ent0003" data-entity-2="ent0021" data-link-type="crowfoot" data-source-line="189" id="lnk42"><path codeLine="189" d="M2957.32,274.5579 C2957.32,483.2879 2957.32,987.8479 2957.32,987.8479 C2957.32,987.8479 979.08,987.8479 380.6,987.8479" fill="none" id="User-BeerComment" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2953.32" x2="2961.32" y1="270.5579" y2="270.5579"/><line style="stroke:#000000;stroke-width:1;" x1="2953.32" x2="2961.32" y1="273.5579" y2="273.5579"/><line style="stroke:#000000;stroke-width:1;" x1="2957.32" x2="2957.32" y1="274.5579" y2="266.5579"/><line style="stroke:#000000;stroke-width:1;" x1="370.6" x2="362.6" y1="987.8479" y2="993.8479"/><line style="stroke:#000000;stroke-width:1;" x1="370.6" x2="362.6" y1="987.8479" y2="981.8479"/><line style="stroke:#000000;stroke-width:1;" x1="370.6" x2="362.6" y1="987.8479" y2="987.8479"/><ellipse cx="376.6" cy="987.8479" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="67.9199" x="1952.6" y="985.0417">commented</text></g><!--link User to GMN43--><g class="link" data-entity-1="ent0003" data-entity-2="ent0044" data-link-type="association" data-source-line="192" id="lnk45"><path d="M3096.39,245.8479 C3363.1,245.8479 3896,245.8479 3896,245.8479 C3896,245.8479 3896,314.9579 3896,361.9379" fill="none" id="User-GMN43" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><!--link Brewery to GMN46--><g class="link" data-entity-1="ent0013" data-entity-2="ent0047" data-link-type="association" data-source-line="200" id="lnk48"><path d="M1074.3083,596.8479 C1071.9327,596.8479 1069.5712,596.8479 1067.2244,596.8479 C1062.5308,596.8479 1057.8959,596.8479 1053.3248,596.8479 C1035.0405,596.8479 1017.777,596.8479 1001.8572,596.8479 C938.1781,596.8479 896,596.8479 896,596.8479 C896,596.8479 896,716.9079 896,778.3479" fill="none" id="Brewery-GMN46" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><g class="caption" data-source-line="8"><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="682.3496" x="1867.3252" y="1171.9797">Every table also has a RowVersion ROWVERSION column (optimistic concurrency), omitted below for brevity.</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="336.1504" x="2040.4248" y="1188.0783">Tables marked (*) have no repository/feature slice yet.</text></g><?plantuml-src jLXjRzis4FxkNt7pWDKEugR9sc3mYWAsOpT6yrR7oJPWmC18j4r45WMITgeb_UyxKfHCoefZTsq-1ERTyVZSmxiZgP_KZCuf915XSKtUipWXWipXZWJtKy4NSTZZ4HVmyy3yEHOXdP15f0OyLXS4FNG48v6ZZrXCLPfGu4BDkAD8q3MPqckLHXG43HI9fn6jrHHJA3WXYjmHIU4wG62a5f14CHv3Vqb52gX36n993ZCYWS28FznI8RN5wFAFs_xeUdXv0G6F5lCO6XpdpfbKB41H72o4e76GDlU1pvbID8Gx6l47c620Tu8kcKfV_nsFzHeIvaJSeqLZhubBBId47C4cN3B5HNemeKGj10KPiO12IjNhMiq61lKRIGNy0fs5cjNXiGP0OmmkpHIT841QLHqGlp7K1W1xu2Y79ssukHX-lkaFJ_eNu-5Ws1_1-_TNdpvyCCQjbZCdHlRRSDiPzKuxeyRnsoPQPfEjzHuCc91cbzfmaHiU7ltMjEepiadRdnCMhHRGclKLUW89eM57jU6aC-wFX-Tzexb9mahvdjveUZdfCioEJ8VohxKIMUWsr6CI6RxqqEDhfT-9iiqq3pwz61QoyYLX8bqJdn8vSsWyUdUSqpYK8xhac59jw0x7HcW59Uzh9622imaBYAu3GuCHf1uHhirtfM8VIZljhgJtSCnqucp2trbYJGjTIGQz7NffRqG_5lVLZ2k-USVNa0zufFj3ZjmENUIPwCSaN-QRnTDlpLCl7XD_4KesUjo2ct8GfzZJ1JRt--eqlqaYJa8QTjENKUUsQx2_EitqZEUPxtRIdgPGf5bNo7uNqTZnrfjYxSiTyCsRedIlBtyzF3x-vx0DMRYb1kZnVArm9wu4Nx8ue0QV9obGUjAjiNgpNaPyP14VLxNiZJHLbKGF_sUCws51DmwsvngDduUz3IS5C3T9ke8-K9qERevOuHMNsMbhnmLmHxyrVZkd58AJ_zhRTjb_GcKWcBdTEAxU7Hurl-bCzNRA2MrLFoiAK5R5GcwwAniR6Anen9qm55JACxmV7bPnwEYFdkUOH3qUUdjGPD66X2pext4kGXOZZx8D7_kN7qUTgzE_Dj3ejyzSuNNHilLtfN6NSypSwR13lz1PkvJQKzch6fHcT_CYs49IH9fBTkXRQ5rH-EMsL5qKvvq_csjxWnWqOnvC3-5EXVryKze8oIHqznPPxlU6vvspnjlzedw7tPis32_6EtU6b-XrJNNgRENq_tGJIsQf1hJKBm3NRllitxnLtotrAmBgyVaSPLv8kQmSb9NlSAimzbu7At9g-vYjc-tsU8JjEvwwIRVhhYDDh_1T4fbpGCvOWktHUSxMpE-dfrQBFsQliJRKyILUTnHF-VkaIcKl_xdA3h_oLklfoLvAKIVe11_re7ZTMz3Ulz5WOdv9Q7WNwkPcS_tUJw7XNAjB4uhr5_PYMgzW8pyaQ_crqqxsRtbvWBuq9qudOMwnle8z3Zne-Tq5PoMcZzHhkSWownpjkMkpZk_0gYCT1FB1ufAVH_zeoprbesSi8bDlPhSgWi5CzoFHRTeDepXTIWOQuPGBzY-Lwo2jpPrfVvaJLxS9lQjse9TTv7rWFOlNz45UeqX0p1M5EwuKdmEVcDh1mkhYcPkbto3xS2HVwt8wA4RQxfp4U2vhJwyapZaX2RwqLX-T6CLyrxD6nMUeVJHpAc2bQ48B9qwPLC9inZu4nPSId2Euic8IXx1qNlH0IJ039kM2WffH9e0_n3Y3nVfx7bn_FjlNNy8aBeBn9887DDG1r2Wwqh6lCP1dSoK9cH8ZUvNRhMB06OsCW-Rl6Zwcmy72jAs3a4OK5n6Bs05cK4eMKY20OSUI15cC3qpDeFfJ8CvPClShuYgE_m00?></g></svg> |