Autor | Zpráva | ||
---|---|---|---|
nowis Profil |
jde nějak automatizovaně v mysql řešit, aby se nepřidávaly už existující záznamy které jsou definovány kombinací hodnot více sloupců? Samozřejmě, že můžu udělat na každý záznam SELECT ... WHERE ... AND ... a pokud takový výsledek neexistuje pak přidávat, ale říkám si, že by to DB stroj mohl nějak umět sám od sebe. Kdyby se mu při definici tabulky třeba řeklo, že kombinace datum-klient musí být vždy unikátní...
Ne, že by šlo o nějaká velké množství dat, ale rád bych to měl vyřešeno nějak "dobře" žádné unikátní ID přidávaného záznamu samozřejmě nemám. Díky |
||
Zechy Profil |
#2 · Zasláno: 11. 12. 2016, 00:04:49
Unikátní index přes sloupce, u nichž nechceš, aby vznikali duplicity.
|
||
nowis Profil |
#3 · Zasláno: 11. 12. 2016, 11:27:32
Zechy:
Tzn nastavit u každého z těch sloupců unikátní index? Nebo nějak jeden index přes více sloupců? |
||
Radek9 Profil |
#4 · Zasláno: 11. 12. 2016, 11:29:48
nowis:
Druhá možnost. Kdybys měl unikátní na každý sloupec, tak by ti nefungovaly např. kombinace (1, 1) a (1, 2). |
||
nowis Profil |
#5 · Zasláno: 11. 12. 2016, 11:31:13
Zechy:
jo, už vím ALTER TABLE `tabulka` ADD UNIQUE `unique_index`(`datum`, `klient`); Dík |
||
Leinad Profil |
#6 · Zasláno: 11. 12. 2016, 11:37:30
A je jinak ta databáze správně navržená? UNIQUE přes více sloupců se používá výjimečně.
|
||
Keeehi Profil |
#7 · Zasláno: 11. 12. 2016, 11:52:51
Leinad:
„UNIQUE přes více sloupců se používá výjimečně.“ Důvod nebo zdroj? |
||
nowis Profil |
Leinad:
No, na té databázi není co navrhovat, je to jen sběr dat přes api, je to primární zdroj dalších dat. To rozhraní žádný unikátní sloupec neposkytuje (což je podle mně ten problém, ale tak je to dané). Takže podle mně jde zajistit nepřidávání duplikátních záznamů jen těmito způsoby 1. před každým přidání záznamů vyhledat v DB, jestli už takový záznam neexistuje - na můj vkus zbytečná režie 2. definovat unikátní kombinaci sloupců a na ní dát ten UNIQUE 3. vyrobit si unikátní sloupec spojením těchto sloupců - to mi příjde jako prasárna Pokud někoho napadá další způsob, budu samozřejmě rád za rozšíření obzorů... |
||
Keeehi Profil |
#9 · Zasláno: 11. 12. 2016, 16:33:04
nowis:
Jednička hlavně není atomická, dvojka je správná a trojka by byla asi použitelná jen v případě, že by databáze neuměla unikátní index přes více sloupců. Záleželo by na datech, ale v některých případech by bylo vhodné z té složeniny spočítat hash a ten ukládat. Při skládání sloupců by bylo ještě potřeba pohlídat způsob skládání. Pokud by se třeba jen jednoduše zřetězily hodnoty, nebylo by možné od sebe rozeznat řádky (1, 23) a (12, 3). |
||
Leinad Profil |
#10 · Zasláno: 11. 12. 2016, 16:39:17
Jo primární klíč nemáš, tak to beru.
|
||
Časová prodleva: 7 let
|
0