Discriminator

V programování slouží discriminator jako identifikátor entity (tzv. tag), který vyjadřuje, o jaký typ entity se jedná na základě předem definovaného výčtu, který určuje samotný systém (například UNION nebo ENUM typ v relační databázové tabulce).

Discriminator se používá pro převod objektového návrhu entit v rámci programovacího jazyka do tabulkové podoby[1], kdy potřebujeme zachovat informaci o názvu původního typu entity v programovacím jazyce.

Příklad:

Mějme 3 entity reprezentující různé typy produktů v internetovém obchodu, které mezi sebou zároveň definují závislosti pomocí dědičnosti:

<?php

class Product {
	public $name;
	public $description;
}

class Book extends Product {
	public $pagesCount;
	public $author;
}

class Phone extends Product {
	public $system;
	public $batteryCapacity;
}

Například v jazyce PHP můžeme velice jednoduše instancovat objekt Book, která reprezentuje produkt s knihou a přidává informaci o počtu stran a autorovi. Pokud však budeme chtít všechny typy produktů (základní produkt, knihu a telefon) uložit do relační databáze, můžeme vytvořit pouze jednu tabulku product, která bude mít následující sloupce:

  • name
  • description
  • pages_count
  • author
  • system
  • battery_capacity
  • discriminator

Sloupec discriminator v tomto případě bude nést hodnoty product, book nebo phone v závislosti na aktuálně uložené entitě. Úkolem knihovny pro obsluhu databáze v konkrétním jazyce (například Doctrine[2]) je pochopit nastavení Discriminatoru a podle toho vytvořit instance správné entity s ohledem na předem definovaný seznam.

Reference

  1. Using Discriminator Column. www.visual-paradigm.com [online]. [cit. 2019-07-01]. Dostupné online. 
  2. Inheritance Mapping - Doctrine Object Relational Mapper (ORM). www.doctrine-project.org [online]. [cit. 2019-07-01]. Dostupné v archivu pořízeném z originálu dne 2019-07-01.