繁体   English   中英

设计客户数据表?

[英]Designing a client data table?

  • 我应该从客户那里获取基本电子商务网站的最重要数据是什么?

    这些是我想到的一些数据,这些数据是按节分开的(这不是表设计,因为它可能被完全或分开,但稍后会介绍):

    • 登录信息:

       email, password 
    • 秘密问题数据:

       secret question, secret question answer (or other method) 
    • 客户资料:

       name, last name, birthday, address, city, state, country, postal code, phone, cellphone 

    从上面我可能会遗漏一些东西,但是如果您能指出我可以为注册模式收集的任何其他有用数据,我将不胜感激。

    我还应该有一个用户名,并允许用户选择他要使用的用户名吗? 这带来什么好处吗?

  • 我应该使用哪种字段类型来最好地描述以下每个字段? 我已经定义了我应该更改或考虑的任何内容?

  • 我应该多用一张桌子吗?
    • 为什么呢? 什么时候 ? 除了组织之外还有什么收获吗?
    • 当我需要使用内部联接或左联接检索它时,在某种程度上不是很糟糕吗?

这是我目前想作为单一表的设计示例:

id int(X) PRIMARY auto increment
email varchar(X) UNIQUE
password_hash varchar(64)
password_salt varchar(6)
language tinyint(1)
time_offset varchar(5)
secret_question_id tinyint(3)
secret_question_answer varchar(X)
name varchar(X)
last_name varchar(X)
birthday datetime
address varchar(X)
address_complement(X)
city_id int(X)
city varchar(X)
state_id int(X)
state varchar(X)
country_id int(X)
postal_code int(X)
phone_regional_ext int(X)
phone int(X)
cellphone_regional_ext int(X)
cellphone int(X)
ts_register datetime
ts_last_update timestamp NULL on update CURRENT_TIMESTAMP
status tinyint(1)

标有XI的内容仍需要检查并查看可接受的大小或正确的字段类型。

至于考虑国家的state和state_id以及city和city_id,我没有那种可用的数据来允许用户自己输入或选择系统中可用的一种。

通常

  1. 我会将用户帐户详细信息n用户个人资料溢出到2个表格中。

  2. 我会默认使用用户名,因为我认为登录更快,更轻松。

  3. 您可以考虑添加性别字段。 位置,年龄和性别数据可以帮助您更好地销售产品或服务。

安全问题
请注意,这个secret question损害您的整个安全系统。 因为您要明确存储秘密答案和秘密问题。

我建议不要使用它。 而是通过电子邮件将重置密码发送到确认的电子邮件地址。

如果您必须使用秘密问题的错误概念(答案是用户Facebook页面上的简单google)。
至少将答案存储为:

answer_hash = SHA2(CONCAT(salt, lowercase(answer)),512)

我还应该有一个用户名,并允许用户选择他要使用的用户名吗? 这带来什么好处吗?

  • 作为用户,我更喜欢电子邮件地址。
  • 它是唯一的,我不记得自己的用户名,但是电子邮件地址很简单。
  • 电子邮件地址作为与用户的通信链接,承担着双重责任。
  • 如果您必须具有电子邮件地址,则添加用户名只是多余的努力,没有任何好处。
  • 如果用户名必须唯一,那么您将给用户带来更多负担(没人希望将其命名为snowwhite45875,因为已经使用了snowwhite 1..45874)

•我应该多用一张桌子吗? •为什么? 什么时候 ? 除了组织之外还有什么收获吗?

我认为这不是必需的,现在1张表就可以了,它将简化您的数据库。
如果要稍后将数据拆分为2个表,则可以使用视图来组合表。

•当我需要使用内部联接或左联接检索它时,在某种程度上还不错吗?

使用左联接检索可选数据。
使用内部联接检索链接为1到1的数据。

如果您加入主键,将不会花费大量时间,但是仍然会花费时间。

老实说,我不确定StackOverflow是满足您要求的最佳场所,但是我会根据经验添加一些内容。

大多数电子商务系统将“送货地址”和“账单地址”识别为单独的数据属性。

大多数电子商务系统允许用户存储多个地址并保留历史记录。

大多数电子商务系统都会存储客户联系人的首选项-新闻信件,以进行排序。

大多数电子商务系统都存储客户付款方式(尽管诸如信用卡号之类的敏感数据被遗漏或加密了)。

大多数电子商务系统存储具有历史记录的多种付款方式。

一些电子商务系统存储个性化数据,例如产品偏好等。

对于大多数这些数据项,您可能需要将它们存储在单独的表中,并加入其中。 您会问“组织”之外是否还有其他好处-对于某些概念,几乎不存储新表就不可能存储所需的数据。 例如,如果您要为给定用户存储多个送货地址,则地址数据应位于单独的表中。 这不是错误-这是一个功能。 联接不是“坏”的-它们仅消耗最少的资源(只要您要在索引字段上联接)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM