首页 > 解决方案 > 具有 2 个链接表的 derby 数据库

问题描述

我正在开发一个照片收集应用程序,用 java 编码并使用 derby 进行存储。这个想法是会有一个集合的文件系统视图和一个基于类别的视图。每张照片将属于一个或多个(可能少于 5 个)类别,每个类别可能包含数百张照片。

所以我想出了我的桌子的想法: -

照片

编号 INT(5000)    
文件路径 TINYTEXT(100)
类别外键

类别

标识 TINYINT(50)
名称 TINYTEXT(30)
照片外键

但是如何让每个照片 id 几个类别和每个类别 id 很多照片呢?这样做的推荐方法是什么?

标签: design-patterns

解决方案


您正在寻找所谓的多对多关系。这不是最常见的关系类型,但它很常见,有很多最佳实践示例。您要做的是创建第三个数据库表,并将其命名为 photocategoryrelations。在该表中,您将有代表两个表之间关系的条目(行)。这种表通常称为联结表、桥接表或链接表。术语是可以互换的。桥接表的列应包含两个参与表(照片和类别)的唯一 ID。然后这些可以用作外键。

这是一篇快速文章,描述了几种不同的数据库关系类型,包括您需要的多对多关系。

编辑:在很多情况下,关系表本身实际上可以代表更具体的东西,您可以这样命名。例如,该场景的许多示例都使用班级和学生作为他们的参与表,而桥接表称为注册,因为它代表了所有班级注册。一个班级可以有多个学生,学生可以在多个班级。


推荐阅读