以下是我正在为基于投票的网站(overpowered.info)工作的数据库设计。 http://i57.tinypic.com/2v9925s.png我对用户和安全性之间的互动感兴趣。我需要这个数据库在3NF中,这是我第一次通过规范化过程对数据库进行规范化。起初我在用户中有安全答案和安全问题。但是,答案与问题有关,并且取决于问题和用户。如果我在USER实体中有USER_ANSWER和QUESTION_ID并且一起摆脱安全性,它仍然在3NF中吗?我知道用户的安全性是1比1,应该避免,但我现在最终不确定。
答案 0 :(得分:0)
是的,它仍然在3NF。事实上,它将修复一个带有安全性的设计缺陷,在这个缺陷中你无法区分回答相同问题的不同用户的答案。
答案 1 :(得分:0)
它不能在3nf中。首先,答案在功能上依赖于question_id,而question_id不是用户密钥的任何部分。这是一个建议:
我假设问题表包含用户选择的库存问题列表,然后将答案提供给所选的那个。因此 Security 实现了User和Questions之间的一对多关系。 User_ID 字段既是用户表的FK,也是PK,因此不会多次列出任何用户。对于每个用户,还列出了相关问题以及该用户对该问题的回答。
注意我还将密码字段移动到一个单独的表中(以及散列种子 - 只存储最终散列而不是文本密码,对吗?)。可以将其视为“安全范式”(SNF),其中敏感数据(可包括帐号,SSN等)放在单独的表中。然后可以严格限制对这些表的访问。如果用户表本身被黑客攻击,那么敏感数据(包括问题和答案)就不会受到损害。不,SNF在任何有关规范化的教程中都找不到,但我已经使用了多年,它可以提高安全性。限制对整个表的访问要比表中的特定字段容易得多。