Návrh databáze

Rudolf Svátek 2017-08-16 14:49

Půjde nám o jednoduchou aplikaci, která bude umět uchovávat informace o klientech, chceš-li o projektech a jejich heslech. Dejme tomu, že mám klienta - firma ABC. K němu mám možnost uchovávat spousty informací jako telefony, emaily, poštovní adresy, IČO, DIČ, kontaktní osoby atd. To je ale spíš práce pro nějaké CRM. Mě bude stačit znát jeho název, email a telefon.

Klient může mít více hesel - FTP, administrace webu, databáze apod. Potřebuji tedy rozlišit různé typy hesel. Na to budu mít zvlášť tabulku.

Každé heslo, které si chci uložit, bude patřit nějakému klientovi, bude daného typu a ukládám si typické údaje - uživatel, heslo, URL, název databáze, název serveru apod.

No a klasika - s aplikací mohou pracovat jen pověření uživatelé. Potřebuji tedy jejich tabulku.

Takže tabulka klientů:

CREATE TABLE `clients` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `client_name` varchar(125) COLLATE utf8mb4_czech_ci NOT NULL,
  `client_email` varchar(125) COLLATE utf8mb4_czech_ci NOT NULL,
  `client_phone` varchar(20) COLLATE utf8mb4_czech_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;

Tabulka typů hesel:

CREATE TABLE `password_types` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `typ` varchar(25) COLLATE utf8mb4_czech_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;

Tabulka uživatelů:

CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(25) COLLATE utf8mb4_czech_ci NOT NULL,
  `password` varchar(125) COLLATE utf8mb4_czech_ci NOT NULL,
  `name` varchar(125) COLLATE utf8mb4_czech_ci NOT NULL,
  `email` varchar(125) COLLATE utf8mb4_czech_ci DEFAULT NULL,
  `role` varchar(25) COLLATE utf8mb4_czech_ci NOT NULL,
  `passwordHash` varchar(125) COLLATE utf8mb4_czech_ci DEFAULT NULL,
  `passwordHashValidity` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;

Tabulka hesel:

CREATE TABLE `passwords` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `client_id` int(10) unsigned NOT NULL,
  `password_type_id` int(10) unsigned NOT NULL,
  `password_name` varchar(50) COLLATE utf8mb4_czech_ci NOT NULL,
  `url` varchar(250) COLLATE utf8mb4_czech_ci NOT NULL,
  `port` int(6) DEFAULT NULL,
  `username` varchar(125) COLLATE utf8mb4_czech_ci NOT NULL,
  `password` varchar(125) COLLATE utf8mb4_czech_ci NOT NULL,
  `database` varchar(50) COLLATE utf8mb4_czech_ci NOT NULL,
  `host` varchar(250) COLLATE utf8mb4_czech_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `client_id` (`client_id`),
  KEY `password_type_id` (`password_type_id`),
  CONSTRAINT `passwords_ibfk_1` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`) ON DELETE CASCADE,
  CONSTRAINT `passwords_ibfk_2` FOREIGN KEY (`password_type_id`) REFERENCES `password_types` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_czech_ci;

Pro snazší manipulaci se záznamy si můžeme vytvořit pohled, který nám spojí tabulky klientů, typů hesel a samotných hesel:

create view vwpasswords
select `p`.*, `c`.`client_name` AS `client_name`,`pt`.`typ` AS `password_type` 
from `passwords` AS `p` 
inner join `clients` AS `c` on (`c`.`id` = `p`.`client_id`) 
inner join `password_types` AS `pt` on(`pt`.`id` = `p`.`password_type_id`) 

No, a to je vše přátelé. Příště si stáhneme sandbox Nette a nějaké další věci, co nám pomůžou při stavbě aplikace.

Aplikace na správu hesel  Následující kapitola

Stažení sandboxu Nette

 

Komentáře (0)

Přidej svůj komentář

O mně

Jmenuji se Rudolf Svátek. Jsem lektor výpočetní techniky a PHP programátor. Stavím firemní stránky a eshopy. Aby se mi to dělalo pohodlně, vytvořil jsem redakční systém RS::RS, který ti tu nabízím k použití.

Rychlý kontakt na mně

  • Rudolf Svátek
  • Telefon:
    +420 777 828 353
  • Email:
  • Adresa:
    Josefa Hory 1097/5
    736 01 Havířov
    ČR



Tyto stránky používají Cookies. Používáním stránek s tím souhlasíte Další informace