SQL 对多个表的约束

SQL constraint over multiple tables

我有一小组表正在与 SQL 服务器连接。

这是一个基本图表:

注意:为了简洁起见,我删除了一些表格中的其他列。

所有这些都可以正常工作,但设计并不像 could/should 那样紧凑。

问题是:

PageParam 也连接到 RouteParam,这会导致完整性问题。

PageParam 最终与 Page 相关。 RouteParam.

也是

但是,根据当前的设计,Page 在每种情况下可能会有所不同 - 没有任何限制可以确保它相同,但必须如此。我知道可能需要额外的 table/columns,但我正在努力了解如何使这项工作发挥作用的逻辑。

感谢任何建议。

PageID添加到RouteParam并制作FK(PageID,RouteID)。还将 PageID 传播到 PageParamPageParam 然后会有两个 FK:FK (PageID, PageVarianID), FK (PageID, RouteParamId)。

由于外键必须与主键或唯一索引相关,因此还需要创建复合主键或添加复合唯一索引。

   PageParam                                              PageVariant
  ┌────────────────────────┐                             ┌───────────────────────┐
  │ PageParamID    PK      │    PageID, PageVariantID    │ PageVariantID   PK, UX│
  │ PageID         FK1, FK2├───────────────────────────► │ PageID          FK, UX│
  │ PageVariantID  FK1     │                             └─────────┬─────────────┘
  │ RouteParamID   FK2     │                                       │
  └─────────────┬──────────┘                                       │
                │                                                  │PageID
                │PageID, RouteParamID                              │
                │                                                  │
   RouteParam   ▼                Route                    Page     ▼
  ┌──────────────────────┐      ┌──────────────────┐     ┌──────────────┐
  │ RouteParamID  PK, UX │      │  RouteID  PK, UX │     │ PageID  PK   │
  │ PageID        FK, UX ├─────►│  PageID   FK, UX ├────►│              │
  │ RouteID       FK     │      └──────────────────┘     └──────────────┘
  └──────────────────────┘ PageID                    PageID
                           RouteID