![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 15.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Korzystam z bazy danych postgresql, ale używam poradników z mysql i w razie błedów zapytań staram się poszukać informacji w google.
W poniższym przypadku trafiłem na nadmiar informacji i tutaj poproszę o pomoc. Przedstawię najlepiej cały kod z zakomentowaniem linijek dających błąd, to będzie mówić samo za siebie i więcej niż moje amatorskie wyjaśnienie. Jest to mój pierwszy projekt bazy danych/php i za krytyczne uwagi będę wdzięczny (varchary nie są skonfigurowane).
Ten post edytował Xenom 18.04.2012, 12:27:34 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 897 Pomógł: 40 Dołączył: 16.12.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Podaj komunikaty błędów, które się wyświetlają.
-------------------- how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
1.W przedostatniej linijce brakuje przecinka na końcu
2. W ostatniej linijce nie Index, a key lub Foreign key i brak definicji nazwy indexu |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 15.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ok dzięki za radę, poradźcie mi teraz, czy tak wykonana db z referencjami jest dobrą konstrukcją, czy referencje poniżej nie powinny być umieszczane?
Ten post edytował Xenom 19.04.2012, 07:34:56 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Po mojemu jest to bardzo zła konstrukcja.
1. Kwestia porządku: Jeżeli tworzysz tabelę users, to kluczem powinno być id_users. Dla tabeli products id_products 2. Dla kluczy głównych obowiązkowo autoincrement 3. Za pomysł uczynienia kluczem głównym pola VARCHAR w tabeli companies należy Cię wybatożyć 4. Pola na pieniądze nie float, a numeric lub decymal 5. Pole na datę nie typu Varchar, a np DATETIME 6. Brak powiązań między tabelami 7. Takie dane jak telefon lepiej przechowywać w polach INT 8. Za mało kluczy zewnętrznych wymuszających więzy integralności 9. Widzę pole start_date. Jeżeli masz zamiar określać odstępy między datami, to obowiązkowo typ Timestamp 10. NIP, regon to pola typu INT (pomyśl jak będzie wyglądać wyszukiwanie po numerze nip) W ramach higieny języka polskiego zapytam czemu te nazwy tabel są po angielsku. Na osłodę dodam, że to są typowe błędy, które popełniał każdy (ze mną włącznie) ![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 15.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Po mojemu jest to bardzo zła konstrukcja. 1. Kwestia porządku: Jeżeli tworzysz tabelę users, to kluczem powinno być id_users. Dla tabeli products id_products 2. Dla kluczy głównych obowiązkowo autoincrement 3. Za pomysł uczynienia kluczem głównym pola VARCHAR w tabeli companies należy Cię wybatożyć 4. Pola na pieniądze nie float, a numeric lub decymal 5. Pole na datę nie typu Varchar, a np DATETIME 6. Brak powiązań między tabelami 7. Takie dane jak telefon lepiej przechowywać w polach INT 8. Za mało kluczy zewnętrznych wymuszających więzy integralności 9. Widzę pole start_date. Jeżeli masz zamiar określać odstępy między datami, to obowiązkowo typ Timestamp 10. NIP, regon to pola typu INT (pomyśl jak będzie wyglądać wyszukiwanie po numerze nip) W ramach higieny języka polskiego zapytam czemu te nazwy tabel są po angielsku. Na osłodę dodam, że to są typowe błędy, które popełniał każdy (ze mną włącznie) ![]() Serdeczne dzięki, już piszę dlaczego, co i jak zrobiłem i też mam pytania. 1. tabela użytkowników będzie podłączona do facebooka i robiłem ja z zamysłem, że podczas logowania użytkownik będzie szukany właśnie po tym id, w sensie że nadawanie jako główny klucz nowego id spowolni wyszukiwanie danych po logowaniu. Czy to dobre podejście, czy jednak zwykły SERIAL i nowe id dodatkowo jako klucz główny? 2. autoincrement to nie jest przypadkiem SERIAL w postgresql? 3. Podczas logowania firm, czy wyświetlania formularzy bedzie wykorzystywany login, czy id_firma będzie lepsze. Moja logika polega na tym, że skrypt szuka tylko loginu i nie musi sortować wszystkich danych(rozumiem, że klucz główny powoduje takie sortowanie), teraz jakbym miał znaleźć firme po id to DB musi jechać każde id pokolei. Jak ten tok myślenia jest zły to też napiszcie, żebym zrozumiał dlaczego. 6. Nie bardzo rozumiem, mam pewne wyobrażenie jak ta aplikacja ma działać i na bazie czego pobierać dane z DB, to dałem pod tabelę control. W jakim sensie brak powiązań? Resztę rozumiem, w każdym razie dzięki za rady. Co do pytania o angielskie nazewnictwo, to jest to pewne przyzwyczajenie, mimo że mam taki sobie angielski. Od jakiegoś czasu zajmuję się tworzeniem gier free(aktualnie na fonline engine, angel script, który bardzo podobny jest do cpp) i współpracowałem z osobami z wielu krajów, dlatego ten angielski na siłę wbijam :-) Co do tworzenia powyższej aplikacji to nie mam absolutnie doświadczenia w tej działce. Jest to aplikacja na życzenie szefa(choć firma nie zajmuje się programowaniem), więc w pracy muszę bardziej działać i staram się to jakoś ogarnąć, jednak wolę poświęcić dużo więcej czasu na fundamentalne konstrukcje typu DB i zrobić to jakoś przyzwoicie z Waszą pomocą. Inna sprawa, że świetnie się przy tym bawię, a dodatkowo uczę nowych rzeczy, co daje mi przyjemność i radochę z pracy. ps. Tu taki przykład gry http://www.youtube.com/watch?v=ZjA2wBU10z8...hwgWSDJZYVInzg= , gdzie właśnie z wykorzystaniem fonline engine staramy się przenieść realia fallouta 2 i tactics na mmo :-) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Serdeczne dzięki, już piszę dlaczego, co i jak zrobiłem i też mam pytania. 1. tabela użytkowników będzie podłączona do facebooka i robiłem ja z zamysłem, że podczas logowania użytkownik będzie szukany właśnie po tym id, w sensie że nadawanie jako główny klucz nowego id spowolni wyszukiwanie danych po logowaniu. Czy to dobre podejście, czy jednak zwykły SERIAL i nowe id dodatkowo jako klucz główny? 2. autoincrement to nie jest przypadkiem SERIAL w postgresql? 3. Podczas logowania firm, czy wyświetlania formularzy bedzie wykorzystywany login, czy id_firma będzie lepsze. Moja logika polega na tym, że skrypt szuka tylko loginu i nie musi sortować wszystkich danych(rozumiem, że klucz główny powoduje takie sortowanie), teraz jakbym miał znaleźć firme po id to DB musi jechać każde id pokolei. Jak ten tok myślenia jest zły to też napiszcie, żebym zrozumiał dlaczego. 6. Nie bardzo rozumiem, mam pewne wyobrażenie jak ta aplikacja ma działać i na bazie czego pobierać dane z DB, to dałem pod tabelę control. W jakim sensie brak powiązań? Ad. 1 Dwa problemy - facebook jak i wiele innych ma możliwość zmiany loginu do konta. Co wtedy zrobisz? - SELECT name,date FROM control JOIN users USING(id_user) Czyli podstawowe złączenie przy większej ilości rekordów będzie zwalniać gdyż porównywanie tekstów test kosztowne Ad.2 Tego nie wiem Ad. 3 Źle kombinujesz, ale radzę na początek nie zajmować się sposobem działania optymalizatora bazy danych. Wystarczy przyjąć, że sposób wyszukiwania zależy od konstrukcji pytania sql oraz indeksów, najszybsze są operacje na liczbach stałoprzecinkowych, a najwolniejsze jest porównywanie tekstów. Ad. 6 Konstrukcja bazy ma być taka, że każde zapytanie sql będzie używać indeksu i nie będzie możliwe wpisanie danych powodujących niespójność bazy. Przykładowo zdefiniowanie klucza obcego id_user not null w tabeli control uniemożliwi dodanie rekordu do tej tabeli jeżeli w tabeli user nie będzie rekordu o odpowiednim id. Nie da się też usunąć rekordu z tabeli users jeżeli będą rekordy o takim id w tabeli control. W Twoim schemacie tabela companies nie jest powiązana z niczym, więc trudno mówić o indeksach i spójności. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 20:46 |