Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z połączonymi tabelami
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
witam,

mam problem, nad którym myślę już dłuższy czas i każde rozwiązanie, które wymyśle nie wydaje mi się w pełni doskonałe...A może po prostu całkiem źle do tego podchodzę bo im więcej o tym myślę tym bardziej jestem skołowany.

Mam 2 tabele. Zamówienia i pozycje zamówieniowe. Do pierwszej wprowadzamy informacje o zamówieniu (id, numer zamówienia, data wpływu, zamawiający, TERMIN REALIZACJI itd), a do drugiej informacje o pozycjach z zamówienia (id, id zamówienia, ilość, produkt, rabat, TERMIN REALIZACJI itd). I problem polega na tym, że połowę zamówień firma wysyła do klienta jako całość w jednym terminie, a drugą połowę wysyła na raty bo zamawiający życzy sobie aby różne pozycje w zamówieniu były dostarczane w różnych terminach. (stąd kolumna TERMIN REALIZACJI w tabeli pozycji zamawianych). W bazie mam harmonogramy wysyłek, gdzie chce żeby były wyświetlane całe zamówienia (w przypadku jednego terminu) lub pojedyncze pozycje z zamówień (w przypadku różnych terminów). Tak samo podsumowania sprzedaży. Żeby wszystko się zgadzało część zamówień muszę "rozbijać" na pozycje żeby wszystko było ok. Na razie obchodzę to poprzez funkcję UNION. Łączę 2 tabele w zależności od zamawiającego i raz mam termin z zamówienia, a raz z pozycji(do tej pory tylko 2 firmy podają różne terminy na zamówieniach, ale za chwilę może się to zmienić, albo ta sama firma raz będzie chciała całość, a raz na raty). Ale tak jak juz pisałem to rozwiązanie jest złe. Mam kilka innych pomysłów:

1. Wprowadzić dodatkową kolumnę, gdzie przy wprowadzaniu zamówień będzie do wyboru: "traktuj zamówienie jako całość" i "rozbij zamówienie na pozycje". Wtedy UNION mogę połączyć na podstawie tej dodatkowej kolumny. Tylko że tutaj widzę taki problem że jak ktoś zapomni wpisać daty w TERMIN REALIZACJI to dane z tego zamówienia nie pokażą się w harmonogramie i w podsumowaniach (bo one są oparte na datach i okresach). Nie mogę tego pola ustawić jako obowiązkowego do wypełnienia, bo raz należy wypełnić TERMIN REALIZACJI w tabeli zamówienia, a raz w tabeli pozycje. W sumie to pisząc tego posta myślę że to rozwiązanie jest najlepsze, więc o innych gorszych nie będę wspominał. Brakuje mi tylko jakiegoś rozwiązania - jeśli wybieramy "traktuj zamówienie jako całość" to obowiązkowe pole TERMIN REALIZACJI mamy w tabeli zamówienia, a jeśli wybieramy "rozbij zamówienie na pozycje" to wtedy obowiązkowe pole to TERMIN REALIZACJI z tabeli pozycji. Istnieje taka możliwość w MySqlu?
trueblue
Nie wiem czy dobrze rozumiem Twój problem, ale wprowadziłbym dodatkową tabelę pomiędzy zamówienia, a pozycje zamówienia.
Musiałbyś zadbać na poziomie aplikacji, aby wprowadzić odpowiednie powiązanie.
Tabela przechowywałaby id_zamówienia oraz identyfikator. Identyfikator byłby unikalny w ramach zamówienia i wskazywałby na "paczkę" pozycji zamówienia i/lub na pojedynczą pozycję.
Pyton_000
Albo rozbijaj zamówienie z różnymi terminami realizacji na oddzielne zamówienia. Masz wtedy per/zamówienie zrealizowane czy nie. Ułatwi Ci to ewidencję, nie przeoczysz zamówienia jeśli termin się posunął.
mihmih
dzięki za podpowiedzi.

pyton_000 - nie chciałbym rozdzielać zamówień bo za dużo już mam powiązań między tabelami żeby teraz przeprowadzić tak drastyczną zmianę.

trueblue - mam taki identyfikator, na podstawie którego pozycje z zamówień są "wrzucane" na WZ lub fakturę. Ale to nie rozwiązuje moich problemów z wpisywaniem terminów w odpowiednie miejsce.

Myślałem jeszcze na tym cały weekend i stwierdziłem że zrobię tak. Tabelę UNION zrobię na podstawie terminów realizacji - jeśli jest termin w pozycjach to rozbiję zamówienie na pozycję, jeśli nie ma to nie będę rozbijał i wrzucę termin z tabeli zamówień. Jedyny problem to jak ktoś nie wpisze terminu ani tu ani tu. Ale mam raczej myślących użytkowników, a w racie czego wrzucę sobie kwerendę gdzieś na widok z pozycjami gdzie żaden termin nie jest uzupełniony. I będę mógł reagować na bieżąco.

mam jeszcze jedno pytanie do mojego problemu. Czy kwerenda z funkcją UNION może być edytowalna? Czy to zależy może od programu "frontendowego"? Bo w moim śmiesznym programiku (Base - Libreoffice) raz mogę edytować kwerendy a raz nie. Czy MySql również ogranicza niektóre kwerendy jeśli chodzi o ich edycje? Chodzi mi oczywiście o edycję danych z kwerendy.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.