DVD租赁数据库有2种不同的桌面型号

时间:2015-04-23 15:53:59

标签: database oracle

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

        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个DateTime * 7个字节= 78个字节的空间。

我的朋友将在Rent表中输入4行,他将占用136个字节的空间(5个整数* 4个字节+ 2个DateTime * 7个字节)* 4行= 136个字节的空格。

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

1 个答案:

答案 0 :(得分:4)

考虑到现代数据库很容易包含数TB的数据,我认为您对存储空间的关注 非常重要。

相反,我认为您应该更多地关注一致性和正确的规范化。在这方面,我认为你的模型更好。每个租借交易都有一个唯一的ID_Rent,然后Rented_DVD中有交易详情。这是在实际业务环境中规范化此类数据的更典型方式。它基本上是一个Invoice Header -> Invoice Detail设置,通常比平面设置更好。 Invoice Header+Detail表格模型。

以下是一些更详细的解释为何通常如此:

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

2)更容易强制执行唯一键,例如,您可以确定 每个事务只有一个ID_Rental,因此您可以使用唯一约束领域。

使用起来稍微复杂一点的唯一因素是,如果需要标题和详细信息,则需要在查询中添加其他联接,但与具有高效的数据库布局相比,这是非常简单的事情。