规范化相册数据库

Normalising image album database

以上是我的应用程序的规范化数据库结构。我将存储用户和他们最喜欢的图像。图片可能是单独的(托管在 reddit 上)或在相册中(托管在 imgur 上),并且它们总是有一个标题。

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

编辑:这可能有用吗?

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

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

一个订单通常由一个或多个产品组成,一个产品通常可以在多个订单中购买。在这种情况下,您无法以相同的方式建立这种关系。一个常见的解决方法是使用建立 many-to-many 关系的中间 table 来做到这一点。

因此,在早期 table 的基础上,我们还有 Product table,其中 ProductID 列作为 PK。要建立 OrderProduct 之间的关系,您可以记入 OrderProduct table,FK 指向 OrderIDProductID有问题(可能还有一些表示此特定订单的产品数量的东西,可能还有一些东西,比如折扣或活动的 FK table,等等)。

所以在你的场景中,我将使用类似的方法建立 ImageUser 之间的关系,并简单地添加一个 UserImage table 以允许many-to-many关系。然后您还添加一个 AlbumImage table 以确定图像和相册之间的 many-to-many 关系。

如评论中所述,真的不需要 AlbumTitle table。它自然属于专辑table。 ImageTitle 属于 UserImage table,因为每个用户都可以将自己的标题添加到图像中。