我有点不喜欢数据库设计,因此如果答案很明显,请提前原谅我
我正在设计的数据库以最简单的形式包含以下关系和属性:
员工:EmployeeId(PK),EmployeeName
访问:VisitId(PK),开始时间,结束时间,优先级
站点:SiteId(PK),站点名称
Employee / Visit具有N:M关系,因为许多员工可以进行访问,并且许多员工可以进行访问。结果是:
EmployeeVisit:EmployeeId(PK / FK),VisitId(PK / FK)
...位于两个关系之间
访问/站点具有1:N的关系,因为每个站点可以被多次访问,但是每次访问只能是一个站点。
此外,由于没有网站,访问就不存在。
据我所知,它至少为1NF。 但是我认为它可能违反2NF,这就是原因:
访问:VisitId(PK)SiteId(PK / FK),开始时间,结束时间,优先级
2NF指出,所有非键属性必须依赖于主键的所有部分。在这种情况下,这意味着不是JUST VisitId和JUST SiteId。但是StartTime,EndTime或Priority似乎只能通过VisitId唯一标识。这些字段在功能上是否取决于SiteId(PK / FK)?
同时,由于存在标识关系,SiteId必须构成主键的一部分。
该如何解决? 我已经考虑过在访问和网站之间创建一个进一步的表,如下所示:
VisitedSite:VisitedId(PK / FK),SiteId(PK / FK)。
我还考虑过将Visit表中的SiteId更改为非主键,但仍将其设置为非null。
我也有可能忘记了ER数据库设计的基础知识...