Nasza aplikacja zawiera między innymi sklep internetowy, a użytkownicy są zwykle proszeni o zarejestrowanie się przed zakończeniem sprzedaży, tworząc w ten sposób unikatowy customer_ID
. Po powrocie mogą się zalogować, a ich dane kontaktowe i historia transakcji są pobierane z bazy danych.Jakie są sposoby przechowywania informacji o anonimowym/gościnnym użytkowniku w bazie danych?
Obecnie badamy, co zrobić w przypadku klienta "anonimowego" lub "gościa", otwierając sklep internetowy dla klientów, którzy nie chcą się zarejestrować, a także dla sprzedaży zalogowanej w aplikacji backendowej, gdy przyjmowanie adresu e-mail klienta, adresu pocztowego itp. jest po prostu zbyt czasochłonne. Rozwiązanie ma również aplikacje poza sklepem internetowym.
Wiele firm korzysta z tej samej bazy danych, a baza danych jest zbudowany na party model struktury, więc musimy przeanalizować kilka opcji:
- przechowywania wszystkich anonimowych klientów pod jednym wstępnie zdefiniowane
customer_ID
w tabelitransaction
:customer_ID = 0
dla każdego anonimowego użytkownika, acustomer_ID > 0
dla każdego prawdziwego użytkownika- Ten í y prosta do ciężkiej kodu do aplikacji
- Ale bardziej w celu określenia, które klienci należą do których firma
- Jeżeli dane dla
customer_ID = 0
istnieje w tabelicustomer
w bazie danych lub jako obiekt w aplikacji?- Jeśli w bazie danych, jakie ograniczenia na poziomie bazy danych można wprowadzić, aby zapewnić, że zawsze istnieje?
- Jeśli nie w bazie danych, a następnie klucz obcy z
transaction.customer_ID
docustomer.customer_ID
działa już
customer_ID
jest taka sama jak firmyparty_ID
- łatwiejsze do określenia zagregowane sprzedaży dla każdej firmy , itp.
- Spowoduje to zamieszanie, ponieważ wydaje się, że firma jest jej własnym klientem, a nie innymi unikatowymi klientami.
- Generowanie unikalnego
customer_ID
dla każdego nowego klienta anonimowego (na sesję)- co jeśli te same fizyczne użytkownik powraca? Będzie wiele rekordów powtarzających ten sam rodzaj danych; e-mail, adres wysyłki, itp
- Użyj innego unikatowego klucza, takie jak adres e-mail, aby odnosić się do klienta
- nie zawsze wiarygodne, jak ludzie używają czasami więcej niż jeden adres e-mail, lub zostawić stare adresy za.
- Co zrobić, jeśli nie ma adresu e-mail, który należy podjąć, tak jak w przypadku hali produkcyjnej, faktur pro forma itp.?
- Niektóre inne rozwiązania inspirowane stosem Stack Overflow!
Dodawanie
Połączenie # 2 i # 3 Sugerowano gdzie indziej - próbę zapisania pojedynczy rekord dla każdego klienta, korzystając z adresu e-mail, jeśli to możliwe, lub nowy rekord na każdej wizycie Jeśli nie.
muszę podkreślić, że nie potrzebę przechowywanie zapisu dla każdego anonimowego klienta, ale po prostu wydaje się, że relacyjna baza danych została zbudowana do czynienia z relacji, więc o NULL lub customer_ID
w transaction
tabela, która nie odnosi się do rzeczywistego rekordu klienta, wydaje się po prostu błędna ...
Muszę również podkreślić, że celem tego pytania jest ustalenie, jakie są rzeczywiste rozwiązania w zakresie rejestrowania "przypadkowych" transakcji, w których nie ma adresu pocztowego lub podany jest adres e-mail (wyobrazić sobie chekout w supermarkecie) wraz z transakcjami w sklepie internetowym, w których adres e-mail i adres pocztowy są podawane bez względu na to, czy są przechowywane, czy nie.
Jakie rozwiązania wykorzystała społeczność SO w przeszłości?
Poszedłbym po rozwiązanie adresu e-mail. e-mail jako tożsamość dostarczy Ci większość tego, co chcesz, gdzie możesz uderzyć na krawędzi przypadków z bardzo niewielkim procentem populacji. – Anon
Użyłbym 'null' dla brakujących informacji, do czego wynaleziono' null'. – Johan
Czy potrzebujesz bazy danych dla anonimowych użytkowników? Nie możesz przechowywać zawartości koszyka w pliku cookie podczas przeglądania, a następnie użyć go do odpalenia zamówienia? Przesłanie formularza wysyła zamówienie i jego informacje do zainteresowanych stron. Twoi klienci chcą zachować anonimowość z jakiegoś powodu. – stslavik