Überblick

Die Änderungs-Import-Datenbank ist eine vom Kunden gepflegte Datenbank für artikelspezifische und stammdatenbezogene Inhalte. Der Kunde befüllt diese Datenbank, SellSite liest sie über einen Import-Job aus und übernimmt die Änderungen in die SellSite-Datenbank. Wenn konfiguriert, läuft der Import-Job periodisch.

Dadurch lassen sich Artikeldaten effizient und aktuell halten, ohne dass externe Systeme direkt auf die SellSite-Datenbank zugreifen müssen oder komplexe Schnittstellen erforderlich sind. Auf welchem Weg die Import-Datenbank befüllt und gepflegt wird, kann der Kunde frei festlegen.

Das Schema unterteilt sich in zwei Bereiche:

Stammdaten

Artikelunabhängige Daten wie Marken, Merkmals-Einstellungen, Kataloge, Gruppen und Varianten können vollständig, gar nicht oder im Delta-Modus importiert werden.

Im Delta-Modus enthalten die Stammdaten-Tabellen ein Feld changeDate. Zeilen mit changeDate innerhalb des gewählten Zeitfensters werden dann importiert. Ein NULL-Wert sorgt dafür, dass die jeweilige Zeile immer aktualisiert wird. Dadurch können große Tabellen performanter per Delta verarbeitet werden, während kleinere Tabellen den Wert einfach leer lassen können.

Stammdaten, die ursprünglich aus der Änderungs-Import-Datenbank stammen, nun aber in dieser nicht mehr vorhanden sind, werden nur nach einem Vollimport der Stammdaten gelöscht und auch dann nur, sofern keine Artikel oder sonstigen Referenzierungen diese mehr verwenden.

Artikeldaten

Artikeldaten können vollständig, gar nicht oder im Delta-Modus importiert werden. Im Delta-Modus steuert der Änderungszeitpunkt am Artikel den Import.

Artikelspezifische Daten, die ursprünglich aus der Änderungs-Import-Datenbank stammen, nun aber nicht mehr vorhanden sind, werden für alle aktualisierten Artikel gelöscht. Artikel selber werden entweder direkt über das Löschkennzeichen gelöscht oder nach einem Vollimport entfernt, wenn sie in der Änderungs-Import-Datenbank nicht mehr vorhanden sind.

Marken – brands

Enthält die Marken (Hersteller/Lieferanten), auf die Artikel verweisen können. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
code * Text (max. 50 Zeichen) Eindeutiger Markencode
name * Text (max. 255 Zeichen) Anzeigename der Marke
logo Text (max. 512 Zeichen) URL oder relativer Pfad zur Datei im Media-Repository / 'media' Ordner
description Text (unbegrenzt) Beschreibungstext
slogan Text (max. 500 Zeichen) Slogan der Marke
supplierNumber Text (max. 50 Zeichen) Lieferantennummer
priority Ganzzahl Sortierpriorität
useOxomiPreviewImages Ja/Nein Vorschaubilder aus OXOMI?
oxomiSupplierNumber Ja/Nein OXOMI Lieferantennummer?
manufacturerName Text (max. 255 Zeichen) Name des Herstellers
manufacturerPostalAddress Text (max. 500 Zeichen) Postanschrift des Herstellers
manufacturerElectronicAddress Text (max. 255 Zeichen) Elektronische Adresse des Herstellers
distributorName Text (max. 255 Zeichen) Name des Inverkehrbringers
distributorPostalAddress Text (max. 500 Zeichen) Postanschrift des Inverkehrbringers
distributorElectronicAddress Text (max. 255 Zeichen) Elektronische Adresse des Inverkehrbringers
changeDate Datum + Uhrzeit Änderungszeitpunkt für den Delta-Import; NULL bedeutet immer importieren
Merkmals-Einstellungen – featuresettings

Definiert die verfügbaren Merkmale und deren Darstellungsoptionen. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
code * Text (max. 255 Zeichen) Eindeutiger Merkmalscode
type * Text (max. 20 Zeichen) ALPHANUMERIC (Text), NUMERIC (Zahl), RANGE (Wertebereich) oder BOOL (Ja/Nein).
priority * Ganzzahl Sortierpriorität
showInDetails * Ja/Nein In Artikeldetails anzeigen?
showInList * Ja/Nein In Artikelliste anzeigen?
showAsFilter * Ja/Nein Als Filter verwenden?
noRangeFilter * Ja/Nein Kein Zahlenfilter?
useAsContent * Ja/Nein In Suche einschließen?
useAsExtendedContent * Ja/Nein Erweiterte Suche?
showInTooltip * Ja/Nein Als Tooltipinfo verwenden?
characteristic * Ja/Nein Charaktermerkmal?
multiple * Ja/Nein Mehrfach?
label (1) Text (max. 255 Zeichen) Anzeigename des Merkmals
changeDate Datum + Uhrzeit Änderungszeitpunkt für den Delta-Import; NULL bedeutet immer importieren
Kataloge – catalogs

Definiert Kataloge, denen Artikel zugeordnet werden können. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
name * Text (max. 255 Zeichen) Eindeutiger Katalogname
offer * Ja/Nein Angebotskatalog?
visibleName Text (max. 255 Zeichen) Abweichender, im Shop anzuzeigender Name des Katalogs
logo Text (max. 512 Zeichen) URL oder relativer Pfad zur Datei im Media-Repository / 'media' Ordner
partnerRole Text (max. 255 Zeichen) Partnerrolle, die untergeordnete Mandanten benötigen, um auf den Katalog zugreifen zu können
validFrom Datum Gültig ab
validUntil Datum Gültig bis
language Text (max. 2 Zeichen) Sprache des Katalogs (z. B. de, en)
changeDate Datum + Uhrzeit Änderungszeitpunkt für den Delta-Import; NULL bedeutet immer importieren
Gruppen – groups

Definiert die hierarchische Gruppenstruktur. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
type * Text (max. 30 Zeichen) Code des Gruppentyps. Siehe Gruppentypen für mögliche Werte.
code * Text (max. 255 Zeichen) Eindeutiger Gruppencode (Im Falle von markenspezifischen Gruppen eindeutig innerhalb der Marke)
name * (1) Text (max. 255 Zeichen) Anzeigename
priority * Ganzzahl Sortierpriorität
image Text (max. 512 Zeichen) URL oder relativer Pfad zur Datei im Media-Repository / 'media' Ordner
parent Text (max. 255 Zeichen) Code der übergeordneten Gruppe
brand Text (max. 50 Zeichen) Code der zugeordneten Marke (nur im Fall von markenspezifischen Gruppen)
cssClass Text (max. 255 Zeichen) CSS-Klasse für die Darstellung
changeDate Datum + Uhrzeit Änderungszeitpunkt für den Delta-Import; NULL bedeutet immer importieren
Gruppentexte – grouptexts

Zusätzliche Texte zu Gruppen. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
group * Text (max. 255 Zeichen) Gruppencode
type * Text (max. 50 Zeichen) Texttyp
text * Text (unbegrenzt) Textinhalt
changeDate Datum + Uhrzeit Änderungszeitpunkt für den Delta-Import; NULL bedeutet immer importieren

Zulässige Werte für type:

Code Bezeichnung
TEMPLATE_TOP_DESKTOP Desktop-Template (oben)
TEMPLATE_TOP_MOBILE Mobile-Template (oben)
TEMPLATE_BOTTOM_DESKTOP Desktop-Template (unten)
TEMPLATE_BOTTOM_MOBILE Mobile-Template (unten)
META_TITLE Meta-Titel
META_DESCRIPTION Meta-Beschreibung
Mengeneinheiten – quantityunits

Definiert verfügbare Mengeneinheiten. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
code * Text (max. 255 Zeichen) Eindeutiger Einheitscode
shortName Text (max. 255 Zeichen) Kurzname
unitName Text (max. 255 Zeichen) Bezeichnung der Einheit
alias1 ... alias6 Text (max. 255 Zeichen) Alternative Schreibweisen
standardCode Text (max. 255 Zeichen) Standardcode
erpCode Text (max. 255 Zeichen) ERP-Code
changeDate Datum + Uhrzeit Änderungszeitpunkt für den Delta-Import; NULL bedeutet immer importieren
Varianten – variants

Definiert Varianten-Gruppierungen, denen Artikel zugeordnet werden können. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
code * Text (max. 255 Zeichen) Eindeutiger Variantencode
itemPreviewIsVariantImage * Ja/Nein Produktabbildung zeigt Variantenausführung?
name Text (max. 1024 Zeichen) Anzeigename der Variante
previewImage Text (max. 512 Zeichen) URL oder relativer Pfad zur Datei im Media-Repository / 'media' Ordner
featureX Text (max. 128 Zeichen) Merkmalscode für die X-Achse der Variantenmatrix
featureY Text (max. 128 Zeichen) Merkmalscode für die Y-Achse der Variantenmatrix
changeDate Datum + Uhrzeit Änderungszeitpunkt für den Delta-Import; NULL bedeutet immer importieren
Artikel – items

Die zentrale Tabelle für Artikeldaten. Das Feld changeDate steuert, welche Artikel im Delta-Modus beim nächsten Import-Lauf berücksichtigt werden. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
itemNumber * Text (max. 50 Zeichen) Eindeutige Artikelnummer
shortText * (1) Text (unbegrenzt) Kurztext
quantityUnit * Text (max. 255 Zeichen) Code der Mengeneinheit
ranking * Ganzzahl Ranking
priceQuantity * Zahl (3 Nachkommastellen) Preismenge
minOrderQuantity * Zahl (3 Nachkommastellen) Mindestbestellmenge
orderStep * Zahl (3 Nachkommastellen) Bestellschritt
priority * Ganzzahl Sortierpriorität
changeDate * Datum + Uhrzeit Zeitpunkt der letzten Änderung – steuert den Import
deleted * Ja/Nein Artikel als gelöscht betrachten?
previewImage Text (max. 512 Zeichen) URL oder relativer Pfad zur Datei im Media-Repository / 'media' Ordner
brand Text (max. 50 Zeichen) Code der zugehörigen Marke
supplierNumber Text (max. 50 Zeichen) Lieferantennummer
ean Text (max. 50 Zeichen) EAN / GTIN
supplierArticleNumber Text (max. 50 Zeichen) Herstellerartikelnummer
userCorrelationNumber Text (max. 50 Zeichen) Eigene Referenz-Nummer
model Text (max. 50 Zeichen) Lieferanten-Type
variant Text (max. 255 Zeichen) Code der zugehörigen Variante
classificationSystem Text (max. 50 Zeichen) Klassifizierungssystem (z. B. ETIM, eClass)
classificationClass Text (max. 50 Zeichen) Code der Klasse innerhalb des Klassifizierungssystems
Artikelmerkmale – features

Enthält die zusätzlichen Eigenschaften einzelner Artikel. Dabei werden die Werte abhängig vom Code automatisch zu Merkmalen, Kennzeichen oder Zusatzattributen. Pflichtfelder sind mit * gekennzeichnet.

Im Falle von Merkmalen, bei denen die in den Merkmals-Einstellungen "Mehrfach" gesetzt ist, oder im Falle von Zusatzattributen, die mehrere Werte unterstützen, können mehrere Zeilen mit demselben Artikel und Code existieren.

Spalte Typ Beschreibung
item * Text (max. 50 Zeichen) Artikelnummer
feature * Text (max. 128 Zeichen) Code des Merkmals / Kennzeichens / Zusatzattributs
value * Text (max. 255 Zeichen) Wert (bzw. unterer Grenzwert bei Wertbereichen)
value2 Text (max. 255 Zeichen) Oberer Grenzwert (nur bei Wertbereichen)
valueDescription (1) Text (max. 255 Zeichen) Beschreibungstext zum Wert
unit Text (max. 50 Zeichen) Code der Einheit des Merkmals
Zusatztexte – additionaltexts

Sprachabhängige Zusatztexte zu Artikeln, z. B. Langbeschreibungen oder technische Hinweise. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
item * Text (max. 50 Zeichen) Artikelnummer
type * Text (max. 50 Zeichen) Code des Texttyps. Siehe Texttypen für mögliche Werte.
language * Text (max. 3 Zeichen) Sprachcode (z. B. de, en)
text * Text (unbegrenzt) Der eigentliche Textinhalt
Anhänge – attachments

Dateien und Medien, die einem Artikel zugeordnet sind (z. B. Bilder, Datenblätter, Zertifikate). Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
item * Text (max. 50 Zeichen) Artikelnummer
type * Text (max. 50 Zeichen) Code des Anhangstyps. Siehe Bild- und Dateitypen für mögliche Werte.
file * Text (max. 1024 Zeichen) URL oder relativer Media-Repository-Pfad zur Datei
priority * Ganzzahl Sortierpriorität
languages Text (max. 60 Zeichen) Kommagetrennte Sprachcodes (z. B. de,en). Leer = alle Sprachen.
description (1) Text (max. 255 Zeichen) Beschreibungstext zum Anhang
Artikelbeziehungen – itemrelations

Definiert Beziehungen zwischen Artikeln, z. B. Zubehör, Alternativen oder Ersatzteile. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
sourceItem * Text (max. 50 Zeichen) Quell-Artikelnummer
targetItem * Text (max. 50 Zeichen) Ziel-Artikelnummer
relationType * Text (max. 30 Zeichen) Art der Beziehung (siehe unten)
priority * Ganzzahl Sortierpriorität
recommendedQuantity Zahl (3 Nachkommastellen) Empfohlene Menge
group Text (max. 50 Zeichen) Zubehörgruppe

Mögliche Werte für relationType (Beziehungstyp):

  • ACCESOIRE – Zubehör
  • RECOMMENDED_ACCESSOIRE – Empfohlenes Zubehör
  • MANDATORY_ACCESSORIES – Pflichtzubehör
  • CROSS – Querverweise
  • PREDECESSOR – Vorgänger
  • ALTERNATIVE – Alternative
  • UPSELLING – Upselling
  • PRIVATE_BRAND – Eigenmarke
  • SPECIAL_ALTERNATIVE – Sonderalternative
  • PART_OF – Teil von
  • SPAREPART – Ersatzteil
  • MOUNTING_ACCESSOIRE – Montagezubehör
Katalogzuordnungen – catalogitemmappings

Ordnet Artikel einem oder mehreren Katalogen zu und kann katalogspezifische Preise sowie Rabattgruppen enthalten. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
item * Text (max. 50 Zeichen) Artikelnummer
catalog * Text (max. 255 Zeichen) Katalogname
catalogItemNumber Text (max. 50 Zeichen) Katalogspezifische Artikelnummer
price Zahl (3 Nachkommastellen) Katalogpreis
discountGroup Text (max. 50 Zeichen) Rabattgruppe
Preisstaffeln – pricescales

Preisstaffeln je Katalogzuordnung. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
item * Text (max. 50 Zeichen) Artikelnummer
catalog * Text (max. 255 Zeichen) Katalogname
conditionValue * Zahl (3 Nachkommastellen) Schwellwert der Staffel
price Zahl (3 Nachkommastellen) Staffelpreis
Gruppenzuordnungen – groupmappings

Ordnet Artikel Gruppen zu. Ein Artikel kann mehreren Gruppen angehören. Pflichtfelder sind mit * gekennzeichnet.

Spalte Typ Beschreibung
item * Text (max. 50 Zeichen) Artikelnummer
group * Text (max. 255 Zeichen) Gruppencode
Hinweis zu mehrsprachigen Feldern

(1) Mehrsprachige Felder: Falls Ihr System mehrsprachig ist, können für mehrsprachige Felder sprachspezifische Werte über zusätzliche Spalten mit Suffix _xx bereitgestellt werden. So kann z. B. die items Tabelle um die Spalte shortText_en erweitert werden, um englischsprachige Artikel-Kurztexte zu definieren.

Vollständiges SQL-Schema

Nachfolgend finden Sie das vollständige SQL-Schema für die unterstützten Datenbanken. Die fachliche Struktur ist in allen Varianten identisch, die SQL-Syntax ist jedoch je nach Datenbank angepasst.

CREATE TABLE brands (
    code                          VARCHAR(50)    NOT NULL,
    name                          VARCHAR(255)   NULL,
    logo                          VARCHAR(512)   NULL,
    description                   TEXT           NULL,
    slogan                        VARCHAR(500)   NULL,
    supplierNumber                VARCHAR(50)    NULL,
    priority                      BIGINT         NOT NULL,
    useOxomiPreviewImages         TINYINT(1)     NOT NULL,
    oxomiSupplierNumber           TINYINT(1)     NOT NULL,
    manufacturerName              VARCHAR(255)   NULL,
    manufacturerPostalAddress     VARCHAR(500)   NULL,
    manufacturerElectronicAddress VARCHAR(255)   NULL,
    distributorName               VARCHAR(255)   NULL,
    distributorPostalAddress      VARCHAR(500)   NULL,
    distributorElectronicAddress  VARCHAR(255)   NULL,
    changeDate                    DATETIME       NULL,

    PRIMARY KEY (code),
    INDEX idx_brands_changedate (changeDate)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE featuresettings (
    code                 VARCHAR(255) NOT NULL,
    type                 VARCHAR(20)  NOT NULL,
    label                VARCHAR(255) NULL,
    priority             INT          NOT NULL,
    showInDetails        TINYINT(1)   NOT NULL,
    showInList           TINYINT(1)   NOT NULL,
    showAsFilter         TINYINT(1)   NOT NULL,
    noRangeFilter        TINYINT(1)   NOT NULL,
    useAsContent         TINYINT(1)   NOT NULL,
    useAsExtendedContent TINYINT(1)   NOT NULL,
    showInTooltip        TINYINT(1)   NOT NULL,
    characteristic       TINYINT(1)   NOT NULL,
    multiple             TINYINT(1)   NOT NULL,
    changeDate           DATETIME     NULL,

    PRIMARY KEY (code),
    INDEX idx_featuresettings_changedate (changeDate)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE catalogs (
    name            VARCHAR(255) NOT NULL,
    visibleName     VARCHAR(255) NULL,
    logo            VARCHAR(512) NULL,
    offer           TINYINT(1)   NOT NULL,
    partnerRole     VARCHAR(255) NULL,
    validFrom       DATE         NULL,
    validUntil      DATE         NULL,
    language        VARCHAR(2)   NULL,
    changeDate      DATETIME     NULL,

    PRIMARY KEY (name),
    INDEX idx_catalogs_changedate (changeDate)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE `groups` (
    code       VARCHAR(255) NOT NULL,
    name       VARCHAR(255) NULL,
    image      VARCHAR(512) NULL,
    parent     VARCHAR(255) NULL,
    type       VARCHAR(30)  NOT NULL,
    brand      VARCHAR(50)  NULL,
    priority   INT          NOT NULL,
    cssClass   VARCHAR(255) NULL,
    changeDate DATETIME     NULL,

    PRIMARY KEY (code),
    INDEX idx_groups_changedate (changeDate)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE grouptexts (
    `group`    VARCHAR(255) NOT NULL,
    type       VARCHAR(50)  NOT NULL,
    text       TEXT         NOT NULL,
    changeDate DATETIME     NULL,

    INDEX idx_grouptexts_group (`group`),
    INDEX idx_grouptexts_changedate (changeDate)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE quantityunits (
    code         VARCHAR(255) NOT NULL,
    shortName    VARCHAR(255) NULL,
    unitName     VARCHAR(255) NULL,
    alias1       VARCHAR(255) NULL,
    alias2       VARCHAR(255) NULL,
    alias3       VARCHAR(255) NULL,
    alias4       VARCHAR(255) NULL,
    alias5       VARCHAR(255) NULL,
    alias6       VARCHAR(255) NULL,
    standardCode VARCHAR(255) NULL,
    erpCode      VARCHAR(255) NULL,
    changeDate   DATETIME     NULL,

    PRIMARY KEY (code),
    INDEX idx_quantityunits_changedate (changeDate)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE variants (
    code                       VARCHAR(255)  NOT NULL,
    name                       VARCHAR(1024) NULL,
    previewImage               VARCHAR(512)  NULL,
    featureX                   VARCHAR(128)  NULL,
    featureY                   VARCHAR(128)  NULL,
    itemPreviewIsVariantImage  TINYINT(1)    NOT NULL,
    changeDate                 DATETIME      NULL,

    PRIMARY KEY (code),
    INDEX idx_variants_changedate (changeDate)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE items (
    itemNumber              VARCHAR(50)    NOT NULL,
    shortText               TEXT           NOT NULL,
    previewImage            VARCHAR(512)   NULL,
    brand                   VARCHAR(50)    NULL,
    supplierNumber          VARCHAR(50)    NULL,
    ranking                 BIGINT         NOT NULL,
    quantityUnit            VARCHAR(255)   NULL,
    priceQuantity           DECIMAL(20, 3) NOT NULL,
    minOrderQuantity        DECIMAL(20, 3) NOT NULL,
    orderStep               DECIMAL(20, 3) NOT NULL,
    ean                     VARCHAR(50)    NULL,
    supplierArticleNumber   VARCHAR(50)    NULL,
    userCorrelationNumber   VARCHAR(50)    NULL,
    model                   VARCHAR(50)    NULL,
    variant                 VARCHAR(255)   NULL,
    classificationSystem    VARCHAR(50)    NULL,
    classificationClass     VARCHAR(50)    NULL,
    priority                BIGINT         NOT NULL,
    changeDate              DATETIME       NOT NULL,
    deleted                 TINYINT(1)     NOT NULL,

    PRIMARY KEY (itemNumber),
    INDEX idx_items_changedate (changeDate)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE features (
    item             VARCHAR(50)  NOT NULL,
    feature          VARCHAR(128) NOT NULL,
    value            VARCHAR(255) NULL,
    value2           VARCHAR(255) NULL,
    valueDescription VARCHAR(255) NULL,
    unit             VARCHAR(50)  NULL,

    INDEX idx_features_item (item)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE additionaltexts (
    item     VARCHAR(50) NOT NULL,
    language VARCHAR(3)  NOT NULL,
    type     VARCHAR(50) NOT NULL,
    text     TEXT        NOT NULL,

    INDEX idx_additionaltexts_item (item)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE attachments (
    item        VARCHAR(50)   NOT NULL,
    type        VARCHAR(50)   NOT NULL,
    file        VARCHAR(1024) NOT NULL,
    languages   VARCHAR(60)   NULL,
    description VARCHAR(255)  NULL,
    priority    INT           NOT NULL,

    INDEX idx_attachments_item (item)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE itemrelations (
    sourceItem          VARCHAR(50)    NOT NULL,
    targetItem          VARCHAR(50)    NOT NULL,
    relationType        VARCHAR(30)    NOT NULL,
    priority            INT            NOT NULL,
    recommendedQuantity DECIMAL(20, 3) NULL,
    `group`             VARCHAR(50)    NULL,

    INDEX idx_itemrelations_source (sourceItem),
    INDEX idx_itemrelations_target (targetItem)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE catalogitemmappings (
    catalog           VARCHAR(255)   NOT NULL,
    item              VARCHAR(50)    NOT NULL,
    catalogItemNumber VARCHAR(50)    NULL,
    price             DECIMAL(20, 3) NULL,
    discountGroup     VARCHAR(50)    NULL,

    PRIMARY KEY (catalog, item),
    INDEX idx_catalogitemmappings_item (item)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE pricescales (
    catalog        VARCHAR(255)   NOT NULL,
    item           VARCHAR(50)    NOT NULL,
    conditionValue DECIMAL(20, 3) NOT NULL,
    price          DECIMAL(20, 3) NULL,

    PRIMARY KEY (catalog, item, conditionValue),
    INDEX idx_pricescales_item_catalog (item, catalog)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

CREATE TABLE groupmappings (
    item      VARCHAR(50)  NOT NULL,
    `group`   VARCHAR(255) NOT NULL,

    PRIMARY KEY (item, `group`),
    INDEX idx_groupmappings_group (`group`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;
CREATE TABLE brands (
    code                          VARCHAR(50)    NOT NULL PRIMARY KEY,
    name                          VARCHAR(255)   NULL,
    logo                          VARCHAR(512)   NULL,
    description                   VARCHAR(MAX)   NULL,
    slogan                        VARCHAR(500)   NULL,
    supplierNumber                VARCHAR(50)    NULL,
    priority                      BIGINT         NOT NULL,
    useOxomiPreviewImages         BIT            NOT NULL,
    oxomiSupplierNumber           BIT            NOT NULL,
    manufacturerName              VARCHAR(255)   NULL,
    manufacturerPostalAddress     VARCHAR(500)   NULL,
    manufacturerElectronicAddress VARCHAR(255)   NULL,
    distributorName               VARCHAR(255)   NULL,
    distributorPostalAddress      VARCHAR(500)   NULL,
    distributorElectronicAddress  VARCHAR(255)   NULL,
    changeDate                    DATETIME2      NULL
);
CREATE INDEX idx_brands_changedate ON brands(changeDate);

CREATE TABLE featuresettings (
    code                 VARCHAR(255) NOT NULL PRIMARY KEY,
    type                 VARCHAR(20)  NOT NULL,
    label                VARCHAR(255) NULL,
    priority             INT          NOT NULL,
    showInDetails        BIT          NOT NULL,
    showInList           BIT          NOT NULL,
    showAsFilter         BIT          NOT NULL,
    noRangeFilter        BIT          NOT NULL,
    useAsContent         BIT          NOT NULL,
    useAsExtendedContent BIT          NOT NULL,
    showInTooltip        BIT          NOT NULL,
    characteristic       BIT          NOT NULL,
    multiple             BIT          NOT NULL,
    changeDate           DATETIME2    NULL
);
CREATE INDEX idx_featuresettings_changedate ON featuresettings(changeDate);

CREATE TABLE catalogs (
    name        VARCHAR(255) NOT NULL PRIMARY KEY,
    visibleName VARCHAR(255) NULL,
    logo        VARCHAR(512) NULL,
    offer       BIT          NOT NULL,
    partnerRole VARCHAR(255) NULL,
    validFrom   DATE         NULL,
    validUntil  DATE         NULL,
    language    VARCHAR(2)   NULL,
    changeDate  DATETIME2    NULL
);
CREATE INDEX idx_catalogs_changedate ON catalogs(changeDate);

CREATE TABLE [groups] (
    code       VARCHAR(255) NOT NULL PRIMARY KEY,
    name       VARCHAR(255) NULL,
    image      VARCHAR(512) NULL,
    parent     VARCHAR(255) NULL,
    type       VARCHAR(30)  NOT NULL,
    brand      VARCHAR(50)  NULL,
    priority   INT          NOT NULL,
    cssClass   VARCHAR(255) NULL,
    changeDate DATETIME2    NULL
);
CREATE INDEX idx_groups_changedate ON [groups](changeDate);

CREATE TABLE grouptexts (
    [group]    VARCHAR(255)  NOT NULL,
    type       VARCHAR(50)   NOT NULL,
    text       VARCHAR(MAX)  NOT NULL,
    changeDate DATETIME2     NULL
);
CREATE INDEX idx_grouptexts_group ON grouptexts([group]);
CREATE INDEX idx_grouptexts_changedate ON grouptexts(changeDate);

CREATE TABLE quantityunits (
    code         VARCHAR(255) NOT NULL PRIMARY KEY,
    shortName    VARCHAR(255) NULL,
    unitName     VARCHAR(255) NULL,
    alias1       VARCHAR(255) NULL,
    alias2       VARCHAR(255) NULL,
    alias3       VARCHAR(255) NULL,
    alias4       VARCHAR(255) NULL,
    alias5       VARCHAR(255) NULL,
    alias6       VARCHAR(255) NULL,
    standardCode VARCHAR(255) NULL,
    erpCode      VARCHAR(255) NULL,
    changeDate   DATETIME2    NULL
);
CREATE INDEX idx_quantityunits_changedate ON quantityunits(changeDate);

CREATE TABLE variants (
    code                      VARCHAR(255)  NOT NULL PRIMARY KEY,
    name                      VARCHAR(1024) NULL,
    previewImage              VARCHAR(512)  NULL,
    featureX                  VARCHAR(128)  NULL,
    featureY                  VARCHAR(128)  NULL,
    itemPreviewIsVariantImage BIT           NOT NULL,
    changeDate                DATETIME2     NULL
);
CREATE INDEX idx_variants_changedate ON variants(changeDate);

CREATE TABLE items (
    itemNumber            VARCHAR(50)    NOT NULL PRIMARY KEY,
    shortText             VARCHAR(MAX)   NOT NULL,
    previewImage          VARCHAR(512)   NULL,
    brand                 VARCHAR(50)    NULL,
    supplierNumber        VARCHAR(50)    NULL,
    ranking               BIGINT         NOT NULL,
    quantityUnit          VARCHAR(255)   NULL,
    priceQuantity         DECIMAL(20, 3) NOT NULL,
    minOrderQuantity      DECIMAL(20, 3) NOT NULL,
    orderStep             DECIMAL(20, 3) NOT NULL,
    ean                   VARCHAR(50)    NULL,
    supplierArticleNumber VARCHAR(50)    NULL,
    userCorrelationNumber VARCHAR(50)    NULL,
    model                 VARCHAR(50)    NULL,
    variant               VARCHAR(255)   NULL,
    classificationSystem  VARCHAR(50)    NULL,
    classificationClass   VARCHAR(50)    NULL,
    priority              BIGINT         NOT NULL,
    changeDate            DATETIME2      NOT NULL,
    deleted               BIT            NOT NULL
);
CREATE INDEX idx_items_changedate ON items(changeDate);

CREATE TABLE features (
    item             VARCHAR(50)   NOT NULL,
    feature          VARCHAR(128)  NOT NULL,
    value            VARCHAR(255)  NULL,
    value2           VARCHAR(255)  NULL,
    valueDescription VARCHAR(255)  NULL,
    unit             VARCHAR(50)   NULL
);
CREATE INDEX idx_features_item ON features(item);

CREATE TABLE additionaltexts (
    item     VARCHAR(50)  NOT NULL,
    language VARCHAR(3)   NOT NULL,
    type     VARCHAR(50)  NOT NULL,
    text     VARCHAR(MAX) NOT NULL
);
CREATE INDEX idx_additionaltexts_item ON additionaltexts(item);

CREATE TABLE attachments (
    item        VARCHAR(50)   NOT NULL,
    type        VARCHAR(50)   NOT NULL,
    [file]      VARCHAR(1024) NOT NULL,
    languages   VARCHAR(60)   NULL,
    description VARCHAR(255)  NULL,
    priority    INT           NOT NULL
);
CREATE INDEX idx_attachments_item ON attachments(item);

CREATE TABLE itemrelations (
    sourceItem          VARCHAR(50)    NOT NULL,
    targetItem          VARCHAR(50)    NOT NULL,
    relationType        VARCHAR(30)    NOT NULL,
    priority            INT            NOT NULL,
    recommendedQuantity DECIMAL(20, 3) NULL,
    [group]             VARCHAR(50)    NULL
);
CREATE INDEX idx_itemrelations_source ON itemrelations(sourceItem);
CREATE INDEX idx_itemrelations_target ON itemrelations(targetItem);

CREATE TABLE catalogitemmappings (
    catalog           VARCHAR(255)   NOT NULL,
    item              VARCHAR(50)    NOT NULL,
    catalogItemNumber VARCHAR(50)    NULL,
    price             DECIMAL(20, 3) NULL,
    discountGroup     VARCHAR(50)    NULL,
    PRIMARY KEY (catalog, item)
);
CREATE INDEX idx_catalogitemmappings_item ON catalogitemmappings(item);

CREATE TABLE pricescales (
    catalog        VARCHAR(255)   NOT NULL,
    item           VARCHAR(50)    NOT NULL,
    conditionValue DECIMAL(20, 3) NOT NULL,
    price          DECIMAL(20, 3) NULL,
    PRIMARY KEY (catalog, item, conditionValue)
);
CREATE INDEX idx_pricescales_item_catalog ON pricescales(item, catalog);

CREATE TABLE groupmappings (
    item    VARCHAR(50)  NOT NULL,
    [group] VARCHAR(255) NOT NULL,
    PRIMARY KEY (item, [group])
);
CREATE INDEX idx_groupmappings_group ON groupmappings([group]);
CREATE TABLE brands (
    code                          VARCHAR(50)    NOT NULL,
    name                          VARCHAR(255)   NULL,
    logo                          VARCHAR(512)   NULL,
    description                   TEXT           NULL,
    slogan                        VARCHAR(500)   NULL,
    supplierNumber                VARCHAR(50)    NULL,
    priority                      BIGINT         NOT NULL,
    useOxomiPreviewImages         TINYINT(1)     NOT NULL,
    oxomiSupplierNumber           TINYINT(1)     NOT NULL,
    manufacturerName              VARCHAR(255)   NULL,
    manufacturerPostalAddress     VARCHAR(500)   NULL,
    manufacturerElectronicAddress VARCHAR(255)   NULL,
    distributorName               VARCHAR(255)   NULL,
    distributorPostalAddress      VARCHAR(500)   NULL,
    distributorElectronicAddress  VARCHAR(255)   NULL,
    changeDate                    DATETIME       NULL,

    PRIMARY KEY (code),
    INDEX idx_brands_changedate (changeDate)
);

CREATE TABLE featuresettings (
    code                 VARCHAR(255) NOT NULL,
    type                 VARCHAR(20)  NOT NULL,
    label                VARCHAR(255) NULL,
    priority             INT          NOT NULL,
    showInDetails        TINYINT(1)   NOT NULL,
    showInList           TINYINT(1)   NOT NULL,
    showAsFilter         TINYINT(1)   NOT NULL,
    noRangeFilter        TINYINT(1)   NOT NULL,
    useAsContent         TINYINT(1)   NOT NULL,
    useAsExtendedContent TINYINT(1)   NOT NULL,
    showInTooltip        TINYINT(1)   NOT NULL,
    characteristic       TINYINT(1)   NOT NULL,
    multiple             TINYINT(1)   NOT NULL,
    changeDate           DATETIME     NULL,

    PRIMARY KEY (code),
    INDEX idx_featuresettings_changedate (changeDate)
);

CREATE TABLE catalogs (
    name            VARCHAR(255) NOT NULL,
    visibleName     VARCHAR(255) NULL,
    logo            VARCHAR(512) NULL,
    offer           TINYINT(1)   NOT NULL,
    partnerRole     VARCHAR(255) NULL,
    validFrom       DATE         NULL,
    validUntil      DATE         NULL,
    language        VARCHAR(2)   NULL,
    changeDate      DATETIME     NULL,

    PRIMARY KEY (name),
    INDEX idx_catalogs_changedate (changeDate)
);

CREATE TABLE `groups` (
    code       VARCHAR(255) NOT NULL,
    name       VARCHAR(255) NULL,
    image      VARCHAR(512) NULL,
    parent     VARCHAR(255) NULL,
    type       VARCHAR(30)  NOT NULL,
    brand      VARCHAR(50)  NULL,
    priority   INT          NOT NULL,
    cssClass   VARCHAR(255) NULL,
    changeDate DATETIME     NULL,

    PRIMARY KEY (code),
    INDEX idx_groups_changedate (changeDate)
);

CREATE TABLE grouptexts (
    `group`    VARCHAR(255) NOT NULL,
    type       VARCHAR(50)  NOT NULL,
    text       TEXT         NOT NULL,
    changeDate DATETIME     NULL,

    INDEX idx_grouptexts_group (`group`),
    INDEX idx_grouptexts_changedate (changeDate)
);

CREATE TABLE quantityunits (
    code         VARCHAR(255) NOT NULL,
    shortName    VARCHAR(255) NULL,
    unitName     VARCHAR(255) NULL,
    alias1       VARCHAR(255) NULL,
    alias2       VARCHAR(255) NULL,
    alias3       VARCHAR(255) NULL,
    alias4       VARCHAR(255) NULL,
    alias5       VARCHAR(255) NULL,
    alias6       VARCHAR(255) NULL,
    standardCode VARCHAR(255) NULL,
    erpCode      VARCHAR(255) NULL,
    changeDate   DATETIME     NULL,

    PRIMARY KEY (code),
    INDEX idx_quantityunits_changedate (changeDate)
);

CREATE TABLE variants (
    code                       VARCHAR(255)  NOT NULL,
    name                       VARCHAR(1024) NULL,
    previewImage               VARCHAR(512)  NULL,
    featureX                   VARCHAR(128)  NULL,
    featureY                   VARCHAR(128)  NULL,
    itemPreviewIsVariantImage  TINYINT(1)    NOT NULL,
    changeDate                 DATETIME      NULL,

    PRIMARY KEY (code),
    INDEX idx_variants_changedate (changeDate)
);

CREATE TABLE items (
    itemNumber              VARCHAR(50)    NOT NULL,
    shortText               TEXT           NOT NULL,
    previewImage            VARCHAR(512)   NULL,
    brand                   VARCHAR(50)    NULL,
    supplierNumber          VARCHAR(50)    NULL,
    ranking                 BIGINT         NOT NULL,
    quantityUnit            VARCHAR(255)   NULL,
    priceQuantity           DECIMAL(20, 3) NOT NULL,
    minOrderQuantity        DECIMAL(20, 3) NOT NULL,
    orderStep               DECIMAL(20, 3) NOT NULL,
    ean                     VARCHAR(50)    NULL,
    supplierArticleNumber   VARCHAR(50)    NULL,
    userCorrelationNumber   VARCHAR(50)    NULL,
    model                   VARCHAR(50)    NULL,
    variant                 VARCHAR(255)   NULL,
    classificationSystem    VARCHAR(50)    NULL,
    classificationClass     VARCHAR(50)    NULL,
    priority                BIGINT         NOT NULL,
    changeDate              DATETIME       NOT NULL,
    deleted                 TINYINT(1)     NOT NULL,

    PRIMARY KEY (itemNumber),
    INDEX idx_items_changedate (changeDate)
);

CREATE TABLE features (
    item             VARCHAR(50)  NOT NULL,
    feature          VARCHAR(128) NOT NULL,
    value            VARCHAR(255) NULL,
    value2           VARCHAR(255) NULL,
    valueDescription VARCHAR(255) NULL,
    unit             VARCHAR(50)  NULL,

    INDEX idx_features_item (item)
);

CREATE TABLE additionaltexts (
    item     VARCHAR(50) NOT NULL,
    language VARCHAR(3)  NOT NULL,
    type     VARCHAR(50) NOT NULL,
    text     TEXT        NOT NULL,

    INDEX idx_additionaltexts_item (item)
);

CREATE TABLE attachments (
    item        VARCHAR(50)   NOT NULL,
    type        VARCHAR(50)   NOT NULL,
    file        VARCHAR(1024) NOT NULL,
    languages   VARCHAR(60)   NULL,
    description VARCHAR(255)  NULL,
    priority    INT           NOT NULL,

    INDEX idx_attachments_item (item)
);

CREATE TABLE itemrelations (
    sourceItem          VARCHAR(50)    NOT NULL,
    targetItem          VARCHAR(50)    NOT NULL,
    relationType        VARCHAR(30)    NOT NULL,
    priority            INT            NOT NULL,
    recommendedQuantity DECIMAL(20, 3) NULL,
    `group`             VARCHAR(50)    NULL,

    INDEX idx_itemrelations_source (sourceItem),
    INDEX idx_itemrelations_target (targetItem)
);

CREATE TABLE catalogitemmappings (
    catalog           VARCHAR(255)   NOT NULL,
    item              VARCHAR(50)    NOT NULL,
    catalogItemNumber VARCHAR(50)    NULL,
    price             DECIMAL(20, 3) NULL,
    discountGroup     VARCHAR(50)    NULL,

    PRIMARY KEY (catalog, item),
    INDEX idx_catalogitemmappings_item (item)
);

CREATE TABLE pricescales (
    catalog        VARCHAR(255)   NOT NULL,
    item           VARCHAR(50)    NOT NULL,
    conditionValue DECIMAL(20, 3) NOT NULL,
    price          DECIMAL(20, 3) NULL,

    PRIMARY KEY (catalog, item, conditionValue),
    INDEX idx_pricescales_item_catalog (item, catalog)
);

CREATE TABLE groupmappings (
    item      VARCHAR(50)  NOT NULL,
    `group`   VARCHAR(255) NOT NULL,

    PRIMARY KEY (item, `group`),
    INDEX idx_groupmappings_group (`group`)
);
CREATE TABLE brands (
    code                          VARCHAR(50)    PRIMARY KEY,
    name                          VARCHAR(255),
    logo                          VARCHAR(512),
    description                   TEXT,
    slogan                        VARCHAR(500),
    supplierNumber                VARCHAR(50),
    priority                      BIGINT         NOT NULL,
    useOxomiPreviewImages         BOOLEAN        NOT NULL,
    oxomiSupplierNumber           BOOLEAN        NOT NULL,
    manufacturerName              VARCHAR(255),
    manufacturerPostalAddress     VARCHAR(500),
    manufacturerElectronicAddress VARCHAR(255),
    distributorName               VARCHAR(255),
    distributorPostalAddress      VARCHAR(500),
    distributorElectronicAddress  VARCHAR(255),
    changeDate                    TIMESTAMP
);
CREATE INDEX idx_brands_changedate ON brands(changeDate);

CREATE TABLE featuresettings (
    code                 VARCHAR(255) PRIMARY KEY,
    type                 VARCHAR(20)  NOT NULL,
    label                VARCHAR(255),
    priority             INTEGER      NOT NULL,
    showInDetails        BOOLEAN      NOT NULL,
    showInList           BOOLEAN      NOT NULL,
    showAsFilter         BOOLEAN      NOT NULL,
    noRangeFilter        BOOLEAN      NOT NULL,
    useAsContent         BOOLEAN      NOT NULL,
    useAsExtendedContent BOOLEAN      NOT NULL,
    showInTooltip        BOOLEAN      NOT NULL,
    characteristic       BOOLEAN      NOT NULL,
    multiple             BOOLEAN      NOT NULL,
    changeDate           TIMESTAMP
);
CREATE INDEX idx_featuresettings_changedate ON featuresettings(changeDate);

CREATE TABLE catalogs (
    name        VARCHAR(255) PRIMARY KEY,
    visibleName VARCHAR(255),
    logo        VARCHAR(512),
    offer       BOOLEAN      NOT NULL,
    partnerRole VARCHAR(255),
    validFrom   DATE,
    validUntil  DATE,
    language    VARCHAR(2),
    changeDate  TIMESTAMP
);
CREATE INDEX idx_catalogs_changedate ON catalogs(changeDate);

CREATE TABLE "groups" (
    code       VARCHAR(255) PRIMARY KEY,
    name       VARCHAR(255),
    image      VARCHAR(512),
    parent     VARCHAR(255),
    type       VARCHAR(30)  NOT NULL,
    brand      VARCHAR(50),
    priority   INTEGER      NOT NULL,
    cssClass   VARCHAR(255),
    changeDate TIMESTAMP
);
CREATE INDEX idx_groups_changedate ON "groups"(changeDate);

CREATE TABLE grouptexts (
    "group"    VARCHAR(255) NOT NULL,
    type       VARCHAR(50)  NOT NULL,
    text       TEXT         NOT NULL,
    changeDate TIMESTAMP
);
CREATE INDEX idx_grouptexts_group ON grouptexts("group");
CREATE INDEX idx_grouptexts_changedate ON grouptexts(changeDate);

CREATE TABLE quantityunits (
    code         VARCHAR(255) PRIMARY KEY,
    shortName    VARCHAR(255),
    unitName     VARCHAR(255),
    alias1       VARCHAR(255),
    alias2       VARCHAR(255),
    alias3       VARCHAR(255),
    alias4       VARCHAR(255),
    alias5       VARCHAR(255),
    alias6       VARCHAR(255),
    standardCode VARCHAR(255),
    erpCode      VARCHAR(255),
    changeDate   TIMESTAMP
);
CREATE INDEX idx_quantityunits_changedate ON quantityunits(changeDate);

CREATE TABLE variants (
    code                      VARCHAR(255)  PRIMARY KEY,
    name                      VARCHAR(1024),
    previewImage              VARCHAR(512),
    featureX                  VARCHAR(128),
    featureY                  VARCHAR(128),
    itemPreviewIsVariantImage BOOLEAN       NOT NULL,
    changeDate                TIMESTAMP
);
CREATE INDEX idx_variants_changedate ON variants(changeDate);

CREATE TABLE items (
    itemNumber            VARCHAR(50)    PRIMARY KEY,
    shortText             TEXT           NOT NULL,
    previewImage          VARCHAR(512),
    brand                 VARCHAR(50),
    supplierNumber        VARCHAR(50),
    ranking               BIGINT         NOT NULL,
    quantityUnit          VARCHAR(255),
    priceQuantity         NUMERIC(20, 3) NOT NULL,
    minOrderQuantity      NUMERIC(20, 3) NOT NULL,
    orderStep             NUMERIC(20, 3) NOT NULL,
    ean                   VARCHAR(50),
    supplierArticleNumber VARCHAR(50),
    userCorrelationNumber VARCHAR(50),
    model                 VARCHAR(50),
    variant               VARCHAR(255),
    classificationSystem  VARCHAR(50),
    classificationClass   VARCHAR(50),
    priority              BIGINT         NOT NULL,
    changeDate            TIMESTAMP      NOT NULL,
    deleted               BOOLEAN        NOT NULL
);
CREATE INDEX idx_items_changedate ON items(changeDate);

CREATE TABLE features (
    item             VARCHAR(50)  NOT NULL,
    feature          VARCHAR(128) NOT NULL,
    value            VARCHAR(255),
    value2           VARCHAR(255),
    valueDescription VARCHAR(255),
    unit             VARCHAR(50)
);
CREATE INDEX idx_features_item ON features(item);

CREATE TABLE additionaltexts (
    item     VARCHAR(50) NOT NULL,
    language VARCHAR(3)  NOT NULL,
    type     VARCHAR(50) NOT NULL,
    text     TEXT        NOT NULL
);
CREATE INDEX idx_additionaltexts_item ON additionaltexts(item);

CREATE TABLE attachments (
    item        VARCHAR(50)   NOT NULL,
    type        VARCHAR(50)   NOT NULL,
    file        VARCHAR(1024) NOT NULL,
    languages   VARCHAR(60),
    description VARCHAR(255),
    priority    INTEGER       NOT NULL
);
CREATE INDEX idx_attachments_item ON attachments(item);

CREATE TABLE itemrelations (
    sourceItem          VARCHAR(50)    NOT NULL,
    targetItem          VARCHAR(50)    NOT NULL,
    relationType        VARCHAR(30)    NOT NULL,
    priority            INTEGER        NOT NULL,
    recommendedQuantity NUMERIC(20, 3),
    "group"             VARCHAR(50)
);
CREATE INDEX idx_itemrelations_source ON itemrelations(sourceItem);
CREATE INDEX idx_itemrelations_target ON itemrelations(targetItem);

CREATE TABLE catalogitemmappings (
    catalog           VARCHAR(255)   NOT NULL,
    item              VARCHAR(50)    NOT NULL,
    catalogItemNumber VARCHAR(50),
    price             NUMERIC(20, 3),
    discountGroup     VARCHAR(50),
    PRIMARY KEY (catalog, item)
);
CREATE INDEX idx_catalogitemmappings_item ON catalogitemmappings(item);

CREATE TABLE pricescales (
    catalog        VARCHAR(255)   NOT NULL,
    item           VARCHAR(50)    NOT NULL,
    conditionValue NUMERIC(20, 3) NOT NULL,
    price          NUMERIC(20, 3),
    PRIMARY KEY (catalog, item, conditionValue)
);
CREATE INDEX idx_pricescales_item_catalog ON pricescales(item, catalog);

CREATE TABLE groupmappings (
    item    VARCHAR(50)  NOT NULL,
    "group" VARCHAR(255) NOT NULL,
    PRIMARY KEY (item, "group")
);
CREATE INDEX idx_groupmappings_group ON groupmappings("group");