使用用户,日期和签到来规范化数据库

时间:2015-12-10 19:28:31

标签: database foreign-keys normalization

我正在设计一个数据库,而我正在寻找格式化表格的最佳方法。用户可以签入和签出盒子,磁带,CD和其他类型的媒体。我想了解谁检查了什么以及在什么时间的历史。这是我当前架构的简化版本:

User(id, first_name, last_name)
Box(id, description)
Tape(id, description)
CD(id, title)
check_in(id, in_date, out_date, fk_user)

check_in_history(id, fk_checkin, media_type)

我有一个用户表和不同类型的媒体。签到也存储在单独的表中。对于签入历史记录,我有签入表的外键以及媒体类型的字段,因此我可以确定哪个表,以及签入时引用哪种类型的媒体。尽管如此,这看起来像是一块垃圾而且感觉效率低下。有没有更好的方法来设计这个数据库?

编辑:不同类型的媒体有很多不同的属性,我为了简单起见而遗漏了这些属性,因此它们不在同一个表格中。

1 个答案:

答案 0 :(得分:0)

我会这样做;有一个表格用于包含ID,类型,描述,标题的媒体。 check_in表需要有一个指向媒体表的链接。因此check_in链接用户和媒体。

历史表没有理由。 check_in表将包含所有贷款的历史记录。