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
Unikátní index přes sloupce, u nichž nechceš, aby vznikali duplicity.
nowis
Profil
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
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
Zechy:
jo, už vím

ALTER TABLE `tabulka` ADD UNIQUE `unique_index`(`datum`, `klient`);

Dík
Leinad
Profil
A je jinak ta databáze správně navržená? UNIQUE přes více sloupců se používá výjimečně.
Keeehi
Profil
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
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
Jo primární klíč nemáš, tak to beru.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: