Autor Téma: Otázky začínajúceho  (Přečteno 12319 krát)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Otázky začínajúceho
« Odpověď #15 kdy: 04-10-2012, 09:04:18 »
Na základe nejakých textov to riešim v aplikácii. Takže do DB "vždy" posielam správne údaje.
Database by mela byt mimo transakci v kterykoli okamzik logicky konzistenti a s neporusenou integritou. Takze se nikdy nespoleha na to, ze to zajisti klient, ale dela se to deklarativne temi CHECKS u domain a proceduralne v triggerech ev. u slozitejsich zmen v SP, kde se bud dosadi neco default, kdyz to jde nebo se raisne exception.

Offline KarelHorky

  • Hrdina
  • ****
  • Příspěvků: 299
  • Karma: 10
    • Verze Delphi: XE6, Delphi 10.2 Tokyo
Re:Otázky začínajúceho
« Odpověď #16 kdy: 04-10-2012, 09:13:07 »
// Navíc, pokud jednou povolíš ve sloupci hodnotu Null, už to později nejde nijak změnit,
V IBExpres to ide. Bolo nad prázdnou tabuľkou.
Zkus to s naplněnou tabulkou. Několik sloupců, jeden nebo víc s povolením Null, pár záznamů. Potom zkus změnit definice na Not Null. Jde to udělat jen přes nový sloupec, zkopírováním původního obsahu, dropnutím původního a přejmenovaním nového.
Kouzelníci v IBExpertu to možná také tak udělají  :)
Win10 Prof 64b, Firebird 2.5

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Otázky začínajúceho
« Odpověď #17 kdy: 04-10-2012, 09:22:55 »
Zkus to s naplněnou tabulkou. Několik sloupců, jeden nebo víc s povolením Null, pár záznamů. Potom zkus změnit definice na Not Null. Jde to udělat jen přes nový sloupec, zkopírováním původního obsahu, dropnutím původního a přejmenovaním nového.
Kouzelníci v IBExpertu to možná také tak udělají  :)
Jasne ze s naplnenou. Ale u firebirdu jsem to rucne nikdy nezkousel, vsechno delame pres IBE. Ted me napada, kdyz to delas rucne, tak ti pujde zmenit domaina za jinou, ktera bude mit not null constraint? Z IBE to jde taky bez problemu.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Otázky začínajúceho
« Odpověď #18 kdy: 04-10-2012, 09:26:35 »
Na základe nejakých textov to riešim v aplikácii. Takže do DB "vždy" posielam správne údaje.
Database by mela byt mimo transakci v kterykoli okamzik logicky konzistenti a s neporusenou integritou. Takze se nikdy nespoleha na to, ze to zajisti klient, ale dela se to deklarativne temi CHECKS u domain a proceduralne v triggerech ev. u slozitejsich zmen v SP, kde se bud dosadi neco default, kdyz to jde nebo se raisne exception.

Tak to bude veľmi ťažký boj. Ale už keď som kúpil ten IBExpert  :'(
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:Otázky začínajúceho
« Odpověď #19 kdy: 04-10-2012, 18:47:04 »
Jasne ze s naplnenou. Ale u firebirdu jsem to rucne nikdy nezkousel, vsechno delame pres IBE. Ted me napada, kdyz to delas rucne, tak ti pujde zmenit domaina za jinou, ktera bude mit not null constraint? Z IBE to jde taky bez problemu.

řada věcí ale jedním dotazem udělat nejde. Třeba u MSSQL jde taky hromada věcí naklikat v management studiu (třeba přejmenování sloupců nebo změna pořadí), ale interně to dělají tak, že vyrobí novou tabulku se změněnou strukturou, data do ní přelijí, smažou původní a novou přejmenují na původní název. Takže z pohledu uživatele to vypadá, že to jde.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Otázky začínajúceho
« Odpověď #20 kdy: 04-10-2012, 19:00:32 »
ale interně to dělají tak, že vyrobí novou tabulku se změněnou strukturou, data do ní přelijí, smažou původní a novou přejmenují na původní název. Takže z pohledu uživatele to vypadá, že to jde.
To je jasny. Ale nekomu, kdo evoluje DB schema je to prece uplne jedno, hlavne kdyz to nemusi delat pesky a nekdo to za nej udela.

Jedno to prestava byt, kdyz se pustis do vyvoje nejakeho takoveho evolucniho nastroje. Ja se kdysi snazil evoluvat v jednom OSS projektu ORM engine pro MySQL stejne, jako jim to fungovalo s Postgre a jeste ted se mi z toho dela spatne, kdyz si vzpomenu, jak tam skoro nic neslo, protoze referenci integritu k InnoDB nekdo nejak dodatecne prilepil...

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:Otázky začínajúceho
« Odpověď #21 kdy: 05-10-2012, 09:20:39 »
To je jasny. Ale nekomu, kdo evoluje DB schema je to prece uplne jedno, hlavne kdyz to nemusi delat pesky a nekdo to za nej udela.

Jedno to prestava byt, kdyz se pustis do vyvoje nejakeho takoveho evolucniho nastroje. Ja se kdysi snazil evoluvat v jednom OSS projektu ORM engine pro MySQL stejne, jako jim to fungovalo s Postgre a jeste ted se mi z toho dela spatne, kdyz si vzpomenu, jak tam skoro nic neslo, protoze referenci integritu k InnoDB nekdo nejak dodatecne prilepil...

Ono to vždycky jedno není. Je rozdíl, jestli nějakou změnu zvládne udělat db engine hned (protože přejmenování tabulky je jenom změna řádku v nějaké systémové tabulce) nebo se to musí dělat nějakým hackem a kopírovat na pozadí kvanta dat. Taky už se mi u větších tabulek stalo, že se změna prováděla minutu, pak vypršel timeout na dotaz a celé se to zrušilo rollbackem.

A MySQL není databáze, to bych sem vůbec netahal :-).

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Otázky začínajúceho
« Odpověď #22 kdy: 05-10-2012, 09:31:13 »
Ono to vždycky jedno není. Je rozdíl, jestli nějakou změnu zvládne udělat db engine hned (protože přejmenování tabulky je jenom změna řádku v nějaké systémové tabulce) nebo se to musí dělat nějakým hackem a kopírovat na pozadí kvanta dat.
Mas pravdu, neni samozrejme nad poradny navrh na zacatku. Ja tu zrovna resim nejake hnusne zmeny v DB a kdyz spoustim evolucni scripty, ktere ze starych dat dopocitavaji nejake nove hodnoty a prepocitavaji prubezne vyhodnovane hodnoty nad plnou databazi, tak mam dva, ktery kazdy trva asi 5 hodin :-( A navic to vypada, ze mam nekde chybu, protoze to vypocetlo kraviny  :'(