这是我正在为一个基于投票的网站(overpowered.info)工作的数据库设计。http://i57.tinypic.com/2v9925s.png我对用户和安全之间的交互很感兴趣。我需要这个数据库在3NF中,这是我第一次通过规范化过程对数据库进行规范化。起初,我在用户中得到了安全答案和安全问题。然而,答案与问题相关,并取决于问题和用户。如果我在用户实体中有USER_ANSWER和QUESTION_ID,并且一起消除了安全性,那么它还在3NF中吗?我知道安全性对用户来说是1比1,这应该避免,但我最终还是不确定这一点。
发布于 2015-10-06 12:42:31
是的,它仍然会在3NF中。事实上,它将修复一个安全设计缺陷,在这个缺陷中,你无法区分回答相同问题的不同用户的答案。
发布于 2015-10-07 16:39:59
它不可能在3nf中。首先,答案在功能上依赖于question_id,它不是用户密钥的任何部分。这里有一个建议:

我假设Questions表包含用户从中选择的常用问题列表,然后提供所选问题的答案。因此,安全机制实现了用户和问题之间的一对多关系。User_ID字段既是用户表的FK,也是PK,因此任何用户都不能被多次列出。对于每个用户,还会列出相关问题以及该用户对该问题的回答。
注意,我还将密码字段移到了一个单独的表中(以及一个散列种子--您只存储了最终的散列,而不是密码的文本,对吧?)可以将其视为“安全范式”(Security Normal Form,SNF),其中包含敏感数据(包括帐号、SSN等)放在一个单独的表中。这样,对这些表的访问就会受到严格限制。因此,如果用户表本身遭到黑客攻击,敏感数据(包括问题和答案)将不会受到损害。不,SNF不会在任何关于规范化的教程中找到,但我已经使用它多年了,它有助于更好的安全性。限制对整个表的访问要比限制表中的特定字段容易得多。
https://stackoverflow.com/questions/32959593
复制相似问题