2015-04-23 34 views
0

嗨我和我的朋友不能同意DVD租赁数据库的哪种型号更好。 这是我的模特。DVD租赁数据库2个不同的表模型

 Table: Rent 

     NAME      TYPE 
     ID_Rent      Integer (Primary key) 
     ID_Customer     Integer (foregin key from Customer) 
     ID_office     Integer (foreign key from office) 
     Date of Rent    DateTime 
     Date of Returning   DateTime 
     Possibly_penalty_in_euros Integer 

     Table : Rented_DVD 
     NAME      TYPE 
     ID_Rented_DVD    Integer (Primary key) 
     ID_DVD      Integer (foreign key from DVD table) 
     ID_Rent      Integer (foreign key from Rent) 

这是他的模型

 Table: Rent 

     NAME      TYPE 
     ID_Rent      Integer (Primary key) 
     ID_Customer     Integer (foreign key from Customer) 
     ID_DVD      Integer (foreign key from DVD table) 
     ID_office     Integer (foreign key from office) 
     Date of Rent    DateTime 
     Date of Returning   DateTime 
     Possibly_penalty_in_euros Integer 

我的问题是...哪种模式更好?在这两张桌子中,我们有客户,办公室,DVD等领域,但他们并不重要。这是关于如果有人进入我们的办公室并且将同时租用例如4张DVD。

在我的情况下,我会将1行放入表Rent并将4放入表Rented_DVD。它将消耗78个字节的空间。 Rented_DVD中的3个整数* 4行* 4个字节+ 4个整数* 4个字节+ 2个日期时间* 7个字节= 78个字节的空间。

我的朋友会将4行放入租表中,他将占用136个字节的空间(5个整数* 4个字节+ 2个日期时间* 7个字节)* 4个行= 136个字节的空间。

那么这是否意味着我的模型比他更好?他的模型分别比我的消耗更多的数据空间还是我计算错误?

+3

@BobJarvis A)这就是当目标网站没有出现在列表中时的“自定义原因标志”。B)不是它不属于代码评论。这是数据库模型审查,而不是代码审查。 C)投票关闭,因为它是堆栈溢出的主题,不是因为它属于别的地方。 –

+0

如果你想允许在不同的日子里返回不同的dvds,你的模型的返回日期(和惩罚?)应该移动到租借的表。 – Glenn

+0

make:'Date of Rent'和'Date of Returning'与您的其他列一致,使用下划线并使它们成为:'Date_of_Rent'和'Date_of_Returning' –

回答

4

考虑到现代数据库可以容易地容纳TB级数据,我不认为你对存储空间的关注是有意义。


相反,我认为你应该更关心一致性和适当的标准化。在这方面,我认为你的模型更好。每个租赁交易您都有一个唯一的ID_Rent,然后在Rented_DVD中有交易详情。这是在实际业务环境中对这类数据进行规范化的更为典型的方式。它基本上是一个Invoice Header -> Invoice Detail设置,它通常比“平面”Invoice Header+Detail表模型更可取。

这里有一些更多的细节解释为什么这通常是这样:

1)避免重复的数据,例如,客户ID,租赁标识,日期等

2)更容易执行唯一的密钥,例如,您可以知道确定您对每个事务都有且仅有一个ID_Rental,因此您可以在该字段上使用唯一约束。

唯一让它稍微复杂一点的是,如果需要标题和详细信息,则需要在查询中进行额外的连接,但与具有高效的数据库布局相比,这是相当平凡的事情。

+2

但是当时DVD租赁是可以从中赚钱的东西,存储价格昂贵... ;-) –

+0

大声笑如何真实; D – Phrancis