sql >> Databáze >  >> RDS >> Mysql

Typ MySQL ENUM vs. tabulky spojení

  • Změna sady hodnot v ENUM vyžaduje ALTER TABLE což by mohlo způsobit restrukturalizaci tabulky -- neuvěřitelně nákladnou operaci (restrukturalizace tabulky nenastane, pokud jednoduše přidáte jednu novou hodnotu na konec definice ENUM, ale pokud jednu smažete nebo změníte pořadí, provede se tabulka restrukturalizaci). Zatímco změna sady hodnot ve vyhledávací tabulce je stejně jednoduchá jako INSERT nebo DELETE.

  • Neexistuje způsob, jak k hodnotám v ENUM přiřadit další atributy, například ty, které jsou vyřazeny a které lze umístit do rozevíracího seznamu ve vašem uživatelském rozhraní. Vyhledávací tabulka však může obsahovat další sloupce pro takové atributy.

  • Je velmi obtížné dotazovat ENUM, abyste získali seznam odlišných hodnot, v podstatě vyžaduje dotaz na definici datového typu z INFORMATION_SCHEMA a analýzou seznamu z vráceného objektu BLOB. Můžete zkusit SELECT DISTINCT status z vaší tabulky, ale získá pouze aktuálně používané stavové hodnoty, což nemusí být všechny hodnoty v ENUM. Pokud však ponecháte hodnoty ve vyhledávací tabulce, je snadné dotazovat se, třídit atd.

Jak můžete říct, nejsem velkým fanouškem ENUM. :-)

Totéž platí pro omezení CHECK, která jednoduše porovnávají sloupec s pevnou sadou hodnot. I když MySQL stejně nepodporuje omezení CHECK.

Aktualizace:MySQL 8.0.16 nyní implementuje KONTROLA omezení .



  1. Jak vrátit výsledek SELECT uvnitř funkce v PostgreSQL?

  2. Jak RADIANS() funguje v MariaDB

  3. Jak získat aktuální datum (bez času) v T-SQL

  4. Ekvivalent explode() pro práci s řetězci v MySQL