2011-09-07 34 views
10

Ứng dụng của chúng tôi có một cửa hàng trực tuyến trong số các tính năng khác và người dùng thường được yêu cầu đăng ký trước khi hoàn tất bán hàng, tạo một customer_ID duy nhất trong quá trình này. Khi họ quay trở lại, họ có thể đăng nhập và chi tiết liên lạc của họ và lịch sử giao dịch được lấy từ cơ sở dữ liệu.Có cách nào để lưu trữ thông tin về người dùng ẩn danh/khách trong cơ sở dữ liệu?

Chúng tôi hiện đang khám phá những điều cần làm trong trường hợp khách hàng 'ẩn danh' hoặc 'khách', mở cửa hàng trực tuyến cho những khách hàng không muốn đăng ký và cũng bán hàng đăng nhập vào ứng dụng phụ trợ, nơi lấy email, địa chỉ bưu điện của khách hàng, v.v ... chỉ mất quá nhiều thời gian. Giải pháp có các ứng dụng bên ngoài cửa hàng trực tuyến.

Nhiều công ty sử dụng cơ sở dữ liệu giống nhau, và cơ sở dữ liệu được xây dựng trên một cấu trúc party model, vì vậy chúng tôi đã khám phá một vài lựa chọn:

  1. Lưu trữ tất cả các khách hàng ẩn danh dưới một được xác định trước customer_ID trong bảng transaction:
    1. customer_ID = 0 cho mỗi người dùng ẩn danh, và customer_ID > 0 cho mỗi người dùng thực
      • i này s thẳng về phía trước để mã hóa cứng vào ứng dụng
      • Nhưng tham gia nhiều hơn để xác định khách hàng thuộc về công ty nào
      • chi tiết cho customer_ID = 0 nên tồn tại trong bảng customer trong cơ sở dữ liệu hoặc như là một đối tượng trong ứng dụng?
        • Nếu trong cơ sở dữ liệu, những hạn chế mức cơ sở dữ liệu nào có thể được thực hiện để đảm bảo rằng nó luôn tồn tại?
        • Nếu không có trong cơ sở dữ liệu, khó khăn chính sau đó nước ngoài từ transaction.customer_ID để customer.customer_ID không còn làm việc
    2. customer_ID cũng giống như các công ty party_ID
      • dễ dàng hơn để xác định doanh thu tổng hợp cho mỗi công ty , vv
      • Điều này sẽ gây nhầm lẫn các vấn đề vì có vẻ như công ty là khách hàng của riêng họ, thay vì các khách hàng duy nhất khác
  2. Tạo một độc đáo customer_ID cho mọi khách hàng ẩn danh mới (mỗi phiên)
    • gì nếu dùng quay trở lại thể chất giống nhau không? Sẽ có nhiều bản ghi lặp lại cùng một loại dữ liệu; email, địa chỉ vận chuyển, vv
  3. Sử dụng một khóa duy nhất, chẳng hạn như địa chỉ email, để chỉ một khách hàng
    • Không phải lúc nào đáng tin cậy như người ta đôi khi sử dụng nhiều hơn một địa chỉ email, hoặc để lại địa chỉ cũ phía sau.
    • Điều gì sẽ xảy ra nếu không có địa chỉ email để thực hiện, như trường hợp trên sàn cửa hàng, hóa đơn chiếu lệ, v.v ...?
  4. Một số giải pháp lấy cảm hứng từ Stack Overflow khác!

Addition

Một sự kết hợp của # 2 và # 3 đã được đề xuất ở nơi khác - cố gắng để lưu trữ một hồ sơ duy nhất cho mỗi khách hàng, bằng cách sử dụng địa chỉ email nếu có thể, hoặc một kỷ lục mới trên tất cả các chuyến viếng thăm nếu không.

Tôi phải chỉ ra rằng chúng ta không cần để lưu trữ một bản ghi cho mỗi khách hàng giấu tên, nhưng nó chỉ có vẻ như cơ sở dữ liệu quan hệ được xây dựng để đối phó với các mối quan hệ, do đó, có một NULL hoặc một customer_ID trong transaction bảng không tham chiếu đến hồ sơ khách hàng thực tế dường như không đúng ...

Tôi cũng phải nhấn mạnh rằng mục đích của câu hỏi này là xác định giải pháp thực tế nào để ghi các giao dịch 'bình thường' không có địa chỉ bưu điện hoặc địa chỉ email được đưa ra (tưởng tượng một chekout siêu thị) cùng với các giao dịch mua sắm trực tuyến, nơi một địa chỉ email và địa chỉ bưu điện được cung cấp cho dù chúng được lưu trữ hay không.

Cộng đồng SO nào được sử dụng trong quá khứ?

+0

Tôi muốn tìm giải pháp địa chỉ email. email như danh tính sẽ giúp bạn có được hầu hết những gì bạn muốn, nơi bạn có thể nhấn các trường hợp cạnh với một tỷ lệ rất nhỏ dân số. – Anon

+0

Tôi muốn sử dụng 'null' cho thông tin còn thiếu, đó là những gì' null' được phát minh. – Johan

+0

Thậm chí bạn có cần cơ sở dữ liệu cho người dùng nặc danh không? Bạn không thể lưu trữ nội dung giỏ hàng trong cookie trong khi duyệt, sau đó sử dụng nội dung đó để kích hoạt đơn đặt hàng? Việc gửi biểu mẫu gửi đơn đặt hàng và thông tin của họ đến các bên quan tâm. Khách hàng của bạn muốn ẩn danh vì một lý do. – stslavik

Trả lời

2

Giả sử bạn yêu cầu một địa chỉ e-mail cho tất cả các đơn đặt hàng trực tuyến, bạn có thể tạo một tài khoản tạm thời cho mỗi khách hàng khi hoàn thành mỗi đơn hàng khi họ chưa đăng nhập.

này có thể được thực hiện bằng cách sử dụng địa chỉ giao hàng và thông tin khác được cung cấp trong quá trình thanh toán để điền vào tài khoản và gửi email một mật khẩu tạm thời ngẫu nhiên cho họ (tùy ý gắn cờ để yêu cầu thay đổi vào lần đăng nhập đầu tiên, nếu chức năng đó được tích hợp vào trang web). Điều này đòi hỏi nỗ lực tối thiểu đối với việc thiết lập tài khoản và cho phép họ đăng nhập để kiểm tra trạng thái đơn đặt hàng của họ.

Vì khóa chính trong cơ sở dữ liệu của bạn là customer_id, nên không gây xung đột nếu chúng tiếp tục tạo tài khoản mới với cùng địa chỉ e-mail/address/etc, trừ khi bạn có mã để ngăn trùng lặp. Rất hiếm khi có ai đó tạo nhiều hơn một tài khoản tạm thời, vì việc đăng nhập bằng mật khẩu được gửi qua email cho họ dễ dàng hơn là nhập lại dữ liệu của họ.

Đối với các đơn đặt hàng phụ trợ, chúng tôi thường tạo một tài khoản theo cùng cách như trên cho mọi khách hàng. Tuy nhiên, nếu họ không có địa chỉ email (hoặc họ chỉ muốn mua qua điện thoại), chúng tôi sẽ tạo một tài khoản với thông tin giao hàng và địa chỉ e-mail trống (phải mã ngoại lệ để không gửi mật khẩu tạm thời)/xác nhận đơn đặt hàng khi nó trống). Customer_id được cung cấp cho họ và thông tin giao hàng và tên công ty của họ được lưu trữ trong tài khoản để tra cứu và giải quyết các đơn đặt hàng trong tương lai.

+0

Nhờ tất cả mọi người cho đầu vào của họ, tuy nhiên câu trả lời này có vẻ là gần nhất với lý tưởng và thực sự mô tả một thực tế 'thực tế'. – boatingcow

0

Tôi thường sử dụng IP người dùng, tôi tạo một tài khoản chỉ với ID và địa chỉ IP của mình. Khi anh ấy đăng ký, tôi chỉ cập nhật hồ sơ của anh ấy. Những thứ khác ngoài IP có thể (và nên) cũng được sử dụng, như tạo một mã thông báo ngẫu nhiên để đưa vào cookie để bỏ qua bất kỳ hệ thống phiên nào đang được sử dụng để bạn có thể làm cho nó dài hơn chẳng hạn. Bây giờ, trong ứng dụng, bạn phải làm cho lớp người dùng của bạn có thể "xác định" người dùng của bạn bằng IP/mã thông báo này, một phiên thực hoặc bất kỳ hệ thống đăng nhập nào khác mà bạn có thể có tại chỗ.

+1

Địa chỉ IP thay đổi rất thường xuyên. Đó là một vấn đề khởi động lại/tắt router của bạn và bạn gần như chắc chắn có được một cái mới. – Icarus

+2

IP không đáng tin cậy. Xem xét các cổng NAT - nhiều người dùng đến từ một IP duy nhất. –

1

Tôi nghi ngờ có bất kỳ giải pháp hoàn hảo nào cho vấn đề này. Bạn chỉ cần chọn lựa: Điều quan trọng là bảo đảm lịch sử khách hàng có thể nhận ra tương phản với cải thiện về chuyển đổi bạn nhận được từ việc không buộc khách hàng phải trải qua quá trình đăng ký đầy đủ.

Nếu bạn đi mà không cần đăng ký, bạn sẽ không thể nhận ra khách hàng quay lại 100% thời gian. Người ta có thể lập luận rằng ngay cả với đăng ký sẽ không thể thực hiện được, vì đôi khi người dùng chọn tạo tài khoản mới vì nhiều lý do khác nhau. Nhưng bạn có thể làm điều gì đó "đủ tốt" bằng cách hiểu dữ liệu bạn đã có.

Ví dụ: ở một số quốc gia, mã bưu điện khá cụ thể. Họ có đủ cụ thể không? Phụ thuộc vào quốc gia bạn hoạt động và cách thức xây dựng cơ sở khách hàng của bạn. Nếu bạn có xu hướng chỉ có một người dùng cho mỗi hộ gia đình, có thể.

Hoặc tùy thuộc vào phương thức thanh toán bạn hỗ trợ, bạn có thể xem xét tạo mã băm một chiều của số thẻ tín dụng ("ID duy nhất giả"). Một số giải pháp thanh toán thực sự trả lại một "ID người thanh toán" duy nhất, có thể hoàn hảo - giả sử rằng bạn nhận được thứ gì đó từ tất cả các dịch vụ thanh toán mà bạn hỗ trợ.

1

Tôi sẽ chỉ định một ID khách hàng duy nhất để lưu dữ liệu và sau đó mua hàng trong tương lai mà cùng một người mua ẩn danh sẽ xem xét xem địa chỉ email và/hoặc dòng đầu tiên của địa chỉ và mã bưu điện đã tồn tại chưa . Nếu bạn yêu cầu một số điện thoại, hãy so sánh điều đó. Về cơ bản bạn cần một cái gì đó khá độc đáo trong khi loại bỏ các lỗi có thể (ví dụ: chỉ nhìn vào dòng đầu tiên của địa chỉ - rất có khả năng là có nhiều hơn một 123 Main Street!Nhưng sẽ chỉ có một 123 Main Street với mã bưu điện ABC123). Khi bạn biết điều này, bạn có thể tự động tạo tài khoản cho họ - gửi email cho khách hàng nói rằng bạn đã nhận thấy rằng họ đã mua trước đó và để tiết kiệm thời gian sử dụng địa chỉ email này và mật khẩu được tạo tự động này. Khi họ đăng nhập lần đầu tiên, hãy kiểm tra bảo mật nhanh (có thể là giá trị của hóa đơn cuối cùng), sau đó để họ kiểm tra chi tiết của họ. Bạn thậm chí có thể làm điều này trong quá trình thanh toán. Tôi nghĩ rằng bằng cách cho thấy rằng bạn có thể tiết kiệm thời gian bằng cách làm nó tự động có thể là một tiền thưởng.

Nếu bạn không muốn thực hiện việc này, bạn có thể đặt cookie, mặc dù bạn phải cảnh báo người dùng nếu bạn giao dịch từ bên trong EU (luật cookie).

Sự cố với người có địa chỉ email và địa chỉ bưu điện khác nhau, có thể là thứ tự kinh doanh, sau đó họ có thể đặt hàng để sử dụng cá nhân (khó nói là chúng tôi không biết bạn đang bán gì).

1

ofcourse bạn có thể theo dõi phiên bán hàng bằng cách sử dụng cookie. nhưng cũng đăng ký người dùng ẩn danh vào trang web của bạn nhưng đừng để họ nhận ra rằng họ đang điền vào bất kỳ biểu mẫu đăng ký nào. Hãy để họ tuân theo quy trình bán hàng và vào cuối quy trình bán hàng tạo id khách hàng duy nhất và gửi email cho họ và cũng hiển thị thông báo đó trên trang web sau khi họ hoàn tất bán hàng của họ và làm cho họ đăng nhập vào trang web bằng cách chỉ cần nhập id khách hàng của họ.

0

Cách tôi làm là: Không hề. Đơn giản chỉ cần đặt, cho phép mọi người thanh toán qua paypal hoặc bất cứ thứ gì bạn đặt làm giải pháp thanh toán và lấy dữ liệu từ đó, tự động tạo người dùng và thứ tự sau khi thanh toán được xử lý bằng API được cung cấp.

Tại thời điểm đó, bạn có tất cả thông tin bạn cần và chắc chắn có thể lưu trữ chỉ đủ để thống kê/tiếp thị e-spam của bạn.

Giữ đơn giản, yêu cầu NOTHING, thậm chí không phải mọi người để nhập id khách hàng hoặc e-mail và tất cả họ đều sẽ thích nó.

Làm điều đó tôi vẫn có mọi thông tin tôi có thể quan tâm và trải nghiệm người dùng nhanh chóng/dễ dàng nhất có thể.

0

Mmmm ... chúng tôi tạo ID uniq cho người dùng khách - giá trị băm hoặc uuid cho tên người dùng và lưu trữ tên này trong bảng giỏ. Bạn lạnh lưu trữ này cũng trong bảng khách hàng, nếu bạn không nhớ lộn xộn cơ sở dữ liệu của bạn với dữ liệu đó. Các uuid được lưu trữ trong một cookie trong trình duyệt của khách hàng, cho đến khi anh ta kiểm tra giỏ. Điều cookie cũng tốt cho việc gán tài khoản ẩn danh (và nội dung của giỏ của nó) vào tài khoản hợp lệ, nếu người dùng quyết định đăng ký sau này/trước khi kiểm tra giỏ.

0

Tôi sẽ tạo ID khách hàng duy nhất và lưu trữ nó trên máy của người dùng dưới dạng cookie. Điều này sẽ giảm số lượng người dùng có nhiều ID khách hàng. Tuy nhiên, trong tất cả các mức độ nghiêm trọng, miễn là số lượng id của bạn không đi vào hàng trăm ngàn (và chúc mừng nếu nó là!), Nó sẽ không làm tổn thương cơ sở dữ liệu của bạn miễn là bạn có các chỉ mục thích hợp trên trang web đó. Điều này có nghĩa là cột id khách hàng.

Nếu bạn có id = 0 cho mỗi khách hàng, bạn sẽ không có nhiều hàng mặc dù? Tôi nghĩ rằng đó là không thể tránh khỏi nếu bạn muốn giữ tất cả các dữ liệu, phải không? Một số không id có thể gây ra chỉ số của bạn thêm vấn đề quá.

Các vấn đề liên quan