boa*_*cow 10 php mysql database-design web-applications data-modeling
我们的应用程序具有在线商店和其他功能,并且通常要求用户在完成销售之前进行注册,从而customer_ID在该过程中创建独特的.当他们返回时,他们可以登录并从数据库中检索他们的联系方式和交易历史记录.
我们现在正在探索在"匿名"或"客户"客户的情况下该做什么,向不想注册的客户开放在线商店,以及在后端应用程序中记录的销售情况,其中客户是电子邮件,邮政地址等太费时间了.该解决方案也可以在网上商店之外使用.
多个公司使用相同的数据库,数据库建立在派对模型结构上,因此我们探索了几个选项:
customer_ID在transaction表中预定义的客户下:
customer_ID = 0为每个匿名用户和customer_ID > 0每个真实用户
customer_ID = 0存在于customer数据库的表中或作为应用程序中的对象?
transaction.customer_ID,以customer.customer_ID不再工作customer_ID 和公司一样 party_ID
customer_ID为每个新的匿名客户生成唯一的(每个会话)
加成
在其他地方建议使用#2和#3的组合 - 尝试为每个客户存储单个记录,如果可能,使用电子邮件地址,或者如果没有,则在每次访问时记录新记录.
我要指出的是,我们并不需要存储一个记录每一个匿名的客户,但它只是似乎关系数据库的建立是为了对付的关系,所以有一个空或customer_ID在transaction表中没有引用实际客户记录似乎错了......
我还必须强调,这个问题的目的是确定在没有邮寄地址或电子邮件地址的情况下记录"临时"交易的真实解决方案(想象一个超市的chekout)以及电子邮件地址和网上商店交易.邮政地址是否存储.
SO社区过去使用了哪些解决方案?
假设您需要所有在线订单的电子邮件地址,您可以在每个订单完成时为每个客户创建一个临时帐户,但他们没有登录。
这可以通过使用在结账时提供的送货地址和其他信息填写帐户,并通过电子邮件向他们发送随机临时密码来完成(如果该功能已构建,则可选择在第一次登录时将其标记为需要更改)进入网站)。这需要他们最少的努力来设置帐户,并允许他们登录以检查他们的订单状态。
由于您的数据库中的主键是 customer_id,如果他们继续使用相同的电子邮件/地址/等创建新帐户,则不会引起冲突,除非您已经有代码来防止重复。不过,很少有人创建多个临时帐户,因为使用通过电子邮件发送给他们的密码登录比再次输入他们的数据更容易。
对于后端订单,我们通常以与上述相同的方式为每个客户创建一个帐户。但是,如果他们没有电子邮件地址(或者他们只想通过电话购买),我们会使用他们的送货信息和一个空白的电子邮件地址生成一个帐户(必须编码一个例外以不发送临时密码/order 为空白时确认)。customer_id 被提供给他们,他们的运输信息和公司名称存储在帐户中以查找和加快未来的订单。