digraph schema { graph [rankdir=TB, splines=spline, overlap=false, bgcolor="#1e2430", nodesep=0.95, ranksep=1.0, pad=0.5, fontname="Helvetica", compound=true, mclimit=4.0]; node [shape=plaintext, fontname="Helvetica"]; edge [fontname="Helvetica", fontsize=9, penwidth=1.4, arrowsize=0.7]; subgraph cluster_identity { label="Identity & Company"; labeljust="l"; fontsize=15; style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f"; fontcolor="#e2e8f0"; margin=14; meta [label=<
meta
keyNVARCHAR(255)
valueNVARCHAR(MAX)
>]; customergroup [label=<
customergroup
idINT PK
company_id?INT FK
nameNVARCHAR(255)
sortINT
>]; numbers [label=<
numbers
idINT PK
company_idINT FK
typeNVARCHAR(100)
prefixNVARCHAR(50)
paddingINT
nextINT
>]; entityaddress [label=<
entityaddress
idINT PK
entity_idINT FK
first_name?NVARCHAR(255)
name?NVARCHAR(255)
street?NVARCHAR(255)
streetnumber?NVARCHAR(50)
zip?NVARCHAR(50)
city?NVARCHAR(255)
county?NVARCHAR(255)
addresstypeNVARCHAR(50)
sortINT
>]; entity [label=<
entity
idINT PK
customergroup_idINT FK
first_name?NVARCHAR(255)
nameNVARCHAR(255)
number?NVARCHAR(100)
created_atDATETIME2
updated_atDATETIME2
>]; companyuser [label=<
companyuser
idINT PK
company_idINT FK
google_auth_idINT FK
>]; entitycontact [label=<
entitycontact
idINT PK
entity_idINT FK
contacttypeNVARCHAR(50)
contactNVARCHAR(255)
sortINT
>]; company [label=<
company
idINT PK
poscustomergroup_idINT FK
root_category_id?INT FK
taxrate?INT FK
reducedtaxrate?INT FK
taxfreerate?INT FK
default_language_id?INT FK
nameNVARCHAR(255)
>]; syncpos [label=<
syncpos
idINT PK
company_idINT FK
paircodeNVARCHAR(50)
token?NVARCHAR(255)
>]; entityhistory [label=<
entityhistory
idINT PK
entity_idINT FK
companyuser_id?INT FK
dateDATETIME2
textNVARCHAR(MAX)
>]; companysetting [label=<
companysetting
idINT PK
company_idINT FK
keyNVARCHAR(255)
valueNVARCHAR(MAX)
frontendBIT
writeonlyBIT
>]; google_auth [label=<
google_auth
idINT PK
selected_company?INT FK
emailNVARCHAR(320)
picture?NVARCHAR(2048)
picturebinary?VARBINARY(MAX)
sub?NVARCHAR(255)
created_atDATETIME2
>]; } subgraph cluster_i18n { label="Localization"; labeljust="l"; fontsize=15; style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f"; fontcolor="#e2e8f0"; margin=14; language [label=<
language
idINT PK
iso639NVARCHAR(10)
>]; articletext [label=<
articletext
idINT PK
article_idINT FK
language_idINT FK
nameNVARCHAR(255)
slugNVARCHAR(255)
seo?NVARCHAR(MAX)
desc?NVARCHAR(MAX)
>]; categorytext [label=<
categorytext
idINT PK
category_idINT FK
language_idINT FK
nameNVARCHAR(255)
slugNVARCHAR(255)
seo?NVARCHAR(MAX)
desc?NVARCHAR(MAX)
>]; unittext [label=<
unittext
idINT PK
unit_idINT FK
language_idINT FK
symbolNVARCHAR(50)
nameNVARCHAR(255)
>]; } subgraph cluster_catalog { label="Catalog"; labeljust="l"; fontsize=15; style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f"; fontcolor="#e2e8f0"; margin=14; brand [label=<
brand
idINT PK
company_idINT FK
nameNVARCHAR(255)
gsprpinfo?NVARCHAR(MAX)
>]; articlelist [label=<
articlelist
idINT PK
>]; articlelistarticle [label=<
articlelistarticle
idINT PK
articlelist_idINT FK
article_idINT FK
countINT
sortINT
>]; optionslist [label=<
optionslist
idINT PK
>]; optionslistarticle [label=<
optionslistarticle
idINT PK
optionslist_idINT FK
article_idINT FK
countINT
sortINT
mandatedBIT
>]; articlehistory [label=<
articlehistory
idINT PK
companyuser_id?INT FK
article_idINT FK
dateDATETIME2
textNVARCHAR(MAX)
>]; articleean [label=<
articleean
idINT PK
article_idINT FK
eanNVARCHAR(50)
>]; article [label=<
article
idINT PK
company_idINT FK
brand_id?INT FK
articlelist_id?INT FK
optionslist_id?INT FK
fatherarticle_id?INT FK
unit_idINT FK
sku?NVARCHAR(100)
unitamountFLOAT
weightFLOAT
track_stockBIT
is_fatherBIT
fathersortINT
created_atDATETIME2
updated_atDATETIME2
>]; articlesupplier [label=<
articlesupplier
idINT PK
entity_idINT FK
article_idINT FK
price_id?INT FK
sku?NVARCHAR(100)
stock?FLOAT
puFLOAT
sortINT
>]; category [label=<
category
idINT PK
parent_id?INT FK
sortINT
>]; categoryarticle [label=<
categoryarticle
idINT PK
article_idINT FK
category_idINT FK
>]; } subgraph cluster_media { label="Media"; labeljust="l"; fontsize=15; style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f"; fontcolor="#e2e8f0"; margin=14; pic [label=<
pic
idINT PK
wINT
hINT
sizeBIGINT
hashNVARCHAR(64)
thumbwINT
thumbhINT
thumbhashNVARCHAR(64)
sourceNVARCHAR(MAX)
fullbinaryVARBINARY(MAX)
thumbbinaryVARBINARY(MAX)
>]; brandpic [label=<
brandpic
idINT PK
brand_idINT FK
pic_idINT FK
sortINT
>]; articlepic [label=<
articlepic
idINT PK
article_idINT FK
pic_idINT FK
sortINT
>]; categorypic [label=<
categorypic
idINT PK
pic_idINT FK
category_idINT FK
sortINT
>]; file [label=<
file
idINT PK
hashNVARCHAR(64)
mimetypeNVARCHAR(255)
nameNVARCHAR(255)
sizeBIGINT
createdDATETIME2
modifiedDATETIME2
contentVARBINARY(MAX)
thumbavif?VARBINARY(MAX)
thumbx?INT
thumby?INT
meta?NVARCHAR(MAX)
>]; } subgraph cluster_manifests { label="Documents"; labeljust="l"; fontsize=15; style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f"; fontcolor="#e2e8f0"; margin=14; ledger [label=<
ledger
idINT PK
manifestarticle_idINT FK
warehouse_id?INT FK
transaction_typeNVARCHAR(100)
amountFLOAT
transaction_textNVARCHAR(MAX)
hash_versionINT
prev_hash?NVARCHAR(128)
created_atDATETIME2
>]; manifestarticle [label=<
manifestarticle
idINT PK
manifest_idINT FK
sku?NVARCHAR(100)
name?NVARCHAR(255)
puFLOAT
amountFLOAT
netFLOAT
comment?NVARCHAR(MAX)
rebateFLOAT
taxrateFLOAT
>]; manifest [label=<
manifest
idINT PK
entity_id?INT FK
company_idINT FK
numberNVARCHAR(100)
typeNVARCHAR(100)
external_number?NVARCHAR(100)
dateDATETIME2
created_atDATETIME2
>]; manifestattachment [label=<
manifestattachment
idINT PK
manifest_idINT FK
file_idINT FK
sortINT
>]; warehouse [label=<
warehouse
idINT PK
company_idINT FK
nameNVARCHAR(255)
sortINT
>]; } subgraph cluster_commerce { label="Pricing"; labeljust="l"; fontsize=15; style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f"; fontcolor="#e2e8f0"; margin=14; tax [label=<
tax
idINT PK
rateDECIMAL(18,4)
>]; price [label=<
price
idINT PK
customergroup_idINT FK
article_idINT FK
tax_idINT FK
minmultiplierDECIMAL(18,4)
netFLOAT
>]; } subgraph cluster_units { label="Units"; labeljust="l"; fontsize=15; style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f"; fontcolor="#e2e8f0"; margin=14; unit [label=<
unit
idINT PK
company_idINT FK
siNVARCHAR(50)
basesiNVARCHAR(50)
basesifactorFLOAT
>]; } subgraph cluster_pos { label="POS"; labeljust="l"; fontsize=15; style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f"; fontcolor="#e2e8f0"; margin=14; posterminalcategory [label=<
posterminalcategory
idINT PK
posterminal_idINT FK
category_idINT FK
>]; posterminal [label=<
posterminal
idINT PK
company_idINT FK
nameNVARCHAR(255)
token?NVARCHAR(255)
pairingpinNVARCHAR(50)
>]; printer [label=<
printer
idINT PK
company_idINT FK
addressNVARCHAR(255)
typeNVARCHAR(50)
model?NVARCHAR(255)
serial?NVARCHAR(255)
sortINT
desc?NVARCHAR(MAX)
>]; } __legend [label=<
Legend
PKprimary key
FKforeign key
?nullable column
—FOREIGN KEY constraint
- -naming convention only, no constraint
>]; google_auth:selected_company:w -> company:in9:n [color="#ff6b6b", fontcolor="#ff6b6b", tooltip="FK_google_auth_selected_company", weight=3]; category:parent_id:e -> category:id:e [color="#6bdf9a", fontcolor="#6bdf9a", tooltip="FK_category_parent", constraint=false]; company:root_category_id:e -> category:in0:n [color="#5aa7ff", fontcolor="#5aa7ff", tooltip="FK_company_root_category", weight=3]; company:default_language_id:w -> language:in1:n [color="#f5c15c", fontcolor="#f5c15c", tooltip="FK_company_default_language", constraint=false, weight=1]; company:taxrate:w -> tax:in1:n [color="#c79bff", fontcolor="#c79bff", tooltip="FK_company_taxrate", constraint=false, weight=1]; company:reducedtaxrate:w -> tax:in0:n [color="#ff9f5a", fontcolor="#ff9f5a", tooltip="FK_company_reducedtaxrate", constraint=false, weight=1]; company:taxfreerate:w -> tax:in2:n [color="#5cd6d6", fontcolor="#5cd6d6", tooltip="FK_company_taxfreerate", constraint=false, weight=1]; customergroup:company_id:w -> company:in4:n [color="#ff7fc2", fontcolor="#ff7fc2", tooltip="FK_customergroup_company", weight=3]; company:poscustomergroup_id:w -> customergroup:in2:n [color="#8f95ff", fontcolor="#8f95ff", tooltip="FK_company_poscustomergroup", constraint=false, weight=1]; entity:customergroup_id:sw -> customergroup:in0:n [color="#58d18a", fontcolor="#58d18a", tooltip="FK_entity_customergroup", weight=3]; entityaddress:entity_id:ne -> entity:in1:n [color="#ff8f66", fontcolor="#ff8f66", tooltip="FK_entityaddress_entity", weight=3]; entitycontact:entity_id:sw -> entity:in2:n [color="#4fc4e8", fontcolor="#4fc4e8", tooltip="FK_entitycontact_entity", weight=3]; entityhistory:entity_id:sw -> entity:in3:n [color="#a98cff", fontcolor="#a98cff", tooltip="FK_entityhistory_entity", weight=3]; entityhistory:companyuser_id:se -> companyuser:in0:n [color="#ff6f6f", fontcolor="#ff6f6f", tooltip="FK_entityhistory_companyuser", constraint=false, weight=1]; unit:company_id:w -> company:in12:n [color="#4ecb8f", fontcolor="#4ecb8f", tooltip="FK_unit_company", weight=3]; unittext:unit_id:e -> unit:in1:n [color="#5aa7e6", fontcolor="#5aa7e6", tooltip="FK_unittext_unit", weight=3]; unittext:language_id:w -> language:in3:n [color="#ff7aa8", fontcolor="#ff7aa8", tooltip="FK_unittext_language", constraint=false, weight=1]; brand:company_id:sw -> company:in10:n [color="#e0b25a", fontcolor="#e0b25a", tooltip="FK_brand_company", weight=3]; article:company_id:w -> company:in11:n [color="#56c8c8", fontcolor="#56c8c8", tooltip="FK_article_company", weight=3]; article:unit_id:e -> unit:in0:n [color="#ff5f9e", fontcolor="#ff5f9e", tooltip="FK_article_unit", constraint=false, weight=1]; article:brand_id:w -> brand:in0:n [color="#ffb25a", fontcolor="#ffb25a", tooltip="FK_article_brand", constraint=false, weight=1]; article:articlelist_id:w -> articlelist:in1:n [color="#56d68a", fontcolor="#56d68a", tooltip="FK_article_articlelist", constraint=false, weight=1]; article:optionslist_id:w -> optionslist:in1:n [color="#66b3ff", fontcolor="#66b3ff", tooltip="FK_article_optionslist", constraint=false, weight=1]; article:fatherarticle_id:e -> article:id:e [color="#c79bff", fontcolor="#c79bff", tooltip="FK_article_fatherarticle", constraint=false]; articlehistory:article_id:se -> article:in0:n [color="#ff6b6b", fontcolor="#ff6b6b", tooltip="FK_articlehistory_article", weight=3]; articlehistory:companyuser_id:e -> companyuser:in1:n [color="#6bdf9a", fontcolor="#6bdf9a", tooltip="FK_articlehistory_companyuser", constraint=false, weight=1]; articleean:article_id:se -> article:in3:n [color="#5aa7ff", fontcolor="#5aa7ff", tooltip="FK_articleean_article", weight=3]; articlepic:article_id:sw -> article:in7:n [color="#f5c15c", fontcolor="#f5c15c", tooltip="FK_articlepic_article", weight=3]; articlepic:pic_id:e -> pic:in1:n [color="#c79bff", fontcolor="#c79bff", tooltip="FK_articlepic_pic", constraint=false, weight=1]; brandpic:brand_id:e -> brand:in1:n [color="#ff9f5a", fontcolor="#ff9f5a", tooltip="FK_brandpic_brand", weight=3]; brandpic:pic_id:w -> pic:in2:n [color="#5cd6d6", fontcolor="#5cd6d6", tooltip="FK_brandpic_pic", constraint=false, weight=1]; articlelistarticle:articlelist_id:ne -> articlelist:in0:n [color="#ff7fc2", fontcolor="#ff7fc2", tooltip="FK_articlelistarticle_articlelist", weight=3]; articlelistarticle:article_id:w -> article:in1:n [color="#8f95ff", fontcolor="#8f95ff", tooltip="FK_articlelistarticle_article", constraint=false, weight=1]; optionslistarticle:optionslist_id:se -> optionslist:in0:n [color="#58d18a", fontcolor="#58d18a", tooltip="FK_optionslistarticle_optionslist", weight=3]; optionslistarticle:article_id:w -> article:in2:n [color="#ff8f66", fontcolor="#ff8f66", tooltip="FK_optionslistarticle_article", constraint=false, weight=1]; categoryarticle:category_id:nw -> category:in3:n [color="#4fc4e8", fontcolor="#4fc4e8", tooltip="FK_categoryarticle_category", weight=3]; categoryarticle:article_id:sw -> article:in6:n [color="#a98cff", fontcolor="#a98cff", tooltip="FK_categoryarticle_article", constraint=false, weight=1]; categorypic:category_id:sw -> category:in4:n [color="#ff6f6f", fontcolor="#ff6f6f", tooltip="FK_categorypic_category", weight=3]; categorypic:pic_id:w -> pic:in0:n [color="#4ecb8f", fontcolor="#4ecb8f", tooltip="FK_categorypic_pic", constraint=false, weight=1]; categorytext:category_id:w -> category:in5:n [color="#5aa7e6", fontcolor="#5aa7e6", tooltip="FK_categorytext_category", weight=3]; categorytext:language_id:e -> language:in2:n [color="#ff7aa8", fontcolor="#ff7aa8", tooltip="FK_categorytext_language", constraint=false, weight=1]; articletext:article_id:w -> article:in9:n [color="#e0b25a", fontcolor="#e0b25a", tooltip="FK_articletext_article", weight=3]; articletext:language_id:w -> language:in0:n [color="#56c8c8", fontcolor="#56c8c8", tooltip="FK_articletext_language", constraint=false, weight=1]; price:tax_id:w -> tax:in3:n [color="#ff5f9e", fontcolor="#ff5f9e", tooltip="FK_price_tax", constraint=false, weight=1]; price:article_id:e -> article:in8:n [color="#ffb25a", fontcolor="#ffb25a", tooltip="FK_price_article", weight=3]; price:customergroup_id:w -> customergroup:in1:n [color="#56d68a", fontcolor="#56d68a", tooltip="FK_price_customergroup", constraint=false, weight=1]; articlesupplier:article_id:nw -> article:in5:n [color="#66b3ff", fontcolor="#66b3ff", tooltip="FK_articlesupplier_article", weight=3]; articlesupplier:entity_id:w -> entity:in4:n [color="#c79bff", fontcolor="#c79bff", tooltip="FK_articlesupplier_entity", constraint=false, weight=1]; articlesupplier:price_id:e -> price:in0:n [color="#ff6b6b", fontcolor="#ff6b6b", tooltip="FK_articlesupplier_price", constraint=false, weight=1]; manifest:company_id:e -> company:in0:n [color="#6bdf9a", fontcolor="#6bdf9a", tooltip="FK_manifest_company", weight=3]; manifest:entity_id:e -> entity:in0:n [color="#5aa7ff", fontcolor="#5aa7ff", tooltip="FK_manifest_entity", constraint=false, weight=1]; manifestarticle:manifest_id:se -> manifest:in0:n [color="#f5c15c", fontcolor="#f5c15c", tooltip="FK_manifestarticle_manifest", weight=3]; warehouse:company_id:e -> company:in1:n [color="#c79bff", fontcolor="#c79bff", tooltip="FK_warehouse_company", weight=3]; ledger:manifestarticle_id:sw -> manifestarticle:in0:n [color="#ff9f5a", fontcolor="#ff9f5a", tooltip="FK_ledger_manifestarticle", weight=3]; ledger:warehouse_id:e -> warehouse:in0:n [color="#5cd6d6", fontcolor="#5cd6d6", tooltip="FK_ledger_warehouse", constraint=false, weight=1]; numbers:company_id:se -> company:in5:n [color="#ff7fc2", fontcolor="#ff7fc2", tooltip="FK_numbers_company", weight=3]; companyuser:google_auth_id:e -> google_auth:in0:n [color="#8f95ff", fontcolor="#8f95ff", tooltip="FK_companyuser_google_auth", constraint=false, weight=1]; companyuser:company_id:ne -> company:in6:n [color="#58d18a", fontcolor="#58d18a", tooltip="FK_companyuser_company", weight=3]; syncpos:company_id:nw -> company:in7:n [color="#ff8f66", fontcolor="#ff8f66", tooltip="FK_syncpos_company", weight=3]; companysetting:company_id:sw -> company:in8:n [color="#4fc4e8", fontcolor="#4fc4e8", tooltip="FK_companysetting_company", weight=3]; posterminal:company_id:e -> company:in2:n [color="#a98cff", fontcolor="#a98cff", tooltip="FK_posterminal_company", weight=3]; posterminalcategory:posterminal_id:sw -> posterminal:in0:n [color="#ff6f6f", fontcolor="#ff6f6f", tooltip="FK_posterminalcategory_posterminal", weight=3]; posterminalcategory:category_id:e -> category:in1:n [color="#4ecb8f", fontcolor="#4ecb8f", tooltip="FK_posterminalcategory_category", constraint=false, weight=1]; printer:company_id:se -> company:in3:n [color="#5aa7e6", fontcolor="#5aa7e6", tooltip="FK_printer_company", weight=3]; manifestattachment:manifest_id:sw -> manifest:in1:n [color="#ff7aa8", fontcolor="#ff7aa8", tooltip="FK_manifestattachment_manifest", weight=3]; manifestattachment:file_id:e -> file:in0:n [color="#e0b25a", fontcolor="#e0b25a", tooltip="FK_manifestattachment_file", constraint=false, weight=1]; }