我正在为在线零售店设计ERD图。我有一个客户表,其中包含所有相关详细信息。我还有一个只包含的客户登录详细信息表;电子邮件和密码字段。我能看到的唯一关系是一对一,电子邮件是2之间的链接。
我的问题是,我最好不要将这张表吸收到客户手中吗?或将它分开是否有任何好处?
我很感激任何帮助,因为数据库不是我的强项
答案 0 :(得分:3)
是的,对于一对一,我希望在一个表格中包含所有细节。
有些例外可能是:
性能。如果有成千上万的用户,你会希望主表尽可能“瘦”,有时这意味着将单个细节移到1对1的表中。
数据库中的安全性。将密码与其他用户详细信息放在一个单独的字段中可以让您在保护该表时花费更多的工作,而不会减慢或阻止访问用户详细信息表。用户详细信息将具有个人信息,但几乎没有什么比密码更重要,这使得冒充实际访问的内容(包括轻松找到更多个人信息只是假登录)。
ERD的安全性。由于你的问题在标题中有ERD,如果它们在一个单独的表中,显示ERD能够实际省略表名和密码的列名将更容易,并且在共享ERD时可能需要这样做,进行演示,等
多次登录的要求。像Stack Exchange这样的网站允许您将多个帐户关联到一个主“登录”。在这些情况下,用户名密码分开,因为这实际上是一对多的关系。因此,如果您确信一对一关系永远不会改变和/或您正在开发一个敏捷流程,而这个流程在实际制作之前没有预期功能,那么您不需要单独使用它。
答案 1 :(得分:0)
如果您的所有列都与客户直接相关,并且他们不会造成冗余(重复行),请将它们保存在同一个表中。例如,以下字段:名称,家庭,电子邮件和密码都应位于您的用户的同一个表(实体)上,因为它们与用户实体紧密相关。
如果您可以说存储了关于您的用户的地址信息,包括街道,城市,州等等。那么从User到它的地址实体具有一对多的关系是合乎逻辑的。
最后一点,当您存储有关用户的各种数据时,规范化的想法非常好,所以在这种情况下才有意义。过度归一化会对查询的性能造成额外的开销,因为所有规范化效率越低,选择查询的运行速度就越慢。