规范化图像相册数据库

时间:2017-12-05 08:50:55

标签: sql-server database database-normalization

First version

以上是我的应用程序的规范化数据库结构。我将存储用户及其收藏的图片。图像可能是单独的(托管在reddit上)或专辑(托管在imgur上),它们总是有标题。

问题是 - 数据库设置正确吗?我有这种感觉,我对ImageAlbum和Image表关系有问题。

编辑:这可能有用吗? enter image description here

1 个答案:

答案 0 :(得分:1)

原始设计的主要问题是用户和图像之间的预期关系是不可能的,因为这两个表没有连接。

作为一般经验法则,如果表之间存在1-1或1-many关系,则可以依赖约束。即1个客户可以下多个订单。您有一个带有Customer PK列的CustomerID表,以及一个包含Order PK列的OrderID表,以及一个CustomerID列的外键约束客户表的。这确立了关系,并确保如果您不是客户,则无法下订单。

订单通常由一个或多个产品组成,产品通常可以按多个订单进行购买。在这种情况下,您无法以相同的方式设置此关系。一个常见的解决方法是使用建立多对多关系的中间表来完成此操作。

因此,在早期表格的基础上,我们还有一个Product表,其中ProductID列为PK。要设置OrderProduct之间的关系,您可以使用OrderProduct表格,其中FK指向有问题的OrderIDProductID(以及可能还有一些东西,表示这个特定订单的产品数量,也许类似于FK到折扣或活动表,以及诸如此类的东西。

因此,在您的方案中,我将使用类似方法建立ImageUser之间的关系,并简单地添加UserImage表以允许多对多关系。然后,您还可以添加AlbumImage表,以确定图像和相册之间的多对多关系。

如评论中所示,确实没有必要拥有AlbumTitle表。它自然属于Album表。 ImageTitle属于UserImage表,因为每个用户都可以将自己的标题添加到图像中。