我如何将主键字段关联到多个表?

问题描述 投票:1回答:1

我有4张桌子:

User 
Reports 
Photos 
Locations 

我可以举报照片,用户和位置。

我的Reports表的主键是(User_Id, Reported_Id

[Reported_Id可以属于以下3个中的任何一个:photosuserslocations

如何在实体关系模型中表示此关系?

database database-design relational-database composite-primary-key
1个回答
0
投票

问题

您不能这样做-外键(Reported_Id)不能一次引用三个表

似乎是关于数据理解的问题……而不是关于指向三个PK的FK的技术问题。

或三分之一,取决于表中的其他列。只是做不到。

这是不正确的。在关系数据库中,这样的要求非常简单:

  • Relational Model是逻辑的,它基于一阶谓词演算(也称为一阶逻辑)。具有扎实的数学基础会赋予其强大的力量。

  • [relations是逻辑生物物理Record IDs不合逻辑

  • FOL中没有定义的限制,在FOL中没有任何不能定义的内容因此,在关系型数据库(当然还有SQL,它的数据子语言)中没有什么不能定义的。。

    注意,“理论家”所倡导和推销的“关系”实际上是1960年代的记录备案系统,它没有任何关系完整性;关系力量;符合

    Relational Model

    的数据库具有的关系速度。此类系统通过使用物理Record IDs进行标识。在这样的原始系统中,是的,数据不是逻辑的,并且不能定义逻辑关系。此外,所需的SQL代码太可怕了。

    您在逻辑文章中寻求的内容,或门
  • 。需要定义“或”门的特定性质(有几种形式):即建模练习。

数据忘记ID列,这只会削弱数据建模工作。专注于数据,数据的含义以及与之相关的其他数据。也许您正在尝试按照以下方式声明某些内容(这些是FOPC / FOL

Predicates

):

每个用户都是独立的

    每张照片都是独立的
  • 每个位置都是独立的
  • 每个用户进行0到n个报告
  • 每个报告都是{照片|中的
  • 任何
  • 位置|用户}
  • 那太松了,我们可以收紧它。让我们继续...
  • 实体关系•子类型

此数据模型(ER级别)实现了报告的

非专有子类型群集。

All谓词在IDEF1X数据模型中是显式的,因此可以从中进行[[read,但是,我在右侧给出了相关的谓词

以文本形式

符号我的所有数据模型均以IDEF1X表示,这是自1993年以来建立关系数据库建模的标准

  • IDEF1X Anatomy是对已经过时的人的复习。

  • 非专有子类型
  • -有关子类型实现的详细信息,请参考Subtype

  • 关于对比度或兴趣

    独家子类型

  • ,请参阅this answer实体关系•可选列
      以上实现谓词:
    • 每个报告都是{照片|中的

      任何

    位置|用户}

    表示报告必须至少为{图片|位置|用户}。

      但是,如果不是这样,如果报告可以是{照片|位置|用户},即{照片|位置|用户}是每个“可选列”。
    • 确定

    三分之一,取决于表中的其他列

    确定用于每个报告的哪个或所有子类型或可选列不是问题:

    Exclusive Subtype

    是的,这确实需要基本类型中的

    Discriminator列。

    • 非专有子类型

      基类型有多个子类型,因此基类型中的“鉴别符”列无关紧要。 确定是通过子类型表中的SELECT(根据定义,它与基本类型表具有完全相同的PK)。
    • 可选列基本类型中的指示符将是多余的。

      • 通过可选列表(同上)中的SELECT确定。
      • 通常,将为基本类型创建一个VIEW,例如Report_V,并包括所有可能的列。
    © www.soinside.com 2019 - 2024. All rights reserved.