Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Przechowywanie dat - relacje czy jedna tabela?
szuki
post 27.09.2012, 09:13:18
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2012

Ostrzeżenie: (0%)
-----


Witam, chciałbym zaczerpnąć rady w sprawie baz danych.

Napisałem pętlę, która sprawdza, który towar w sklepie został sprzedany. W efekcie otrzymuje numery ofert (sprzedanych) i wykonuję kolejną pętle by pobrać datę i ilość sztuk. Problem w tym, że nie chcę tych danych tylko wyświetlić, a zapisać dalej w bazie.

Jak w takim razie sensownie zapisać np:


5 szt | 15.09.2012 |
1 szt | 14.09.2012 |
2 szt | 13.08.2012 |

by móc swobodnie na tym operować (piszę ten skrypt by pobierać statystyki według daty, ilości sprzedanych itd)?

Lepiej zrobić jeden rekord z polem TEXT i tam wypisać dane (z separatorami), czy może lepiej zrobić relację:

numer_oferty | szt | data

i trzymać to w osobnej tabeli? Tylko te ostatnie rozwiązanie wydaje się być mało rozsądne przy większej sprzedaży.

Może ma ktoś lepszy pomysł?

Ten post edytował szuki 27.09.2012, 09:15:23
Go to the top of the page
+Quote Post
b4rt3kk
post 27.09.2012, 09:24:03
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Myślę, że nie ma sensu przepisywać już istniejących i myślę, że powiązanych ze sobą danych, wystarczy zastosować jedno zapytanie by je pobrać.

Załóżmy, że w jednej tabeli masz id towaru, a w drugiej id zamówienia, id towaru, liczbę sztuk oraz datę.

  1. SELECT zamowienia.id_zamowienia, zamowienia.sztuk, zamowienia.DATA, towary.id_towaru FROM zamowienia INNER JOIN towary ON zamowienia.id_towaru=towary.id_towaru


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Sephirus
post 27.09.2012, 09:39:46
Post #3





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


dokładam się do opinii przedmówcy dodając, że można sobie zrobić z tego ładny widok, na którym potem można pracować


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
szuki
post 27.09.2012, 09:56:38
Post #4





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2012

Ostrzeżenie: (0%)
-----


Cześć, dzięki za radę. Moje niedopatrzenie, bo nie zaznaczyłem, że informacje z drugiej pętli (tj. data, ilość szt.) są pobierane z innego serwera i "generowane w locie". Muszę najpierw je pobrać (co już robię) by sensownie zapisać i dopiero na nich operować.

Także zastanawiam się czy trzymać powiedzmy 6 dat/szt w jednym rekordzie, oddzielonych separatorami (np: 2012-09-25,1;2012-08-23,2;) czy każdą datę trzymać osobno - jako jeden rekord. Co będzie lepsze, jeżeli później będę chciał selectem pobrać wszystkie rekordy o określonej dacie?

Czy jeżeli będę trzymał dane w postaci csv, to muszę pobierać każdy rekord by sprawdzić czy jest w nim dana data, czy zwykłe zapytanie z selectem wystarczy?



Go to the top of the page
+Quote Post
Sephirus
post 27.09.2012, 10:00:36
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie ma się co nad tym rozwodzić. Najlepsze rozwiązanie to skalowalne rozwiązanie w takich przypadkach bo nie do końca wiesz co potem można z tym robić (czasem wręcz można się kapnąć po zrobieniu tego że da się wyciągnąć jeszcze więcej). Zatem zrób oddzielny rekord dla każdego wpisu - nie baw się w CSV - to format zapisu plików a nie danych w bazie. Na danych wrzuconych w sposób standardowy można ładnie pracować, obrabiać je i wyświetlać dokładnie wg potrzeb - w przypadku CSV już sortowanie sprawiało by problem a co dopiero "Podaj mi ile sprzedano X dnia Y" - jak to wyciągniesz? smile.gif

Co do drugiego pytania to w sumie zwykłe zapytanie wystarczy ale będzie o wiele mniej wydajne i gdy masz możliwość wyboru - nie ma się co zastanawiać - zalet rozwiązania NIE-CSV jest pełno a podaj mi jedną zaletę CSV? smile.gif

Ten post edytował Sephirus 27.09.2012, 10:01:51


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
szuki
post 27.09.2012, 10:09:39
Post #6





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2012

Ostrzeżenie: (0%)
-----


Troszeczkę bałem się o wydajność przy wielotysięcznej liczbie rekordów, ale w sumie masz rację. Dobrze dobrane typy pól i powinno być ok nawet przy większej liczbie wpisów. Dziękuję za rady. Co do CSV, chyba żadnej.
Go to the top of the page
+Quote Post
Sephirus
post 27.09.2012, 10:34:35
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Zapewniam Cię że przy skomplikowanych zapytaniach większą wydajność i tak uzyskasz bez CSV - bo pracujesz na konkretnym polach - więc jeśli oto chodzi to wybór też jest dobry.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.06.2025 - 20:51