Tento výukový program poskytuje úplné kroky k návrhu schématu databáze systému řízení zásob pro správu dodavatelů, prodejců, položek, skladu položek, nákupních objednávek a objednávek zákazníků.
Poznámky :Podniky v maloobchodě a výrobě běžně používají systémy zásob. Mezi případy široce rozšířeného použití v jiných odvětvích lze toto schéma databáze použít například pro správu zásob v nemocnicích ke zvýšení efektivity dodavatelských řetězců zdravotní péče a snížení plýtvání léky.
Diagram vztahů entit nebo návrh vizuální databáze je uveden níže.
Databáze správy zásob
Můžete také navštívit oblíbené výukové programy včetně Jak nainstalovat MySQL 8 na Ubuntu 20.04 LTS, Jak nainstalovat MySQL 8 na Windows, Jak nainstalovat MySQL Workbench na Ubuntu, Jak nainstalovat MySQL 8 s Workbenchem na Windows 10, Databáze RBAC v MySql, Databáze blogů v MySql, kvízová databáze v MySQL, databáze anket a průzkumů v MySQL, databáze nákupních košíků online v MySQL a naučte se základní SQL dotazy v MySQL.
Databáze zásob
Úplně prvním krokem je vytvoření databáze zásob. Lze jej vytvořit pomocí dotazu, jak je uvedeno níže.
CREATE SCHEMA `inventory` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Použil jsem znakovou sadu utf8mb4 pro podporu široké škály znaků.
Tabulka uživatelů
V této části navrhneme Tabulku uživatelů k ukládání uživatelských informací. Uživatelé mohou spravovat své vlastní profily. Uživatelé také mohou používat aplikaci podle rolí, které jim byly přiděleny. Můžete se také podívat na výukový program Databáze RBAC v MySql a implementovat kompletní systém RBAC pro správu rolí a oprávnění. Níže je uveden popis všech sloupců tabulky uživatelů.
ID | Jedinečné ID k identifikaci uživatele. |
ID role | Role uživatele. Může to být správce, dodavatel, prodejce a zákazník. |
Křestní jméno | Křestní jméno uživatele. |
Prostřední jméno | Prostřední jméno uživatele. |
Příjmení | Příjmení uživatele. |
Mobil | Číslo mobilního telefonu uživatele. Lze jej použít pro účely přihlášení a registrace. |
E-mailová adresa uživatele. Lze jej použít pro účely přihlášení a registrace. | |
Hašování hesla | Hash hash hesla vygenerovaný příslušným algoritmem. Musíme se vyhnout ukládání jednoduchých nebo šifrovaných hesel. |
Registrováno na | Tento sloupec lze použít k výpočtu životnosti uživatele s aplikací. |
Poslední přihlášení | Lze jej použít k identifikaci posledního přihlášení uživatele. |
Úvod | Stručné představení uživatele. |
Profil | Podrobnosti o uživateli. |
Tabulka uživatelů s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`roleId` SMALLINT NOT NULL,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`username` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_username` (`username` ASC),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );
Tabulka produktů
V této části navrhneme Tabulku produktů pro uložení dat o produktu. Níže je uveden popis všech sloupců tabulky produktů.
ID | Jedinečné ID k identifikaci produktu. |
Název | Název produktu, který se má zobrazit v inventáři. |
Shrnutí | Souhrn, ve kterém jsou zmíněny hlavní body. |
Typ | Typ pro rozlišení mezi různými typy produktů. |
Vytvořeno v | Ukládá datum a čas, kdy byl produkt vytvořen. |
Aktualizováno dne | Ukládá datum a čas, kdy je produkt aktualizován. |
Obsah | Sloupec používaný k uložení dalších podrobností o produktu. |
Tabulka produktů s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`product` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);
Meta produktu
Tabulku metadat produktu lze použít k uložení dalších informací o produktech včetně adresy URL banneru produktu atd. Níže je uveden popis všech sloupců tabulky metadat produktu.
ID | Jedinečné ID k identifikaci meta produktu. |
ID produktu | ID produktu k identifikaci nadřazeného produktu. |
Klíč | Klíč identifikující meta. |
Obsah | Sloupec používaný k uložení metadat produktu. |
Metatabulka produktu s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`product_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_product` (`productId` ASC),
UNIQUE INDEX `uq_product_meta` (`productId` ASC, `key` ASC),
CONSTRAINT `fk_meta_product`
FOREIGN KEY (`productId`)
REFERENCES `inventory`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Tabulka kategorií a tabulka kategorií produktů
V této části navrhneme Tabulku kategorií a Tabulka kategorií produktů k ukládání kategorií produktů a jejich mapování. Níže je uveden popis všech sloupců tabulky kategorií.
ID | Jedinečné ID k identifikaci kategorie. |
ID rodiče | ID rodiče k identifikaci nadřazené kategorie. |
Název | Název kategorie. |
Název metadat | Název metadat, který se má použít pro název prohlížeče a SEO. |
Slimák | Slug kategorie tvořící adresu URL. |
Obsah | Sloupec používaný k uložení podrobností kategorie. |
Tabulka kategorií s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`category` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL DEFAULT NULL,
`slug` VARCHAR(100) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`));
ALTER TABLE `inventory`.`category`
ADD INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `inventory`.`category`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`parentId`)
REFERENCES `inventory`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Níže je uveden popis všech sloupců tabulky kategorií produktů.
ID produktu | ID produktu k identifikaci produktu. |
ID kategorie | ID kategorie k identifikaci kategorie. |
Tabulka kategorií produktů s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`product_category` (
`productId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
PRIMARY KEY (`productId`, `categoryId`),
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_product` (`productId` ASC),
CONSTRAINT `fk_pc_product`
FOREIGN KEY (`productId`)
REFERENCES `inventory`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `inventory`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Tabulka značek
V této části navrhneme Tabulku značek pro uložení údajů o značce. Níže je uveden popis všech sloupců tabulky značek.
ID | Jedinečné ID k identifikaci značky. |
Název | Název značky, který se má zobrazit v inventáři. |
Shrnutí | Souhrn uvádí nejdůležitější body. |
Vytvořeno v | Ukládá datum a čas, kdy byl produkt vytvořen. |
Aktualizováno dne | Ukládá datum a čas, kdy je produkt aktualizován. |
Obsah | Sloupec používaný k uložení dalších podrobností o značce. |
Tabulka značek s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`brand` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`summary` TINYTEXT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);
Tabulka objednávek
Tato část poskytuje tabulku pro správu objednávek zásob. Objednávka může být spojena s Dodavatelem nebo Zákazníkem. Níže je uveden popis všech sloupců tabulky objednávek.
ID | Jedinečné ID k identifikaci objednávky. |
ID uživatele | ID uživatele k identifikaci dodavatele nebo zákazníka spojeného s objednávkou. |
Typ | Typ objednávky k rozlišení mezi nákupní objednávkou a objednávkou zákazníka. |
Stav | Stav objednávky může být Nová, Pokladna, Zaplaceno, Nezdařilo se, Odesláno, Doručeno, Vráceno a Dokončeno. |
Dílčí součet | Celková cena položek objednávky. |
Sleva na položku | Celková sleva položek objednávky. |
Daně | Daň z položek objednávky. |
Doprava | Poplatky za dopravu položek objednávky. |
Celkem | Celková cena objednávky včetně daně a dopravy. Nezahrnuje slevu na položky. |
Propagace | Propagační kód objednávky. |
Sleva | Celková sleva z Objednávky na základě propagačního kódu nebo slevy obchodu. |
Celkový součet | Celkový součet objednávky, který má kupující zaplatit. |
Vytvořeno v | Ukládá datum a čas, kdy byla objednávka vytvořena. |
Aktualizováno dne | Ukládá datum a čas, kdy je objednávka aktualizována. |
Obsah | Sloupec používaný k uložení dalších podrobností objednávky. |
Tabulka objednávek s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`order` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`subTotal` FLOAT NOT NULL DEFAULT 0,
`itemDiscount` FLOAT NOT NULL DEFAULT 0,
`tax` FLOAT NOT NULL DEFAULT 0,
`shipping` FLOAT NOT NULL DEFAULT 0,
`total` FLOAT NOT NULL DEFAULT 0,
`promo` VARCHAR(50) NULL DEFAULT NULL,
`discount` FLOAT NOT NULL DEFAULT 0,
`grandTotal` FLOAT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_order_user` (`userId` ASC),
CONSTRAINT `fk_order_user`
FOREIGN KEY (`userId`)
REFERENCES `inventory`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Tabulka adres
Tato část obsahuje tabulku pro správu adresy uživatele nebo objednávky. Adresu uživatele lze použít k uložení adresy spojené s uživatelem. Adresu objednávky lze použít k uložení doručovací adresy pro objednávky doručení domů. Níže je uveden popis všech sloupců tabulky adres.
ID | Jedinečné ID k identifikaci adresy. |
ID uživatele | ID uživatele k identifikaci uživatele spojeného s adresou. |
ID objednávky | ID objednávky k identifikaci objednávky spojené s adresou. |
Křestní jméno | Křestní jméno uživatele. |
Prostřední jméno | Prostřední jméno uživatele. |
Příjmení | Příjmení uživatele. |
Mobil | Číslo mobilního telefonu uživatele. |
E-mail uživatele. | |
Řádek 1 | První řádek pro uložení adresy. |
Řádek 2 | Druhý řádek pro uložení adresy. |
Město | Město adresy. |
Provincie | Provincie adresy. |
Země | Země adresy. |
Vytvořeno v | Ukládá datum a čas, kdy byla objednávka vytvořena. |
Aktualizováno dne | Ukládá datum a čas, kdy je objednávka aktualizována. |
Tabulka adres s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`address` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`orderId` BIGINT NULL DEFAULT NULL,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`line1` VARCHAR(50) NULL DEFAULT NULL,
`line2` VARCHAR(50) NULL DEFAULT NULL,
`city` VARCHAR(50) NULL DEFAULT NULL,
`province` VARCHAR(50) NULL DEFAULT NULL,
`country` VARCHAR(50) NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_address_user` (`userId` ASC),
CONSTRAINT `fk_address_user`
FOREIGN KEY (`userId`)
REFERENCES `inventory`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `inventory`.`address`
ADD INDEX `idx_address_order` (`orderId` ASC);
ALTER TABLE `inventory`.`address`
ADD CONSTRAINT `fk_address_order`
FOREIGN KEY (`orderId`)
REFERENCES `inventory`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabulka položek
V této sekci navrhneme Položku Tabulka pro uložení podrobností o položce. Položka představuje položky na skladě a zakoupené od dodavatelů. Níže je uveden popis všech sloupců tabulky položek.
ID | Jedinečné ID k identifikaci položky. |
ID produktu | ID produktu k identifikaci produktu spojeného s položkou inventáře. |
ID značky | ID značky k identifikaci značky spojené s položkou inventáře. |
ID dodavatele | ID dodavatele k identifikaci dodavatele spojeného s položkou inventáře. |
ID objednávky | ID objednávky k identifikaci objednávky spojené s položkou inventáře. |
Vytvořil | ID uživatele k identifikaci uživatele, který přidal položku inventáře. |
Aktualizováno | ID uživatele k identifikaci uživatele, který aktualizoval položku inventáře. |
Skladová jednotka | ID k identifikaci položky na skladě. |
Maximální maloobchodní cena | Tištěná cena produktu spojeného s položkou. |
Sleva | Slevu poskytuje dodavatel. |
Cena | Cena, za kterou byl produkt zakoupen. |
Množství | Celkové množství přijaté na skladě. |
Prodáno | Celkové množství prodané zákazníkům. |
K dispozici | Množství, které je k dispozici na skladě. |
Vadné | Celkový počet vadných položek buď přijatých na skladě nebo vrácených zákazníky. |
Vytvořeno v | Ukládá datum a čas, kdy byla objednávka vytvořena. |
Aktualizováno dne | Ukládá datum a čas, kdy je objednávka aktualizována. |
Tabulka položek s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`brandId` BIGINT NOT NULL,
`supplierId` BIGINT NOT NULL,
`orderId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`mrp` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`price` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`sold` SMALLINT(6) NOT NULL DEFAULT 0,
`available` SMALLINT(6) NOT NULL DEFAULT 0,
`defective` SMALLINT(6) NOT NULL DEFAULT 0,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_item_product` (`productId` ASC),
CONSTRAINT `fk_item_product`
FOREIGN KEY (`productId`)
REFERENCES `inventory`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `inventory`.`item`
ADD INDEX `idx_item_brand` (`brandId` ASC);
ALTER TABLE `inventory`.`item`
ADD CONSTRAINT `fk_item_brand`
FOREIGN KEY (`brandId`)
REFERENCES `inventory`.`brand` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `inventory`.`item`
ADD INDEX `idx_item_user` (`supplierId` ASC);
ALTER TABLE `inventory`.`item`
ADD CONSTRAINT `fk_item_user`
FOREIGN KEY (`supplierId`)
REFERENCES `inventory`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `inventory`.`item`
ADD INDEX `idx_item_order` (`orderId` ASC);
ALTER TABLE `inventory`.`item`
ADD CONSTRAINT `fk_item_order`
FOREIGN KEY (`orderId`)
REFERENCES `inventory`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabulka položek objednávky
Tato část poskytuje tabulku pro správu položek objednávek zakoupených zákazníky. Níže je uveden popis všech sloupců tabulky položek objednávky.
ID | Jedinečné ID k identifikaci objednané položky. |
ID produktu | ID produktu k identifikaci produktu přidruženého k objednané položce. |
ID položky | ID položky k identifikaci položky přidružené k objednané položce. |
ID objednávky | ID objednávky k identifikaci objednávky spojené s objednanou položkou. |
SKU | SKU produktu při jeho nákupu. |
Cena | Cena produktu při jeho nákupu. |
Sleva | Sleva na produkt při jeho nákupu. |
Množství | Množství produktu vybrané uživatelem. |
Vytvořeno v | Ukládá datum a čas, kdy je objednaná položka vytvořena. |
Aktualizováno dne | Ukládá datum a čas, kdy je objednaná položka aktualizována. |
Obsah | Sloupec používaný k uložení dalších podrobností o objednané položce. |
Tabulka položek objednávky s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`order_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`itemId` BIGINT NOT NULL,
`orderId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_order_item_product` (`productId` ASC),
CONSTRAINT `fk_order_item_product`
FOREIGN KEY (`productId`)
REFERENCES `inventory`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `inventory`.`order_item`
ADD INDEX `idx_order_item_item` (`itemId` ASC);
ALTER TABLE `inventory`.`order_item`
ADD CONSTRAINT `fk_order_item_item`
FOREIGN KEY (`itemId`)
REFERENCES `inventory`.`item` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `inventory`.`order_item`
ADD INDEX `idx_order_item_order` (`orderId` ASC);
ALTER TABLE `inventory`.`order_item`
ADD CONSTRAINT `fk_order_item_order`
FOREIGN KEY (`orderId`)
REFERENCES `inventory`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabulka transakcí
Potřebujeme také tabulku transakcí, abychom mohli sledovat platby za objednávky provedené kupujícím a pro vedení účetnictví. Stejnou tabulku můžeme také použít k zaznamenání částečného nebo úplného vrácení peněz za objednávku. Níže je uveden popis všech sloupců tabulky transakcí.
ID | Jedinečné ID k identifikaci transakce. |
ID uživatele | ID uživatele k identifikaci uživatele spojeného s transakcí. |
ID objednávky | ID objednávky k identifikaci objednávky spojené s transakcí. |
Kód | ID platby poskytnuté platební bránou. |
Typ | Typ transakce objednávky může být Kreditní nebo Debetní. |
Režim | Režim transakce objednávky může být offline, na dobírku, šek, směnka, kabelové připojení a online. |
Stav | Stav transakce objednávky může být Nová, Zrušená, Neúspěšná, Nevyřízená, Odmítnutá, Odmítnutá a Úspěšná. |
Vytvořeno v | Ukládá datum a čas, kdy je transakce objednávky vytvořena. |
Aktualizováno dne | Ukládá datum a čas, kdy je transakce objednávky aktualizována. |
Obsah | Sloupec používaný k uložení dalších podrobností o transakci. |
Tabulka transakcí s příslušnými omezeními je uvedena níže.
CREATE TABLE `inventory`.`transaction` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`orderId` BIGINT NOT NULL,
`code` VARCHAR(100) NOT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`mode` SMALLINT(6) NOT NULL DEFAULT 0,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_transaction_user` (`userId` ASC),
CONSTRAINT `fk_transaction_user`
FOREIGN KEY (`userId`)
REFERENCES `inventory`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `inventory`.`transaction`
ADD INDEX `idx_transaction_order` (`orderId` ASC);
ALTER TABLE `inventory`.`transaction`
ADD CONSTRAINT `fk_transaction_order`
FOREIGN KEY (`orderId`)
REFERENCES `inventory`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Shrnutí
V tomto tutoriálu jsme diskutovali o návrhu databáze systému správy zásob pro ukládání uživatelů a správu inventáře produktů. Poskytlo také návrh databáze pro správu nákupních objednávek a objednávek zákazníků.
Do diskuse můžete zasílat své komentáře. Možná vás bude zajímat i návrh databáze aplikací Blog a Poll &Survey. Kompletní schéma databáze je k dispozici také na GitHubu.