有哪些方法可以在数据库中存储有关匿名/来宾用户的信息?

boa*_*cow 10 php mysql database-design web-applications data-modeling

我们的应用程序具有在线商店和其他功能,并且通常要求用户在完成销售之前进行注册,从而customer_ID在该过程中创建独特的.当他们返回时,他们可以登录并从数据库中检索他们的联系方式和交易历史记录.

我们现在正在探索在"匿名"或"客户"客户的情况下该做什么,向不想注册的客户开放在线商店,以及在后端应用程序中记录的销售情况,其中客户是电子邮件,邮政地址等太费时间了.该解决方案也可以在网上商店之外使用.

多个公司使用相同的数据库,数据库建立在派对模型结构上,因此我们探索了几个选项:

  1. 将所有匿名客户存储customer_ID在transaction表中预定义的客户下:
    1. customer_ID = 0为每个匿名用户和customer_ID > 0每个真实用户
      • 这是直接硬编码到应用程序中
      • 但更多参与确定哪些客户属于哪家公司
      • 是否应将详细信息customer_ID = 0存在于customer数据库的表中或作为应用程序中的对象?
        • 如果在数据库中,可以进行哪些数据库级约束以确保它始终存在?
        • 如果没有在数据库中,然后从外键约束transaction.customer_ID,以customer.customer_ID不再工作
    2. customer_ID 和公司一样 party_ID
      • 更容易确定每家公司的总销售额等
      • 这会使事情变得混乱,因为公司似乎是自己的客户,而不是其他独特的客户
  2. customer_ID为每个新的匿名客户生成唯一的(每个会话)
    • 如果同一个物理用户返回怎么办?将有许多记录重复相同类型的数据; 电子邮件,送货地址等
  3. 使用其他唯一密钥(例如电子邮件地址)来引用客户
    • 由于人们有时使用多个电子邮件地址或留下旧地址,因此并不总是可靠的.
    • 如果没有电子邮件地址,如车间,备考发票等情况怎么办?
  4. 其他一些Stack Overflow灵感解决方案!

加成

在其他地方建议使用#2和#3的组合 - 尝试为每个客户存储单个记录,如果可能,使用电子邮件地址,或者如果没有,则在每次访问时记录新记录.

我要指出的是,我们并不需要存储一个记录每一个匿名的客户,但它只是似乎关系数据库的建立是为了对付的关系,所以有一个空或customer_ID在transaction表中没有引用实际客户记录似乎错了......

我还必须强调,这个问题的目的是确定在没有邮寄地址或电子邮件地址的情况下记录"临时"交易的真实解决方案(想象一个超市的chekout)以及电子邮件地址和网上商店交易.邮政地址是否存储.

SO社区过去使用了哪些解决方案?

shi*_*uin 5

假设您需要所有在线订单的电子邮件地址,您可以在每个订单完成时为每个客户创建一个临时帐户,但他们没有登录。

这可以通过使用在结账时提供的送货地址和其他信息填写帐户,并通过电子邮件向他们发送随机临时密码来完成(如果该功能已构建,则可选择在第一次登录时将其标记为需要更改)进入网站)。这需要他们最少的努力来设置帐户,并允许他们登录以检查他们的订单状态。

由于您的数据库中的主键是 customer_id,如果他们继续使用相同的电子邮件/地址/等创建新帐户,则不会引起冲突,除非您已经有代码来防止重复。不过,很少有人创建多个临时帐户,因为使用通过电子邮件发送给他们的密码登录比再次输入他们的数据更容易。

对于后端订单,我们通常以与上述相同的方式为每个客户创建一个帐户。但是,如果他们没有电子邮件地址(或者他们只想通过电话购买),我们会使用他们的送货信息和一个空白的电子邮件地址生成一个帐户(必须编码一个例外以不发送临时密码/order 为空白时确认)。customer_id 被提供给他们,他们的运输信息和公司名称存储在帐户中以查找和加快未来的订单。