Ciselniky z mysql do PHP rubrika: Programování: PHP

5 error414_1
položil/-a 9.1.2015

Cau,

jak resite kdyz mate ciselnik v mysql

table enum_name
 
ID | NAME 
1  | Petr
2  | Pavel

a v php kodu potrebujete napsat podminku

if($enumId == 1){
  // delej neco
} 

Jedine co me ted napada je do mysql pridat sloupec "const_name"

table enum_name
 
ID | NAME   | CONST_NAME
1  | Petr   | PETR
2  | Pavel  | PAVEl

a nechat si vygenerovat tridy

class EnumName{
  const PETR  = 1;
  const PAVEL = 2;
}

resilo by to ze ciselnik je jen na jednom miste, takze zmena v ciselniku neovlivni PHP kod, navic se v kodu da lepe hledat vyskyt pouziti cisleniku

//find
EnumName::PETR ......

Komentáře

  • onelook : Ten číselník je fixní, tedy nelze jej nijak v aplikaci (nebo pomocí nějakého nástroje, který se ke správě aplikace používá) měnit? Tedy je to pevná součást aplikace (jako třeba zdrojový kód programu)? 9.1.2015
  • error414_1 : jj cislenik je pevne spjat s aplikaci 9.1.2015
  • podhy : pokud přidáš sloupec CONST_NAME tak je už zbytečný sloupec ID :-) Udělal bych tedy z CONST_NAME primární klíč a tabulky co tento číselník využivají by v sobě měly přímo ty hodnoty 9.1.2015
  • LeonardoCA : CONST_NAME jako primarni klic neni dobry napad, z hlediska kolik by zabral v tablkach a indexech, kdyz se da vetsinou predem urcit, ze ciselnik se vleze do tinyint nebo smallint ... 9.1.2015
  • podhy : ta velikost se dá snadno spočítat (a zjistit si tak jestli to má smysl nebo ne) a u malých tabulek (které na webových stránkách v PHP primárně vznikají) to není žádný problém. Ostatně řadu takových klíčů používáme a na výkon to nemá vliv. Ano zabírá to víc dat, ale kapacita dneska není tak velký problém. Nicméně člověk si takovou věc musí spočítat. 10.1.2015
  • LeonardoCA : jasne, ze u malych aplikaci je to jedno, ale rekl bych, ze ma smysl si osvojit navyky prace s databazi tak, aby kdyz se z mensiho projektu nekdo dostane k trochu vetsimu projektu, nevznikaly zbytecne MB, GB dat ... 10.1.2015
  • v6ak : Drobná poznámka: při generování PHP kódu z databáze bych dost dobře ověřoval data, která budeš číst z CONST_NAME. Když někdo získá neoprávněný přístup do DB, je to nepříjemné, ale nemusí kvůli tomu mít přístup i do PHP skriptů. 12.1.2015
  • Milan Pála : Řešíme to obdobně. Pokud na číselník potřebujeme navázat logiku, tak lze doplnit specifické CONST_NAME. Ty jsou uložené jako konstanty s prefixem UID_ a tak je možné pomocí asercí natáhnout jejich seznam. Ten se potom nabízí v selectu v administraci číselníku u jednotlivých hodnot. Číselník lze tedy plně editovat na webu. Pokud na nějakou hodnotu specificky reagujeme, dostane se konstanta do kódu do patřičné entity a automaticky i do administrace. Tam si to projekťák nastaví. 16.1.2015
odkaz
7 onelook
odpověděl/-a 10.1.2015

Jde tedy o fixní číselník, který není možné z aplikace změnit, ani změnit konfigurací. Je to tedy pevná součást aplikace a k určité revizi zdrojového kódu patří konkrétní fixní číselník. V takovém případě dává smysl, aby číselník byl součástí zdrojového kódu a do DB se zapisoval v rámci deploymentu. Tedy pokud vůbec v DB musí být. A jak ze zdrojového kódu naplnit DB tabulku? To záleží na možnostech jazyka - v případě PHP lze třeba z nějaké třídy s konstantami reflexí vygenerovat SQL dotazy. Při deploymentu se stejně spouští typicky nějaký skript, který upravuje strukturu DB.

Pro zobrazení všech 6 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.