design-patterns - 具有 2 个链接表的 derby 数据库
问题描述
我正在开发一个照片收集应用程序,用 java 编码并使用 derby 进行存储。这个想法是会有一个集合的文件系统视图和一个基于类别的视图。每张照片将属于一个或多个(可能少于 5 个)类别,每个类别可能包含数百张照片。
所以我想出了我的桌子的想法: -
照片
编号 INT(5000) 文件路径 TINYTEXT(100) 类别外键
类别
标识 TINYINT(50) 名称 TINYTEXT(30) 照片外键
但是如何让每个照片 id 几个类别和每个类别 id 很多照片呢?这样做的推荐方法是什么?
解决方案
您正在寻找所谓的多对多关系。这不是最常见的关系类型,但它很常见,有很多最佳实践示例。您要做的是创建第三个数据库表,并将其命名为 photocategoryrelations。在该表中,您将有代表两个表之间关系的条目(行)。这种表通常称为联结表、桥接表或链接表。术语是可以互换的。桥接表的列应包含两个参与表(照片和类别)的唯一 ID。然后这些可以用作外键。
这是一篇快速文章,描述了几种不同的数据库关系类型,包括您需要的多对多关系。
编辑:在很多情况下,关系表本身实际上可以代表更具体的东西,您可以这样命名。例如,该场景的许多示例都使用班级和学生作为他们的参与表,而桥接表称为注册,因为它代表了所有班级注册。一个班级可以有多个学生,学生可以在多个班级。
推荐阅读
- python - 在Python中用NaN替换一列中的多个字符
- html - 无法将自定义字体添加到 HTML/CSS 网站模板
- amazon-web-services - 用于 AWS Cloudtrail json 日志的 Splunk 道具配置
- javascript - 在单击带有所有参数的部分单选按钮时提交父表单,而不是在 Rails 中刷新
- django - 如何将 Celery 配置为使用 Gunicorn 提供的 Django 应用程序作为 systemd 服务运行?
- ios - 在模拟器中推送通知 - 不工作 Xcode 11.4beta
- symfony - 在 Symfony 中向返回的实体添加数据
- firebase - Android NDK Firebase crashlytics SDK CrashlyticsOrgIdException :无法获取 Crashlytics 组织 ID
- javascript - 从Vue js中的动态类名获取元素
- python - 用python从字符串中删除不需要的引号