小编典典

多对多,但来自多个表

sql

我应该运送一个内容可变的盒子,并在数据库中进行跟踪。我的所有项目(盒子的内容)都是不同的类型,并且需要不同的表来跟踪各自的信息,尽管每种项目类型都具有相同的长度序列号(即PK是相同的数据类型)。我有一个Boxes桌子。

因此,每个项目都有一个表(〜7个表)和box表。我想创建一个BoxContents表。我试图制作一个多对多关系中间表,其中有两列:一列为BoxID,一列为ItemBarcode,其中BoxIDBoxes表上PKItemBarcode的FK是,而Items表上每个PK的FK(即I尝试将多个表链接到同一列)。毫不奇怪,这没有用。我试图插入一个项目,但除其中一种ItemBarcode关系外,所有其他人都违反了FK约束。

如何构建我的关系以将几种类型的项目链接到一个表中的一个框?这是合乎逻辑的方法吗?你需要更多信息?


阅读 139

收藏
2021-04-22

共1个答案

小编典典

如果这些ItemBarcode值确实是唯一的,那么我的首选是:

编辑: 添加了所需触发器的说明。

  • 添加触发器以增强条形码的唯一性。(每个项目表上的插入/更新触发器需要验证所有(新)分配的条形码没有出现在其他项目表中。)
  • 使用单个BoxId/ItemBarcode表,在条形码侧没有FK关系,但带有触发器以确保其仍然有效。(关联表上的插入/更新触发器需要验证项目表中是否存在条形码。每个项目表上的删除触发器都需要防止或级联删除关联表中的项目。项目表需要更新和更改关联表中的条形码。最后一个可以集成到先前项目符号中的插入/更新触发器中。)
  • 请考虑使用所有项目的 视图 来访问ItemBarcode

我的第二个选择是 ñ BoxId /ItemBarcode对表 ñ
项目类型。直截了当,但是有点忙。这使得添加新的项目类型变得比需要的更加混乱。

我不会用一个BoxId/
ItemTypeId/ItemBarcode表。它通过再次关联ItemTypeId和来对数据进行ItemBarcode归一化,它不允许在条形码侧使用FK,并且仍然需要触发器来确保完整性。

不要害怕触发器。他们可以有效地解决一些问题。

2021-04-22