gpt4 book ai didi

sql-server - 用户和地址应该位于不同的表中吗?

转载 作者:行者123 更新时间:2023-12-02 12:05:51 25 4
gpt4 key购买 nike

目前我的用户表具有以下字段

  • 用户名
  • 密码
  • 姓名
  • 姓氏
  • 城市
  • 地址
  • 国家
  • 地区
  • 电话号码
  • 移动编号
  • 电子邮件
  • 成员(member)资格到期
  • 成员数量
  • 出生日期
  • 性别
  • 已屏蔽
  • 用户尝试
  • 区 block 时间
  • 已禁用
  • 我不确定是否应该将地址字段放在另一个表中。我听说如果不这样做我就会违反 3NF,尽管我不明白为什么。有人可以解释一下吗?

    最佳答案

    有几个点绝对不是3NF;另外还有一些有问题的:

    1. 每个用户可以有多个地址吗?
    2. 地址是可选的还是强制的?
    3. 城市、国家、地区中的信息是否与地址中的信息重复?
    4. 一个用户可以有多个电话号码吗?
    5. 电话号码是可选的还是强制的?
    6. 一个用户可以有多个MobNo吗?
    7. MobNo 是可选的还是强制的?
    8. 一个用户可以有多个电子邮件吗?
    9. 电子邮件是可选的还是必填的?
    10. NoOfMembers 是根据用户数量计算的吗?
    11. 可以有多个 UserAttempts 吗?
    12. 每个用户可以有多个 BlockTime 吗?

    如果这些问题中任何一个的答案是肯定的,则表明该区域存在 3NF 问题。 3NF的原因是为了去除重复数据;确保更新、插入和删除使数据保持一致的形式;并最大限度地减少数据存储 - 特别是不需要将数据存储为“未知/未知/空”。

    除了这里提出的问题之外,还有一个问题是什么构成了表的主键 - 我猜这与用户有关,但是您提供的名称和其他信息不太可能是唯一的,所以不足以作为PK。 (如果您认为名字加姓氏是唯一的,您是否暗示您永远不会有多个约翰·史密斯?)

    编辑:鉴于某些字段是可选的进一步信息,我建议您将可选字段分离到不同的表中,并在新表和用户表之间建立 1-1 链接。该链接将通过在新表中创建引用用户表主键的外键来建立。正如您所说,没有一个字段可以有多个值,那么它们目前不太可能给您带来问题。然而,如果其中任何一个发生变化,那么不将它们分开将会给您带来升级应用程序和支持应用程序的数据的问题。您仍然需要解决主键问题。

    关于sql-server - 用户和地址应该位于不同的表中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6576442/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com