Słowniki i wpisywanie produktów do bazy.

0

Mam pytanie odnośnie sposobu realizacjitakiego problemu, mianowicie...

Mamy zrobic np. chemiczny katalog produktow , produkt beda charakteryzowaly takie parametry jak np opis, nazwa, sklad chemiczny, typ otuliny itd..... i teraz niektore z tych pol maja byc polami wpisywanymi ze slownika nie z palca, czyli wybierane z jakiegos selecta.

Czyli rozumiem ze oprocz samej tabeli glownej z produktem musze miec tabelki slownikowe np. tabela typ_otuliny itd.....

I teraz moje pytanie jezeli wpisuje produkt do bazy i wybieram typ otuliny z innej tabelki (slownika) to w tabeli produktow wpisuje sie ID ze slownika czy normalnie nazwe ?

Np slownik moze miec pola: id, nazwa, dostepnosc , czyli jezeli ktos uzna ze dane pole juz nie jest potrzebne to usuniecie bedziepolegalo na ustaienie dostepnosci na 0 np, bo nie mozna jej wykasowac jezeli bedziemy zapisywac do bazy ID.

Jak sie taki problem realizuje profesjonalnie ?

0

Przede wszystkim zapisujesz id, bo wtedy masz mozliwosc niejako 'automatycznej' aktualizacji wartosci, jezeli zmienisz ja tylko w tabeli slownikowej. Jesli chodzi o usuwanie, to najlepiej zrobic tak jak mowisz - wtedy stare wpisy zostaja aktualne, a wartosc nie pojawia sie np. w select, zeby ja mozna bylo ponownie wybrac.

0

Ja tam 'słownik' generowałbym w locie, dając tam wszystkie wpisane dotychczas opcje.

0

No ale gdzies te wszystkie wpisane dotychczas i tak musisz miec wpisane, nie?

0
mysz napisał(a)

Ja tam 'słownik' generowałbym w locie, dając tam wszystkie wpisane dotychczas opcje.

Taka opcje mozna zrobic tylko wtedy jezeli wszystkie informacje wpisujesz w jednej tabeli, wtedy dajesz zapytanie z distinct i ci generuje slownik w locie ale wlasnie o to chodzi zeby zaoszczedzic miejsca w bazie i nie pakowac calych informacji i powielac w kazdym rekordzie tylko korzystac z tego zapisujac same id.
Twoja metoda jest dobra ale pod warunkiem ze mamy malo danych i wiemy ze one sie za bardzo nie rozrosną. U mnie bedzie az 8 slownikow wiec wszystkie info pchac do tabeli powielając wpisy to bez sensu.

0

Oszczędzanie tego typu miejsca w bazie imo mija się z celem. Bazy danych są przystosowane do przechowywania dużej ilości informacji, więc nie jest to najlepszy argument. Szczególnie, że to wcale tak dużo tych informacji nie będzie.
Zakładając 50 znaków na każdą daną (a jak dasz varchar to znacznie mniej), jest to 50B * 1000000 rekordów daje to nam ca. 47.5MiB. Przy tej ilości rekordów ten rozmiar jest śmieszny.

Co do kilku tablic - od tego jest choćby UNION.

Ale generalnie chyba bym zrobił jednak osobną tabelkę (czyli normalizacja) i tylko ID elementu wtedy przechowujesz w tabeli głównej.

Kwestia jest tego typu, że w zależności od wykonywanych operacji na tych tabelach, raz jest lepsza jedna metoda, raz druga... :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0