Mysql 设计客户机数据表?

Mysql 设计客户机数据表?,mysql,database-design,Mysql,Database Design,对于一个基本的电子商务网站,我应该从客户那里收集的最重要的数据是什么 这些是我脑海中出现的一些数据,这些数据以部分分开(这还不是一个表设计,因为它可以是完全的,也可以是分开的,但将在后面讨论): 登录凭据: email, password 机密问题数据: secret question, secret question answer (or other method) 客户数据: name, last name, birthday, address, city, state, coun

对于一个基本的电子商务网站,我应该从客户那里收集的最重要的数据是什么

这些是我脑海中出现的一些数据,这些数据以部分分开(这还不是一个表设计,因为它可以是完全的,也可以是分开的,但将在后面讨论):

  • 登录凭据:

    email, password
    
  • 机密问题数据:

    secret question, secret question answer (or other method)
    
  • 客户数据:

    name, last name, birthday, address, city, state,
    country, postal code, phone, cellphone
    
从上面看,我可能遗漏了一些东西,但如果您能指出我可以为注册模式收集的任何其他有益数据,我将不胜感激

我是否也应该有一个用户名,并允许用户选择要使用哪个用户名登录?这有什么好处吗?

  • 我应该使用什么字段类型来最好地描述下面的每个字段?我所定义的任何我应该改变或考虑的东西?<强> < /p>
  • 我应该使用多张桌子吗?
    • 为什么??什么时候除了组织之外还有什么收获吗
    • 当我需要使用内部联接或左联接检索它时,会怎么样呢?这在某种程度上不是很糟糕吗
  • 下面是一个我目前认为是单表的设计示例:

    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)
    
    用X标记的东西我仍然需要检查并查看可接受的大小或正确的字段类型

    至于州和州id,以及正在考虑国家/地区的城市和城市id,我没有这样的数据可供用户自己输入或选择系统中可用的数据。

    通常

  • 我将把用户帐户详细信息n用户配置文件分到2个表中

  • 默认情况下我会使用用户名,因为我认为登录更快更容易

  • <> >可以考虑添加性别字段。位置、年龄和性别数据可以帮助您更好地营销产品或服务

    大体上

  • 我将把用户帐户详细信息n用户配置文件分到2个表中

  • 默认情况下我会使用用户名,因为我认为登录更快更容易

  • <> >可以考虑添加性别字段。位置、年龄和性别数据可以帮助您更好地营销产品或服务


    安全问题
    请注意,
    秘密问题
    会破坏您的整个安全系统。因为你把秘密答案和秘密问题都储存在透明的地方

    我建议不要使用它。改为将重置密码发送到已确认的电子邮件地址

    如果你必须使用对秘密问题的错误理解(答案是在用户的Facebook页面上用一个简单的谷歌搜索)。
    至少将答案存储为:

    answer_hash = SHA2(CONCAT(salt, lowercase(answer)),512)
    
    我是否也应该有一个用户名,并允许用户选择要使用哪个用户名登录?这有什么好处吗

    • 作为一个用户,我更喜欢电子邮件地址
    • 它是独一无二的,我永远记不起我的用户名,但电子邮件地址很简单
    • 电子邮件地址作为与用户的通信链接具有双重功能
    • 如果您必须拥有电子邮件地址,添加用户名只是额外的工作,没有任何好处
    • 如果用户名必须是唯一的,则会给用户带来更大的负担(没有人希望被命名为snowwhite 45875,因为snowwhite 1..45874已经被使用)
    •我应该使用多张桌子吗?•为什么?什么时候除了组织之外还有什么收获吗

    我不认为这是必要的,现在一个表就可以了,它将简化您的数据库。
    如果以后要将数据拆分为两个表,可以使用视图合并这些表

    •当我需要使用内部联接或左联接检索它时会怎么样?这在某种程度上不是很糟糕吗

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


    如果您使用主键加入,将不会花费大量时间,但仍然需要时间

    安全问题
    请注意,
    秘密问题
    会破坏您的整个安全系统。因为你把秘密答案和秘密问题都储存在透明的地方

    我建议不要使用它。改为将重置密码发送到已确认的电子邮件地址

    如果你必须使用对秘密问题的错误理解(答案是在用户的Facebook页面上用一个简单的谷歌搜索)。
    至少将答案存储为:

    answer_hash = SHA2(CONCAT(salt, lowercase(answer)),512)
    
    我是否也应该有一个用户名,并允许用户选择要使用哪个用户名登录?这有什么好处吗

    • 作为一个用户,我更喜欢电子邮件地址
    • 它是独一无二的,我永远记不起我的用户名,但电子邮件地址很简单
    • 电子邮件地址作为与用户的通信链接具有双重功能
    • 如果您必须拥有电子邮件地址,添加用户名只是额外的工作,没有任何好处
    • 如果用户名必须是唯一的,则会给用户带来更大的负担(没有人希望被命名为snowwhite 45875,因为snowwhite 1..45874已经被使用)
    •我应该使用多张桌子吗?•为什么?什么时候除了组织之外还有什么收获吗

    我不认为这是必要的,现在一个表就可以了,它将简化您的数据库。
    如果以后要将数据拆分为两个表,可以使用视图合并这些表

    •当我需要使用内部联接或左联接检索它时会怎么样?这在某种程度上不是很糟糕吗

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


    如果您使用主键加入,将不会花费大量时间,但仍然需要时间

    老实说,我不确定StackOverflow是否是满足您需求的最佳场所,但我会根据我的经验添加一些项目

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

    大多数电子商务系统允许