Potřebuje tabulka primary key?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
hacafrakus
Člen | 14
+
0
-

Zdravím,

z Nette 2.0.10 jsem přešel na novém projektu na verzi 2.1-dev, kvůli tomuto bugu, do budoucna navíc plánuji tuto verzi stejně používat, takže mi to, že je vývojářská, nevadí.
Nicméně na této verzi mi při insertu na tabulce bez primárního klíče Nette vyhazuje výjimku Table tokens does not have any primary key. Nedělá mi problém jej tam přidat, ale spíš mě zajímá, jestli to není bug, protože s tabulkou se při obyčejném selektu dá pracovat bez problémů, chyba nastává pouze při insertu.

Děkuji.

hrach
Člen | 1834
+
0
-

Tak neinsertuj pres Nette\Database\Table, ale jen pres Nette\Database, ne?

hacafrakus
Člen | 14
+
0
-

Je tím myšleno ruční psaní dotazu?

$this->database->query("...");
enumag
Člen | 2118
+
0
-

Ano. Ale spíše bych ti doporučil přidat ten primární klíč.

Editoval enumag (14. 4. 2013 21:07)

paranoiq
Člen | 392
+
0
-

on tam beztak je. pokud nevytvoříš primární klíč explicitně, je vytvořen skrytý. tabulky bez pk neexistují. pokud přistupuješ k tabulce přes jiný než primární index, je nejprve v něm nalezen odkaz do primárního a teprve v primárním je odkaz na data (MySQL)

hacafrakus
Člen | 14
+
0
-

Ano, vyřešeno to nakonec bylo přidáním toho primárního klíče. To, že se vytváří skrytý jsem si tedy myslel správně, ale překvapilo mne, že to nefunguje tak, jak jsem čekal. Skoro mám pocit, že mi to dříve fungovalo správně (i bez vlastního PK) :)

Editoval hacafrakus (20. 4. 2013 12:53)

saimons
Člen | 293
+
0
-

Ted jsem narazil take na tuto chybu, pri prechodu na novjejsi verzi Nette a ne vzdy je vhodne vkladat primarni klic. Treba tabulka ktera se dost casto meni, tak budu muset zvolit BIGINT a to zasadne spomaluje praci s ni. Pak je otazka preteceni, pokud pouziji mensi datovej typ. Menit nekde kdo vi kde vsude v aplikaci na Nette\Database mi prijde silenost. Nevim, ale tahle nezpetna kompatibilata je podle me spatna.

enumag
Člen | 2118
+
0
-

@siamons: Primární klíč neznamená auto increment. Můžeš si to klidně napsat tak abys volná místa zaplňoval pokud se bojíš přetečení.

saimons
Člen | 293
+
0
-

@enumag: Udelat se to da, to ja vim, jako i treba muzu prespat ukladani. Ale spis mi slo o to, ze jsem udelal upgrade z verze 2.0.10 na aktualni verzi z Gitu (kvuli opravene chybe) a najednou koukam, ze se neco chova uplne jinak. Takze opravou jedne chyby, jsem zpusobil nake dalsi. Takoveto zmeny clovek ocekava napr. s prechodem na 2.1.

Editoval saimons (26. 6. 2013 20:53)

enumag
Člen | 2118
+
0
-

@saimons: Jestli je ve větvi release-2.0.x takový BC break tak je to chyba, nahlaš to sem. Pokud ten BC break je ve větvi master tak je to v pořádku, protože to je 2.1.

Editoval enumag (26. 6. 2013 21:01)

paranoiq
Člen | 392
+
0
-

@saimons @enumag jakýkoliv uživatelský algoritmus se zaplňováním děr bude zaručeně zpomalovat víc než ten BIGINT. zvlášť na 64bit stroji