Kako da postavim vise kolona na index u MySql
Prikazujem rezultate 1 do 4 od 4

Tema: Kako da postavim vise kolona na index u MySql

  1. #1
    Obećava
    Učlanjen
    09.11.2015.
    Pol
    muški
    Poruke
    72
    Reputaciona moć
    12

    Podrazumevano Kako da postavim vise kolona na index u MySql

    Zelim da koristim vise indexa nad jewdnom tabelom a ne primary key. Znam punoi toga o indexima i B-stablu kao i primarnom i sekundarnim kljucevima kao i o normalizacioji baze. Koristim MySql i dosta sam procitao i MySql-u i trazio po netu primer gde se upotrebljava SELET, INSERT, UPDATE nad tabelom koja ima 5 indexa. Tabela je radgk (radna baza za glavnu knjigu za one koji se razumeju u knjigovodstvo) indexi si godgk CHAR (4) (godina recimo "2018"), brnalogafp CHAR (4) ( broj naloga "60"), kontogk CHAR (8) (konto "2020"), stavkagk CHAR (20)(opis atavke "racun-123"), sifmtgk CHAR(10)(sifra mesta troska "1000"). Index je u ovom redosledu. Kada pokusam sledece dobijam poruku o neupisivanje podataka u tabelu. Evo dela programa

    string wnadimt = "SELECT godgk, kontogk, brnalgk, dugujegk, potrazgk, stavkagk, sifmtgk " +
    "FROM radgk WHERE godgk=@godgk + kontogk=@kontogk +
    brnalgk=@brnalgk + stavkagk=@stavkagk + sifmtgk=@sifmtgk";
    MySqlCommand cmdag = new MySqlCommand(wnadimt, conmt);
    cmdag.Parameters.AddWithValue("@godgk", qgodina);
    cmdag.Parameters.AddWithValue("@kontogk", wkontogk);
    cmdag.Parameters.AddWithValue("@brnalgk", qbrnalf);
    cmdag.Parameters.AddWithValue("@stavkagk", wstavkarp);
    cmdag.Parameters.AddWithValue("@sifmtgk", wsifmtgk);
    System.Data.Common.DbDataReader reader = await cmdag.ExecuteReaderAsync();
    while (await reader.ReadAsync())
    {
    string pduguje = reader["dugujegk"].ToString().Trim();
    string ppotraz = reader["potrazgk"].ToString().Trim();
    if (pduguje != "")
    {
    wimadugujegk = 1;
    zbirdug = System.Convert.ToDecimal(pduguje);
    zbirpot = 0;
    }
    if (ppotraz != "")
    {
    wimapotrazgk = 1;
    zbirpot = System.Convert.ToDecimal(ppotraz);
    zbirdug = 0;
    }
    }
    reader.Close();
    }
    conmt.Close();

    evo i primera sa INSERET

    MySqlConnection cona;
    myConnectionString = pwput;
    cona = new MySql.Data.MySqlClient.MySqlConnection();
    cona.ConnectionString = myConnectionString;
    try
    {
    cona.OpenAsync();
    if (cona.State == ConnectionState.Open)
    {
    int qkontogk = Convert.ToInt32(wkontogk);
    //int qbrnalgk = Convert.ToInt32(wbrnalogafp);
    string upisi = "INSERT INTO radgk (godgk, kontogk, brnalgk, datnalgk, stavkagk, vrdokgk, datracgk, rokplgk, dugujegk, potrazgk, dpogk, sifmtgk, vezadokgk )" +
    " VALUES (@godgk, @kontogk, @brnalgk, @datnalgk, @stavkagk, @vrdokgk, @datracgk, @rokplgk, @dugujegk, @potrazgk, @dpogk, @sifmtgk, @vezadokgk )";
    tran = cona.BeginTransaction();
    MySqlCommand cmda = new MySqlCommand(upisi, cona);
    cmda.Transaction = tran;
    cmda.Parameters.AddWithValue("@godgk", wgodina);
    cmda.Parameters.AddWithValue("@kontogk", qkontogk);
    cmda.Parameters.AddWithValue("@brnalgk", wbrnalogafp);
    cmda.Parameters.AddWithValue("@datnalgk", wdatumnaloga);
    cmda.Parameters.AddWithValue("@stavkagk", wstavkarp);
    cmda.Parameters.AddWithValue("@vrdokgk", wsifdok);
    cmda.Parameters.AddWithValue("@datracgk", wdatumdok);
    cmda.Parameters.AddWithValue("@rokplgk", wrokplrp);
    cmda.Parameters.AddWithValue("@sifmtgk", wsifmtgk);
    cmda.Parameters.AddWithValue("@dpogk", wdporp);
    cmda.Parameters.AddWithValue("@vezadokgk", wvezadokrp);
    if ((dduguje != 0) & (wbiodug == 0))
    {
    cmda.Parameters.AddWithValue("@dugujegk", dduguje);
    cmda.ExecuteNonQuery();
    tran.Commit();
    cona.Close();
    //wpotraz = "0";
    return;
    }
    if ((dpotraz != 0) & (wbiopot == 0))
    {
    cmda.Parameters.AddWithValue("@potrazgk", dpotraz);
    cmda.ExecuteNonQuery();
    tran.Commit();
    cona.Close();
    //wduguje = "0";
    return;
    }
    }
    else
    {
    MessageBox.Show(" NISTE USPELI DA SE KONEKTUJETE NA SERVER\r\n ZATVORITE PROGRAM PA POKUSAJTE PONOVO \r\n");
    }
    }
    catch (MySqlException ex)
    {
    try
    {
    tran.Rollback();
    MessageBox.Show(" DOŠLO JE DO GREŠKE PRI UPISU PODATAKA U GLAVNU KNJIGU\r\nKAKO OVI PODACI NISU UPISANI PROVERITE PA PONOVITE UPIS !! ");
    }
    catch (MySqlException ex1)
    {
    MessageBox.Show(" DOŠLO JE DO GREŠKE PRI UPISU PODATAKA U BAZU\r\nKAKO OVI PODACI NISU UPISANI, PONOVITE UPIS !! ");
    }
    finally
    {
    if (cona.State == ConnectionState.Open)
    {
    cona.Close();
    }
    }
    switch (ex.Number)
    {
    case 0:
    MessageBox.Show(" NISTE USPELI DA SE KONEKTUJETE NA SERVER, ZATVORITE PROGRAM PA POKUSAJTE PONOVO");
    Close();
    break;
    case 1042:
    MessageBox.Show(" NIJE AKTIVAN SERVER, PODIGNITE SERVER PA PONOVITE KONEKTOVANJE ");
    Close();
    break;
    }
    }


    Hvala na vremenu



  2. #2
    gost 390446 nije na forumu
    “Kako ja mogu biti nacionalista ako sam svetski prvak?"
    Iskusan
    Učlanjen
    29.11.2016.
    Pol
    muški
    Poruke
    5.702
    Tekstova u blogu
    2
    Reputaciona moć
    0

    Podrazumevano Re: Kako da postavim vise kolona na index u MySql

    Ne razumem, zasto izbegavas primary key? Zasto sebi komplikujes situaciju? Kakav je to scenario da ti trebaju indeksi nad 5 kolona?
    Best Practicies je da za svaku tabelu uvek imas jednu ID kolonu, koja ce ti biti primary key, a tip podataka GUID (odnosno UNIQUEIDENTIFIER).
    Poslednji put ažurirao/la gost 390446 : 05.03.2018. u 14:22

  3. #3
    Obećava
    Učlanjen
    09.11.2015.
    Pol
    muški
    Poruke
    72
    Reputaciona moć
    12

    Podrazumevano Re: Kako da postavim vise kolona na index u MySql

    Nije u pitanju scenario vec potreba u knjigovodstvu kod otvorenih stavki, jer mora da se pronadje konto, sifra kupca, opis stavke, duguje ili potrazuje. Primarni kljuc je dosta sporiji kod pretraga mada zauzima manje mesta na disku. Indeksi pretrazuju po B-stablu i zato je mnogo brza pretraga ali druga strana medalje je sto zauzimaju vise prostora da disku tj. uz samu tabelu podataka smestaju i indekse. primarni i sekundarni kljucevi su namenjeni za rad sa povezanim tabelama, indexi to ne mogu.
    Rseio sam problem nije bio u mom programu vec u registri bazi windowsa 10.
    Zahvaljujem se na pomoci.

  4. #4
    gost 390446 nije na forumu
    “Kako ja mogu biti nacionalista ako sam svetski prvak?"
    Iskusan
    Učlanjen
    29.11.2016.
    Pol
    muški
    Poruke
    5.702
    Tekstova u blogu
    2
    Reputaciona moć
    0

    Podrazumevano Re: Kako da postavim vise kolona na index u MySql

    Primarni kljuc je, u dubini, implementiran na isti nacin kao indeks - dakle i on je spakovan u B-Tree strukturue. Primarni kljuc je samo apstrakcija Data Definition Language-a baze podataka, nista drugo.
    Indeksi su zadrzali upotrebu samo zbog backward kompatibilnosti, inace kompletna njihova funkcija je preuzeta pomocu primarnog kljuca.
    Sekundarni kljuc je nesto sto se nigde ne definise posebno, predstavlja iskljucivo neku proizvoljnu kolonu (ili skup kolona) koja bi trebalo da je u stanju da jedinstveno odredi zapis u tabeli. U sustini, to se skoro nigde i ne koristi. Ono sto si ti mozda mislio pod sekundarnim kljucem, je Foreign Key - preneseni kljuc, koji sluzi da bismo definisai vezu izmedju dve tabele.

    Danas (i zadnjih 20 godina, od kada sam u ovim vodama), sve tabele u relacionim bazama podataka, kreiraju se tako sto svaka ima svoj primary key, a relacije izmedju njih se uspostavljaju putem foreign key-a.
    I to je to, bez neke velike filozofije - radi brzo, precizno, jednoznacno, i umogucuje ti vrlo lako da pravis sve vrste upita, transakcija i stored procedura, kao i trigger-a, i svega ostalog.
    A sve je to jos dodatno unapredjeno onog trenutka kada je GUID tip podataka (UNIQUEIDENTIFIER) poceo da se koristi kao tip podataka za primarni kljuc - obezbedjena je jednoznacnost svih podataka u bazi podataka, ne samo na nivou tabele, i ostavljeno je programeru da moze da definise neverovatno kompleksne upite, koji ce se izvrsavati sa 100% tacnoscu.
    Poslednji put ažurirao/la gost 390446 : 06.03.2018. u 13:43

Slične teme

  1. Pomagajte da postavim sajt iz dreamwiever-a MX
    Autor NICS u forumu Web dizajn
    Odgovora: 3
    Poslednja poruka: 28.11.2003., 09:19
  2. Kako da u Windows-u 98 postavim autorun opciju ???
    Autor nidza89 u forumu Operativni sistemi
    Odgovora: 3
    Poslednja poruka: 04.11.2003., 22:35
  3. Gde mogu da postavim sajt
    Autor Bond u forumu Internet
    Odgovora: 4
    Poslednja poruka: 29.10.2003., 02:47
  4. kako da postavim brojac...
    Autor pin u forumu Web dizajn
    Odgovora: 3
    Poslednja poruka: 29.10.2003., 02:43
  5. kako da postavim link?
    Autor absonic u forumu Web dizajn
    Odgovora: 4
    Poslednja poruka: 25.10.2003., 01:58

Pravila za slanje poruka

  • Ne možete kreirati novu temu
  • Ne možete poslati odgovor
  • Ne možete dodati priloge
  • Ne možete prepraviti svoju poruku
  •