我有4张桌子:
User
Reports
Photos
Locations
我可以举报照片,用户和位置。
我的Reports
表的主键是(User_Id, Reported_Id
)
[Reported_Id
可以属于以下3个中的任何一个:photos
,users
和locations
。
如何在实体关系模型中表示此关系?
您不能这样做-外键(Reported_Id)不能一次引用三个表
似乎是关于数据理解的问题……而不是关于指向三个PK的FK的技术问题。
或三分之一,取决于表中的其他列。只是做不到。
这是不正确的。在关系数据库中,这样的要求非常简单:
Relational Model是逻辑的,它基于一阶谓词演算(也称为一阶逻辑)。具有扎实的数学基础会赋予其强大的力量。
[relations是逻辑生物物理Record IDs
不合逻辑
FOL中没有定义的限制,在FOL中没有任何不能定义的内容因此,在关系型数据库(当然还有SQL,它的数据子语言)中没有什么不能定义的。。 Relational Model注意,“理论家”所倡导和推销的“关系”实际上是1960年代的记录备案系统,它没有任何关系完整性;关系力量;符合
的数据库具有的关系速度。此类系统通过使用物理Record IDs
进行标识。在这样的原始系统中,是的,数据不是逻辑的,并且不能定义逻辑关系。此外,所需的SQL代码太可怕了。
数据忘记ID
列,这只会削弱数据建模工作。专注于数据,数据的含义以及与之相关的其他数据。也许您正在尝试按照以下方式声明某些内容(这些是FOPC / FOL Predicates
每个用户都是独立的
此数据模型(ER级别)实现了报告的
以文本形式
。符号我的所有数据模型均以IDEF1X表示,这是自1993年以来建立关系数据库建模的标准
IDEF1X Anatomy是对已经过时的人的复习。
独家子类型
表示报告必须至少为{图片|位置|用户}。
三分之一,取决于表中的其他列
确定用于每个报告的哪个或所有子类型或可选列不是问题:
Exclusive Subtype
Discriminator列。
非专有子类型
基类型有多个子类型,因此基类型中的“鉴别符”列无关紧要。 确定是通过子类型表中的SELECT
(根据定义,它与基本类型表具有完全相同的PK)。可选列基本类型中的指示符将是多余的。
SELECT
确定。VIEW
,例如Report_V
,并包括所有可能的列。