Databázové názosloví rubrika: Databáze: SQL

13 rmaslo
položil/-a 8.6. 16:23
 
upravil/-a 9.6. 0:58

Zdravím,

Existuje nějaký ustálený výraz jak se nazývá primární klíč včetně jeho hodnoty (případně hodnot všech sloupců primárního klíče, pokud se vícenásobný)?

Tj. jak by jste nazvali třeba asociativní pole ['id'=>8] či v případě třeba košíku se složeným klíčem pole ['uzivatel_id'=>10, 'zbozi_id'=>5] udávající jednoznačně o jaký záznam se jedná. Případně objekt (třídu), pokud jí na tento účel dáváte přednost před asociativním polem...

Většinou tomu říkám "adresa záznamu", ale to určitě není podle žádných norem a ani mi to nepřijde zcela výstižné. A poměrně často si takovouto strukturu předávám, když něco dělám nad obecně nad tabulkou.

Dík, uvítám EN i CZ varianty.

odkaz
19 Kit
odpověděl/-a 8.6. 22:45

Dotaz mi moc jasný není. Primární klíč musí být unikátní, může být složen z více kandidátních klíčů. V případě ukázky košíku (vazební tabulky) primární klíč vznikl spojením dvou cizích klíčů.

Komentáře

  • rmaslo : jj Primární klíč je třeba ['id'] nebo v případě košíku ['uzivatel_id','zbozi_id']. Ale jak by jsi nazval tu strukturu, kde máš i hodnotu toho primárního klíče. Tj. třeba ['id'=>8] nebo ['uzivatel_id'=>10, 'zbozi_id'=>5] ? 9.6. 1:06
  • Kit : Aha, setkávám se s $key, $condition, $filter, $attributes, $where,... 9.6. 7:54
  • rmaslo : Ten návrh dívat se na to jako na podmínku je dobrý, to mě nenapadlo. Trochu z toho vypadlo, že je to primární podmínka. Když to doplním vychází $PrimaryCondition, $PrimaryFilter, $PrimaryWhere. Pocitově se mi $PrimaryWhere docela líbí, asi i víc než doteď používaný $PrimaryAddress. I zkratka PW je docela dobrá (analogie k PK jako PrimaryKey). 9.6. 10:27
  • Kit : Takové podmínky se následně dají zpracovat přes array_map() a implode(). 9.6. 10:36
  • rmaslo : jj přes array_map() a implode() se z toho složí SQL část where. Jinak já to používám takto: K modifikaci dat v db přistupuji zásadně přes RecordUpdate($Table, $PrimaryWhere, $Data); RecordDelete($Table, $PrimaryWhere); RecordInsert($Table, $Data). A tyto funkce provádí třeba logování (je-li zadáno v configu tabulky), kontrolují práva zápisu (dle aktuálního uživatele), kontrolují referenční integritu (v případě MyISAM), spouštějí funkce aplikační logiky (Before/After + Insert/Update/Delete). V principu tedy programuji pomocí událostí (trigerů), akorát je nepíši do db, ale vytáhl jsem si je o vrstvu výše. To pole $PrimaryWhere se uvnitř těch událostí relativně dost předává a je pro ně důležité, takže ho chci fakt správně nazvat. 10.6. 9:54
  • Kit : Otázkou je, co s tím má společného "primary", když používáš kandidátní klíče. Snad jen to, že výstupem je jen jeden nebo žádný záznam. 10.6. 10:23
  • rmaslo : Výstupem je vždy jeden záznam. Žádný či více je logovaná chyba a operace se neprovede. Ano teoreticky by to mohl být i jiný unikátní klíč, ale prakticky to bývá vždy primární. To vychází z toho, že ty operace buď vychází z nějaké klientské operace z gridu, kde si pole adresuji dle PK (PK tahám automaticky při generování gridu z metainformací dotazu) nebo z nějaké vazby přes FK. A vlastně jsme nikdy nepotřeboval dělat FK jinému unikátnímu klíči než PK. 12.6. 1:15
  • Kit : Když v databázi není záznam nalezen, tak to není chyba - musíš z toho tu chybu nejprve udělat. Ovšem, je to poněkud nečisté. Stejně je mi divné, proč se databáze ptáš na ['uzivatel_id'=>10, 'zbozi_id'=>5]. Do vazební tabulky obvykle není důvod lézt. 12.6. 1:15
  • rmaslo : 1. Ano máš pravdu, tu chybu z toho udělám, v podstatě v okamžiku kdy nenaleznu to, co by do události (analogie trigeru) vstupovalo jako "old". 2. Nikdy jsem netvrdil, že je to jen vazební tabulka, je to košík, byl by tam třeba ještě počet kusů. 12.6. 1:38

Pro zobrazení všech 5 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.