ktuvok
12.05.2005, 08:10:08
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
12.05.2005, 13:45:21
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
12.05.2005, 16:43:48
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
12.05.2005, 17:43:49
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.