以上是我的应用程序的规范化数据库结构。我将存储用户及其收藏的图片。图像可能是单独的(托管在reddit上)或专辑(托管在imgur上),它们总是有标题。
问题是 - 数据库设置正确吗?我有这种感觉,我对ImageAlbum和Image表关系有问题。
编辑:这可能有用吗?答案 0 :(得分:1)
原始设计的主要问题是用户和图像之间的预期关系是不可能的,因为这两个表没有连接。
作为一般经验法则,如果表之间存在1-1或1-many关系,则可以依赖约束。即1个客户可以下多个订单。您有一个带有Customer
PK列的CustomerID
表,以及一个包含Order
PK列的OrderID
表,以及一个CustomerID
列的外键约束客户表的。这确立了关系,并确保如果您不是客户,则无法下订单。
订单通常由一个或多个产品组成,产品通常可以按多个订单进行购买。在这种情况下,您无法以相同的方式设置此关系。一个常见的解决方法是使用建立多对多关系的中间表来完成此操作。
因此,在早期表格的基础上,我们还有一个Product
表,其中ProductID
列为PK。要设置Order
和Product
之间的关系,您可以使用OrderProduct
表格,其中FK指向有问题的OrderID
和ProductID
(以及可能还有一些东西,表示这个特定订单的产品数量,也许类似于FK到折扣或活动表,以及诸如此类的东西。
因此,在您的方案中,我将使用类似方法建立Image
和User
之间的关系,并简单地添加UserImage
表以允许多对多关系。然后,您还可以添加AlbumImage表,以确定图像和相册之间的多对多关系。
如评论中所示,确实没有必要拥有AlbumTitle表。它自然属于Album表。 ImageTitle属于UserImage表,因为每个用户都可以将自己的标题添加到图像中。