Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Granice normalizacji
Forum PHP.pl > Forum > Bazy danych
ktuvok
Projektuję internetową bazę klientów pewnej firmy, opartą o MySQL. Firma ma oddziały, każdy z nich może mieć swoich klientów. Może się zdarzyć, że dany klient będzie klientem oddziału A i oddziału B równocześnie.

Założyłem, że dane klienta będą zapisane w bazie jednorazowo, a potem jedynie linkowane na potrzeby kolejnych zakupów. Ale okazuje się, że klient wprowadzony przez użytkownika oddziału A nie może być zmieniony przez użytkownika oddziału B.

Czy oznacza to denormalizację i konieczność wpisywania wiele razy tego samego klienta do bazy? A może jest jakiś inny złoty środek? Jak się to robi w profesjonalnych systemach?

Pozdrawiam,
K
anas
Hej.

Jak najbardziej można to rozwiązać - raz możesz dodać do tabeli przechwoującej klientów klucz identyfikujący użytkownika który dodał go do systemu. Wtedy na poziomie aplikacji dając możliwość wstawiania klientów z bazy do zamówienia dajesz wgląd do wszystkich. A w momencie edycji sprawdzany zostaje warunek czy edytująca osoba była również tą która ów klienta dodała. -> Jest to proste i skuteczne rozwiązanie Twojego problemu. Sprawa komplikuje się, gdy pojawi się administrator który ma mieć możliwość edytowania wszystkich klientów, niezależnie od tego czy ich dodał czy nie - wtedy należy rozwiązać to na poziomie aplikacji, a dane kto jest kim (jakie ma uprawnienia w projektowanym systemie) przechowywać np. w tabeli użytkowników systemu.

pozdrowka

anas
ktuvok
Klucz określający użytkownika oczywiście mam. Tyle tylko, że jeśli drugi użytkownik chce "użyć" tego samego klienta, to są 2 rozwiązania:

1. stworzyć drugi rekord dla tego samego klienta, dublując większość danych (jeśli dane klienta się nie zmieniły, to oba rekordy będą różniły się tylko oznaczeniem juzer, który wpisał rekord),
lub:
2. pozwolić drugiemu z juzerów edytować tamten rekord...

Chyba że jest trzecie wyjscie?

Pozdrawiam,
K
anas
Hej.

No tak jak napisalem wyzej jest rozwiazanie... tylko przeniesc to musisz na aplikacje - zarzadzanie uprawnieniami do edycji klientow w bazie i do ich uzywania

- kazdy uzytkownik systemu musi miec prawo uzywania isniejacych Klientow w bazie, np do wstawiania ich w realziowane zlecenie itd, ale nie moze edytowac ich danych jak nie ma do tego uprawnien(nie dodal ich do bazy) - w innym przypadku(gdy user dodawal Klienta od bazy) system pozwala mu na zmiana danych - na poziomie aplikacji to sie odbywa a nie bazy danych - Ty w bazie jedynie oznaczasz kto dodaj Klienta poprzez powiazanie tabeli Klienci z tabela Uzytkownicy za pomoca klucza UzytkownikID - czy jak tam to sobie nazwales.

pozdrawiam

anas
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.