Boyceho–Coddova normální forma (BCNF) je jednou z normálních forem používaných při normalizaci databáze.

BCNF byla vytvořena v roce 1974 Raymondem Boycem a Edgarem Coddem, aby odstranila některé anomálie, které se vyskytují v relacích, které jsou ve 3NF. Chris Date upozornil,Date, C.J. Database in Depth: Relational Theory for Practitioners. O'Reilly (2005), p. 142. že definice BCNF se prvně objevila v článku od Iana Heatha už v roce 1971.Heath, I. "Unacceptable File Operations in a Relational Database." Proc. 1971 ACM SIGFIDET Workshop on Data Description, Access, and Control, San Diego, Calif. (November 11th–12th, 1971).

Definice BCNF: Relace R je v BCNF tehdy a jen tehdy, když pro každou netriviální závislost X → Y, kde X a Y jsou množiny atributů a zároveň Y není podmnožinou X, platí, že X je nadmnožinou nějakého klíče, nebo X je klíčem relace R. Jinak řečeno relace R je v BCNF tehdy a jen tehdy, když každý determinant funkční závislosti v relaci R je zároveň kandidátním klíčem relace R.

Relace v 3NF, která není v BCNF Každá relace, která je v BCNF je zároveň ve 3. normální formě; naopak relace, která je ve 3. normální formě nemusí být v BCNF, a to pokud platí tyto skutečnosti: v relaci existuje více kandidátních klíčů, existuje takový atribut, který je společný pro všechny kandidátní klíče.

Příklad Následující tabulka eviduje rezervace dvou tenisových kurtů. Současně máme (konvencí) definovaná tato ohodnocení (Rate Type): SAVER, pro kurt 1, sjednané členy klubu STANDARD, pro kurt 1, sjednané nečleny klubu PREMIUM-A, pro kurt 2, sjednané členy klubu PREMIUM-B, pro kurt 2, sjednané nečleny klubu

+ Rezervace kurtu CourtStart TimeEnd TimeRate Type 109:3010:30SAVER 111:0012:00SAVER 114:0015:30STANDARD 210:0011:30PREMIUM-B 211:3013:30PREMIUM-B 215:0016:30PREMIUM-A

Tato tabulka je v 3NF, ale není v BCNF. Příklad řešení, které BCNF splňuje, vytvořilo novou tabulku, která sjednocuje číslo kurtu a hodnocení. + Ohodnocení Rate TypeCourtMember Flag SAVER1Yes STANDARD1No PREMIUM-A2Yes PREMIUM-B2No

+ Rezervace kurtu Rate TypeStart TimeEnd Time SAVER09:3010:30 SAVER11:0012:00 STANDARD14:0015:30 PREMIUM-B10:0011:30 PREMIUM-B11:3013:30 PREMIUM-A15:0016:30

Reference

Kategorie:Databáze