Leniobitz
17.09.2013, 10:45:56
Witajcie, ma pewien problem:
w swojej bazie mam rozne firmy, kazda firma ma kilka tabel, których nazwy wyglądają tak: firma_x, firma_y itd. mam skrypta, który pozwala na edycję nazwy firmy, chciałbym też zeby zmienialy się automatycznie prefiksy tych tabel. Jak to zrobic?
mar1aczi
17.09.2013, 11:32:26
SELECT table_name FROM information_schema.TABLES
WHERE table_schema = [DATABASE_NAME];
w połączeniu z
RENAME TABLE
Crozin
17.09.2013, 11:54:33
Czekaj, czekaj, czekaj... masz to zrobione w najgorszy z możliwych sposobów i chcesz jeszcze bardziej utrudnić sobie życie.
Nie powinieneś w ogóle robić osobnych tabel dla każdej z firm. Dodaj po prostu jedną tabelę FIRMY z kolumnami ID, NAZWA i czymkolwiek tam jeszcze chcesz. Następnie w każdej z tabel, gdzie przechowywane są dane specyficzne dla danej firmy dodaj kolumnę ID_FIRMY, a w zapytaniach SQL pobieraj tylko te rekordy, które należą do strony, aktualnie przeglądanej firmy.
Jeżeli z jakiegoś powodu nie możesz zrobić tego normalnie, w prefiksach tabel stosuj jakiś unikalny klucz, a nie nazwę firmy. Nigdy nie powinieneś nawet próbować zmieniać nazw tych tabel.
Leniobitz
17.09.2013, 12:07:19
Dzięki Panowie.. Crozin dałeś mi bardzo dobry pomysł z tymi unikalnymi prefiksami. Uważam, że potrzebuję wielu tabel a nie jednej ponieważ... hmm może inaczej napiszę do czego to potrzebne, ciekaw jestem Waszej opinii co do tego, czy wybrałem dobre rozwiązanie:
User wprowadza nazwe firmy - tworzy się tabela tej firmy.
User wprowadza produkty firmy - dodany zostaje wpis do bazy firmy tworzy sie tabela z dla konkretnego produktu.
Wiem, że można to wszystko wrzucić do tabeli firmy, ale później zostanie załączone cykliczne wyszukiwanie - moja apka będzie się łączyć z pewną bazą danych, będzie musiała przekopać ponad 80 mln rekordów i dodać do tabeli konkretnego produktu wszystkie znalezione podobne produkty. Dlatego doszedłem do wniosku, że lepiej zrobić to w oparciu o osobne tabele bo inaczej w tabeli firmy mialbym straszny bałagan: wszystkie produkty tej firmy a dodatkowo wyniki tego wyszukiwania.. Co o tym sądzicie?
Crozin
17.09.2013, 12:21:49
Źle to zrobiłeś. Potrzebujesz raptem trzy tabele i najbardziej podstawowe indeksy na kolumnach z identyfikatorami:
Kod
FIRMY (id, nazwa, ...)
PRODUKTY (id, id_firmy, nazwa, ...)
PODOBNE_PRODUKTY (id_produktu, id_podobnego_produktu)
Będziesz miał porządek, a pobieranie danych będzie szybkie. Jest to też standardowy schemat, z którym poprawnie będą współpracowały wszystkie narzędzia powiązane z bazami danych.
mar1aczi
17.09.2013, 12:25:08
Popieram wypowiedź Crozin'a całkowicie.
Leniobitz
17.09.2013, 13:04:11
no tak, pomysł dobry, tylko ze pozniej po zakonczeniu tego szukania bedzie działało narzędzie, które będzie sprawdzało te wyniki na podstawie parametrow - te "wazniejsze" sprawia ze wynik bedzie uwazany za bardziej podobny. i pytanie czy to sie nie bedzie chrzanic, jak w jednej tabeli beda rekordy wszystkich firm.. ale w sumie zawsze moge wyciagnac produkty po id firmy i produktu... dobra dzięki Panowie, mega mi pomogliście!
Crozin
17.09.2013, 13:50:08
W takim razie do tabeli PODOBNE_PRODUKTY dodajesz jeszcze jedną kolumnę, w której będziesz zapisywał stopień podobieństwa. Następnie pobierając podobne produkty, sortuj je po prostu względem tej kolumny.
Nic Ci się nigdzie nie wymiesza, ponieważ wszędzie masz informację (klucz obcy) co do czego należy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.