如何在不创建额外表的情况下存储冗余数据?

时间:2018-07-18 13:24:12

标签: database-design relational-database

我的每个表(汽车,卡车,SUV,吉普车,塞米和摩托车)中的大多数数据看起来都一样,但是没有足够的数据来保证为每个字段创建表。那差不多就是创建五十个表,每个表有五六个记录。

我想您可以将默认值存储在某个地方,然后提供一个带有替代值的表。但是,如果这样做,我不确定将默认值放在哪里,因为这听起来像是每种车辆类型的表格,每个表格只有一条记录。

我目前正在做的只是存储冗余数据,因为这使得使用数据库变得非常容易。但是,有什么最佳实践可用于将这种类型的数据存储在关系数据库中?

这里是一个例子:

'Cool Boat Company', 1, 'Bose® Premium Sound', '3 MegaStrong® Sails', '16,000 lbs', '30ft', '40ft', .05, 'USA', 'Gas', 90
'Cool Boat Company', 1, 'Bose® Premium Sound', '3 MegaStrong® Sails', '16,500 lbs', '35ft', '40ft', .05, 'USA', 'Gas', 90
'Cool Boat Company', 1, 'Bose® Premium Sound', '3 MegaStrong® Sails', '16,000 lbs', '37ft', '40ft', .05, 'USA', 'Gas', 90
'Cool Boat Company', 1, 'Bose® Premium Sound', '3 MegaStrong® Sails', '16,000 lbs', '39ft', '45ft', .05, 'USA', 'Gas', 90
'Cool Boat Company', 1, 'Bose® Premium Sound', '3 MegaStrong® Sails', '16,000 lbs', '41ft', '47ft', .05, 'USA', 'Gas', 90
'Cool Boat Company', 1, 'Bose® Premium Sound', '3 MegaStrong® Sails', '16,000 lbs', '45ft', '50ft', .05, 'USA', 'Gas', 90

我只有15条船。但是我也有15辆汽车,卡车,SUV,吉普车,半塞子和摩托车。

我的示例数据不切实际,但是您是否注意到大多数字段具有相同的数据?我可以将其分解为多个表,但随后会有大量数据很少的表,而这种复杂程度对我而言并没有真正的好处。

1 个答案:

答案 0 :(得分:1)

肯定有最佳实践,用于在数据库中存储冗余数据。听起来您没有足够的数据,或者该项目不够大或不够重要,也许您将深入研究如何最好地存储数据。如果这是一个宠物项目并且可行,那就太好了。

您可以实施一项很好的正式建议,以更好地“标准化”数据-如果您确定某个表的列中的大多数数据始终具有相同的数据或几组数据,一起使用,无需将它们包括在基表中。以您的船为例,如果您有12艘全部来自Cool Boat Company的船,并且它们都具有相同的Bose声音,则可以更改该表以仅存储长度和宽度,并将所有其他数据捕获为“类型,然后将有关“类型”的信息存储在另一个表中,如下所示:

船表现在看起来像

  

     

TypeOfBoatId,长度,宽度,名称##

     

1,“ 35英尺”,“ 40英尺”,“响尾蛇!”

     

1,“ 37英尺”,“ 40英尺”,“大贝莎”

     

2,“ 4055英尺”,“ 2990英尺”,“水宫”

然后将所有冗余数据存储在新的TypeOfBoat表中

  

TypeOfBoat

     

TypeOfBoatId,公司,声音等...

     

1,“酷船公司”,“Bose®Premium Sound”等...

     

2,“坏男孩船”,“计算机扬声器”等...

然后,您可以通过匹配的TypeOfBoatId将Boat关联到TypeOfBoat,并且不具有所有冗余数据,并且您使用一个额外的表而不是大量的额外表来完成所有操作。因此,Boat表存储的信息通常与每条船不同,而TypesOfBoats存储的信息通常与许多船相同。