Tento článek je primárně napsán pro začátečníky. Přesto pokrývá některé zajímavé a často zapomenuté koncepty návrhu databází, které jsou stejně atraktivní pro odborníky na databáze SQL.
Aktuální část se zaměřuje na koncepty návrhu databází a jejich mapování na tabulky, sloupce a vztahy SQL databáze. Pokud rozumíte pozadí databází a nástrojů, které se chystáme použít, s jistotou navrhnete svou první databázi SQL.
Předpoklady
Než budeme pokračovat, ujistěte se, že máte následující věci:
- Na vašem počítači je nainstalován SQL Server 2016/2017/2019 Express/Developer Edition
- SSMS (SQL Server Management Studio) je nainstalováno
Také musíte mít základní znalosti databází a výše uvedených nástrojů.
Není problém, pokud nemáte nejnovější verze SQL Serveru a SSMS. Důrazně se však doporučuje mít k dispozici novější verze, ne-li ty nejnovější. Potřebné verze můžete získat z níže uvedených zdrojů:
- Stáhněte si SQL Server 2017 Developer Edition.
- Stáhněte si SQL Server 2019 (případně získáte nejnovější verzi SQL Server Express/Developer).
- Nebo si stáhněte bezplatnou specializovanou edici Developer nebo Express SQL Server.
- Stáhněte si SSMS (SQL Server Management Studio)
Všimněte si, že všechny tyto odkazy v době psaní tohoto článku fungují dobře. Pokud se je Microsoft rozhodne nahradit, stáhněte si novější verzi, která je v té době dostupná.
O návrhu databáze SQL
Chcete-li začít navrhovat svou databázi SQL pomocí SQL Server Management Studio (SSMS), musíte mít v hlavě nějaký plán návrhu.
Bez znalosti základních konceptů návrhu databází to není snadné. Jakmile však získáte tyto koncepty a jejich implementaci, přirozeně začnete dodržovat principy návrhu. Je to běžné u téměř všech vývojářů databází.
Nejprve si projdeme několik základních konceptů návrhu databáze. Není snadné pokrýt je všechny v jednom článku, ale potřebujeme něco, od čeho začít.
Typickou databázi chápeme z hlediska následujících věcí:
- Entity
- Atributy
- Vztahy
Co je to entita?
Entita je cokoli, co by si firma nebo jednotlivec přál uložit do databáze. Například:
- Zákazník.
- Objednat.
- Produkt.
Můžeme říci, že Zákazník je entita, pokud ji chce podnik uložit do databázové struktury pro transakční, analytické a reportovací účely. Podobně Objednávka vložil Zákazník je také entita, pokud podnik chce tyto informace vidět. Tyto informace proto musí být součástí databáze.
Nicméně Objednávka nedává velký smysl bez produktu . Produkt nabízený zákazníkovi je rovněž subjektem.
Jak je entita mapována do databáze?
Z pohledu databáze lze entitu namapovat na tabulku. Pokud tedy podnik potřebuje entity Zákazník, Objednávka a Produkt, vývojář databáze je může zmapovat jako tři tabulky.
Co je to atribut?
Atribut je popis entity. Například:
- Jméno zákazníka
- Typ objednávky
- Název produktu
Pokud je zákazníkem subjekt, jméno zákazníka (CustomerName ) je atribut. Tento atribut popisuje naši entitu (Zákazník ). Podobně OrderType je atributem Objednávky entity a Název produktu je atributem produktu entity.
Jak je atribut mapován do databáze?
Atribut, jako je CustomerName, popisuje Zákazník tabulky a lze je namapovat na sloupec v této tabulce.
Entita s více atributy
Je v pořádku, když má entita více atributů. Proto můžeme mít v tabulce (entitě) mnoho sloupců (atributů).
Vztahy entit
Entita může být spojena s jinou entitou prostřednictvím vztahů. Tabulka může souviset s jinou tabulkou. Existuje mnoho typů entit nebo tabulkových vztahů:
Vztah zákazník-objednávka (jedna k mnoha)
Zákazník (entita/tabulka) může být spojen s objednávkou (entita/tabulka) z následujících důvodů:
- Zákazník může zadat jednu objednávku.
- Zákazník může zadat mnoho objednávek.
Opak je také pravdou:
- Jeden zákazník může zadat mnoho objednávek.
- Jednu objednávku může zadat jeden zákazník.
Toto je příklad vztahu jeden k mnoha :jeden zákazník může zadat mnoho objednávek a mnoho objednávek může zadat jeden zákazník.
Vztah mezi produktem a objednávkou (jedna k mnoha)
Produkt (entita/tabulka) může souviset s objednávkou (entita/tabulka) takto:
- Produkt lze přiřadit k jedné objednávce.
- Produkt lze přiřadit k mnoha objednávkám.
Podobně:
- K produktu lze přiřadit mnoho objednávek.
- Jedna objednávka může obsahovat jeden produkt.
Mezi produktem existuje vztah jedna k mnoha a Objednat .
Vztah zákazník-produkt (mnoho k mnoha)
Nyní je vztah mezi zákazníkem a produktem vysvětlen následovně:
- Zákazník si může koupit jeden produkt.
- Zákazník si může koupit více než jeden produkt.
- Produkt si může koupit zákazník.
- Produkt může zakoupit více než jeden zákazník.
Mnoho produktů může nakupovat mnoho zákazníků, což znamená, že zákazník a Produkt vztah je mnoho-mnoho .
Podívejte se na níže uvedený obrázek:
Scénář návrhu student-učitel
Podívejme se na jiný scénář návrhu databáze. Implementujete jej pomocí SSMS (SQL Server Management Studio) v druhé části tohoto článku.
Obchodní požadavky
Předpokládejme, že potřebujete navrhnout databázi, která uchovává následující informace:
- Student(é).
- Instruktoři.
- Studenti, kterým byl přidělen instruktor.
- Instruktoři, kteří jsou studentům přiděleni.
Předběžná analýza
Při podrobném pozorování zjistíte o výše uvedených požadavcích něco docela zajímavého. „Studenti, kteří mají přiděleného instruktora“ a „Instruktoři, kteří byli studentům přiděleni“ jsou stejný požadavek.
Může se často stát, že dva rozdílně vypadající požadavky se v kontextu návrhu databáze ukáží jako stejné.
Identifikujte entity
Z požadavků lze rovnou vyjmout následující entity:
- Student
- Instruktor
Ještě jedna entita nám však slouží k poskytování informací o instruktorech přidělených studentům.
Připomeňme si první příklad, kdy jsme použili tabulku objednávek – mnoho zákazníků si může koupit mnoho objednávek ve vztahu zákazník–objednávka. Je to podobné jako u našeho studenta-instruktora tabulkový vztah – mnoho instruktorů může být přiděleno mnoha studentům.
Identifikujte atributy
Můžeme vybrat užitečné atributy pro identifikované entity podle scénáře zákaznické objednávky:
- Student:ID studenta, jméno.
- Instruktor:ID instruktora, jméno.
- Student-Instructor:ID studenta-instruktora, ID studenta, ID instruktora.
Vztahy s identitou:
Identifikujte vztahy entit:
- Student -> Student-Instruktor (jeden k mnoha).
- Instruktor-> Student-Instruktor (jeden k mnoha).
- Student -> Instruktor (many-to-many).
Pamatujte, že k vyřešení vztahu mnoho k mnoha vždy používáme střední tabulku. Proto jsme do plánu začlenili entitu Student-Instructor.
Mapování entit a atributů do tabulek a sloupců
Nyní můžeme namapovat entity do tabulek. Vytvoříme tedy následující tři tabulky:
- Student.
- Instruktor.
- Student-Instruktor.
Podobně budou atributy těchto entit při mapování na sloupce následující:
- Student:StudentId, Name.
- Instruktor:InstructorId, Name.
- Student-Instructor:StudentInstructorId, StudentId, InstructorId.
Všimněte si následujícího obrázku:
Gratulujeme! Úspěšně jste se naučili koncepty návrhu databáze. Jsme obeznámeni s entitami, atributy a vztahy a s kroky, jak je namapovat na tabulky a sloupce v databázi.
Následující články vás provedou kroky návrhu databáze pomocí SSMS (SQL Server Management Studio).
Co dělat
Nyní, když rozumíte základům návrhu databáze, vyzkoušejte následující věci, abyste své dovednosti dále zlepšili:
- Zkuste přidat další subjekt s názvem Dodavatel s atributy SupplierId a SupplierName. Zkontrolujte, zda dokážete správně identifikovat následující vztahy:
- Objednávka dodavatele;
- Dodavatel-zákazník;
- Dodavatel-produkt.
- Navrhněte databázi spolu s identifikací entit, atributů a vztahů pro knihovnu. Tip:Knihy jsou vydávány členům a členové si půjčují knihy z knihovny. Člen, kniha, vydáno mohou být entity.
- Určete typ následujících tabulkových vztahů pro entity, jak je uvedeno výše:
- Vydáno členem;
- Vydaná kniha;
- Členská kniha;
- Člen knihy.
Přečtěte si také
Naučte se návrh databáze pomocí SQL Server Management Studio (SSMS) – část 2