使用NOT NULL识别关系或不识别?

时间:2018-05-27 11:37:25

标签: database database-design

我有一个简单的数据库模型,包含两个实体User和Message。

模型:
model

我不明白它应该有什么关系。据我了解,如果消息不存在没有用户,它应该有识别关系。但是,如果我将与NOT NULL FK创建非识别关系。在这种情况下是否有相同的行为?

1 个答案:

答案 0 :(得分:1)

拥有强制性关系与识别关系不同。

标识关系具有主键,其包括父实体类型的外键以及一个或多个其他谓词(列)。例外情况是1:1标识关系,在这种情况下,外键足以唯一地标识子实体类型。

如果您的message表具有自己的唯一标识符,与user的外键无关,则两者之间的关系不是识别关系。

对于建立关系的“正确”方式,没有严格的规则。人们对诸如每个表是否应该具有无意义的,自动生成的整数主键之类的事情有不同的(并且经常强烈持有)意见。

在你的情况下,我会问你如何看待消息。是否是特定消息,例如用户A 发送的第2437条消息,或者只是系统中的 835092nd 消息?你可以用任何一种方式来看待它,但根据你的系统如何使用这些数据,对你更有意义吗?

我也会问,你的设计记录了谁发送了一条消息,但它在哪里记录了谁收到了消息?您的系统是否知道或者所有消息都发布到“公共”(这对您的系统意味着什么)?这个事实是否会影响您对message的标识符的看法?