Skip to content

Návrh relačních databází

Návrh relační databáze je proces, ve kterém se plánuje, jakým způsobem budou data uložena, organizována a propojena v relační databázové systému. Správný návrh databáze je klíčový pro efektivní a spolehlivé ukládání a manipulaci s daty.

Konceptuální schéma databáze

Konceptuální schéma databáze je model, který zobrazuje strukturu dat, jejich vlastnosti a vztahy mezi nimi. Je to vyšší úroveň abstrakce v návrhu databáze, která se zaměřuje na porozumění datovým požadavkům a jejich organizaci bez ohledu na fyzickou implementaci. Tento model je často prezentován pomocí ER diagramu (Entity-Relationship diagram).

Mezi prvky konceptuálního schématu patří:

  • Entity, což jsou objekty, které mají být uloženy v databázi.
  • Atributy, což jsou vlastnosti jednotlivých objektů.
  • Vztahy, které určují vazby a spojení mezi jednotlivými objekty.
  • Primární klíč, který jednoznačně identifikuje objekt.
  • Cizí klíč, který odkazuje na primární klíč jiného objektu.
Ukázka ER Diagramu
erDiagram
    CUSTOMER }|..|{ DELIVERY-ADDRESS : has
    CUSTOMER ||--o{ ORDER : places
    CUSTOMER ||--o{ INVOICE : "liable for"
    DELIVERY-ADDRESS ||--o{ ORDER : receives
    INVOICE ||--|{ ORDER : covers
    ORDER ||--|{ ORDER-ITEM : includes
    PRODUCT-CATEGORY ||--|{ PRODUCT : contains
    PRODUCT ||--o{ ORDER-ITEM : "ordered in"

Vztahy mezi entitami

Parcialita, neboli participační omezení, určuje, zda se musí entita vztahu účastnit či nikoliv. Jinak řečeno, jestli je účast povinná nebo volitelná.

Příklad parciality

erDiagram
    ZAMESTANEC ||--o| PROJEKT : "má"
Zaměstnanec má 0 nebo 1 projekt, a projekt musí mít jednoho zaměstnance.

Kardinalita určuje počet entit, které se mohou vztahu účastnit.

  • Jeden k jednomu (1:1): Každý záznam jedné entity je spojen s maximálně jedním záznamem druhé entity.
  • Jeden k mnoha (1:N): Každý záznam jedné entity může být spojen s více záznamy druhé entity.
  • Mnoho k mnoha (M:N): Každý záznam jedné entity může být spojen s více záznamy druhé entity a naopak.

Relační model

Relační model databází je založen na konceptu relací, které představují tabulky s daty. Každá relace má sadu sloupců a řádků. Sloupecy definují atributy dat, zatímco řádky představují jednotlivé záznamy.

Konstrukt Vysvětlitka
Tabulka Tabulka je soubor dat organizovaný do sloupců a řádků. Sloupec definuje atribut (vlastnost) dat a řádek představuje jednotlivý záznam.
Záznam Záznam je řádek tabulky, který obsahuje atributy.
Atribut Atribut je charakteristika, která popisuje vlastnosti entity v relační databázi. Je reprezentován sloupcem v tabulce.
Doména Doména je množina povolených hodnot pro daný atribut.
Klíč Klíč je sloupec nebo sada sloupců, které jednoznačně identifikují každý řádek v tabulce.
Primární klíč Sloupec nebo sada sloupců, které jednoznačně identifikují každý řádek v tabulce. V tabulce může být pouze jeden primární klíč.
Cizí klíč Sloupec nebo sada sloupců v jedné tabulce, které odkazují na primární klíč v jiné tabulce. Cizí klíče se používají k vytvoření vztahů mezi tabulkami.
Hodnota Hodnota je konkrétní instance atributu. Jedná se o datový prvek v buňce tabulky.

Integritní omezení

Integritní omezení jsou pravidla, která zajišťují správnost, přesnost a konzistenci dat v databázích. Jsou klíčová pro udržení integrity databáze a pro zajištění toho, že data jsou v souladu s očekávanými pravidly a vztahy.

  • Doménová integrita: Hodnoty v každém sloupci tabulky spadají do specifikované domény, což je definováno datovým typem sloupce, povolenými hodnotami, rozsahy nebo dalšími omezeními.
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name VARCHAR(100) NOT NULL,
    Age INT CHECK (Age >= 18 AND Age <= 65)
);
  • Entitní integrita: Každá tabulka má primární klíč, a že tento klíč je jedinečný a ne-NULL. Primární klíč identifikuje každý řádek v tabulce jednoznačně.
CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    StudentName VARCHAR(100) NOT NULL
);
  • Referenční integrita: Vztahy mezi tabulkami jsou zachovány správně. To znamená, že cizí klíče musí odkazovat na existující hodnoty v referenčních tabulkách, a že se správně aktualizují nebo mažou při změně či smazání referenčních záznamů.
CREATE TABLE Courses (
    CourseID INT PRIMARY KEY,
    CourseName VARCHAR(100) NOT NULL
);

CREATE TABLE Enrollments (
    EnrollmentID INT PRIMARY KEY,
    StudentID INT,
    CourseID INT,
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
    FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);