Udržování datových struktur na SQL   zodpovězená otázka

Databáze

Zdravím všechny,

chtěl jsem se zeptat, jakým způsobem zajišťujete aktuálnost datových struktur na SQL pro vaše aplikace?

Jde o to, že čas od času je nutné do některé tabulky např. přidat nový sloupec, případně do databáze přidat celou novou tabulku.

Je mi jasné, že toto lze udělat skriptem.

Nicméně, jde mi spíše o to, aby se s distribucí nové verze aplikace uživateli provedlo automatické zaktualizování datových struktur (je-li to třeba).

Mělo by to fungovat nějak tak, že když uživatel spustí program, přihlásí se pomocí něj pod administrátorským účtem na SQL Server. Následuje kontrola aktuálnosti datových struktur a pokud je vyžadována změna, provede se. Po zaktualizování struktur by již aplikace najela standardním způsobem.

Máte toto nějak řešeno? Pokud ano, jak. Využíváte k tomu XSD schéma? Nebo existuje nějaký produkt třetích stran, který by výše popsané umožňoval?

Díky všem za jakékoliv náměty či postřehy.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Žádné standardizované řešení poku vím neexistuje, musíte si to řešit sám.

Z hlediska dlouhodobého vývoje produktu i v týmu se mi osvědčilo přímo do projektu přidávat SQL skripty, které upravují tabulky v databázi. Při spuštění se aplikace podívá do databáze (kde má nějakou spešl tabulku Versions), jaká je aktuální verze databáze (na to stačí int), a pokud najde nějaké novější change skripty, na databázi je spustí.

Je to výhodné jak z hlediska verzování souborů projektu při práci v týmu (nikdy se již hotové SQL skripty nemění, přidávají se vždy nové), a vše funguje naprosto automaticky i pokud na projektu pracuje víc lidí nebo pokud vyvíjíte proti různým databázím (testovací lokální, testovací týmová, ostrá atd.).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji Vám za odpověď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je věc, která se řeší prakticky všude stejně. Má někdo nějaký tip jak to dělat automaticky? Mám tím na mysli detekci a spouštění verzovače. Update metadat a dat je naprosto běžný a neznám žádné rozumné řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bohužel s tímto nemám moc dobré skušenosti, jde o to, že né každý umí psát SQL scripty, a v našem případě, 90% programátorů nepoužívá podmínky pro spuštění příkazu. Jako např. když neexistuje sloupec "Name" v tabulce "Noname" tak mi ho vytvoř.

Potom když ten script zavoláte na podruhý už vám to hodí chybu. Nic méně pokud budete dodržovat tyto podmínky neměl by být větší problém. Určitě bych doporučil v případě tvoření relací, primárních klíčů a constraint vždy vkládat jméno, protože potom se vám to bude líp kontrolovat.

Já jsem si udělal program, který mi prohlídne xml, kde mám definovanou celou strukturu databáze. (Tabulka, nazev sloupce, primarni klic, null, relace, indexi constraint atd.) V případě, že chci něco přidat vložím novej object do xml. A změním číslo verze v programu. Při spuštění programu se dotažu na verzi Databáze, která je na SQL no a pokud mi to nesouhlasi, prostě spustím initializaci (Program na vygenerování databaze). Logika programu mě zabrala cca 2-3 dny, ale použil jsem to již v několika projektech.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejjednodušší je prostě mít v databázi tabulku Versions, kde se pamatuje, který changescript se spustil naposledy. Jednoduché a funkční. Navíc pokud do té tabulky dáte i datum a informace v ní necháváte, máte celkem dobrý logovací nástroj, ze kterého můžete zjistit, jestli některá změna v databázi něco nerozbila.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tabulka by měla být Version, nemohl jsem si to odpustit :-). Problémem je ale spíš to, jak scripty automatizovaně spouštět. Je to opruz to psát...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ty pojmenováváš tabulky jednotným číslem? Já vždy množným. Konkrétně v tomhle případě bych tam nechával informace o všech verzích, které se tam kdy instalovaly, může se to hodit. Bude tam tedy verzí víc, tím spíš ji pak pojmenovat množně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, jednotným číslem. Jsem na to navyklý. Například oficiální ukázková databáze SQL Serveru AdventureWorks používá jednotná čísla. Je to kvůli tomu, že jméno tabulky identifikuje jméno uchovávaného objektu.

Například LINQ2SQL pak jako jména seznamů přidá za jméno tabulky 's' a entity pojmenuje právě podle tabulek.

I když pravda je, že třeba Sharepoint tuhle konvenci nepoužívá. Ono je to víceméně na vkusu jednotlivce a na tom, jak je na vytváření jmen zvyklý. Obecně jsem pro používání jednotných čísel kde to jde - například Customer a CustomerCollection. Množné číslo pak v rámci vazeb CustomerOrders a zpětně OrderCustomer (1:N).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback