所以在我的一个学校项目中,我们必须为一个伪电子商务网站创建一个数据库。项目说明要求我们使用 Boyce–Codd 范式来实现我们的数据库,但我认为这种范式存在一些歧义。
假设我们这样实现实体Users
:
Users(*email, username, password, some_other_fields)
(注:*
meens 主键)
首先,如果我很好地理解了 BCNF,那么这个实体就不是 BCNF。如果username
s 和 s 一样是唯一email
的,那么我们也可以像这样定义这个实体:
Users(*username, email, password, some_other_fields)
我的第一个问题是如何以 Boyce–Codd 范式创建这个实体?
然后我对这个 BCNF 表格还有另一个问题:缺少id
. 假设用户可以更改他的用户名和电子邮件。主键也将发生变化。我的问题是我真的没有一个时间常数来定义我的实体中的一个元素。这意味着,例如,有关日志记录的一些问题:假设我们使用主键记录用户的操作,如果foo@smth.com
将他的电子邮件更改为foo2@smth.com
,我们可以拥有这种日志:
[foo@smth.com] : action xxx
[foo@smth.com] : action yyy
[foo2@smth.com] : action zzz
然后,如果我们没有发现电子邮件更改,我们所有的先例日志都将毫无意义:我们不知道是谁foo@smth.com
。
然后,我的第二个问题是,您不认为使用时间常数 id(例如整数)更安全吗?