Database 使用NOT NULL标识关系或非标识关系?
我有一个简单的数据库模型,包含两个实体用户和消息 型号:Database 使用NOT NULL标识关系或非标识关系?,database,database-design,Database,Database Design,我有一个简单的数据库模型,包含两个实体用户和消息 型号: 我不明白它应该有什么关系。据我所知,若并没有用户,消息就不可能存在,那个么它应该具有标识关系。但如果我将创建与NOT NULL FK的非标识关系。在这种情况下是否具有相同的行为?具有强制关系与具有标识关系不同 标识关系具有主键,主键包括父实体类型的外键以及一个或多个其他谓词(列)。例外情况是1:1标识关系,在这种情况下,外键足以唯一标识子实体类型 如果您的消息表将有自己的唯一标识符,独立于用户的外键,则两者之间的关系不是识别关系 对于什
我不明白它应该有什么关系。据我所知,若并没有用户,消息就不可能存在,那个么它应该具有标识关系。但如果我将创建与NOT NULL FK的非标识关系。在这种情况下是否具有相同的行为?具有强制关系与具有标识关系不同 标识关系具有主键,主键包括父实体类型的外键以及一个或多个其他谓词(列)。例外情况是1:1标识关系,在这种情况下,外键足以唯一标识子实体类型 如果您的
消息
表将有自己的唯一标识符,独立于用户
的外键,则两者之间的关系不是识别关系
对于什么是建立关系模型的“正确”方式,没有硬性规定。对于是否每个表都应该有一个无意义的、自动生成的整型主键等问题,人们有不同的(并且通常持有强烈的)观点
在你的情况下,我会问你如何看待信息。某个特定消息是用户a发送的第2437条消息,还是您系统中的第835092条消息?您可以用任何一种方式来看待它,但基于您的系统将如何使用这些数据,什么对您更有意义呢
我还想问,您的设计记录了谁发送消息,但它在哪里记录了谁接收消息?您的系统是否知道这一点,或者所有消息是否都发布到“公众”(无论这对您的系统意味着什么)?这一事实是否会影响您对
消息的标识符的思考?在我的案例中,系统中的用户可以在公共组中发送消息(有一个虚拟组,其中用户可以在此组中发送消息,并显示在网页上)。据我所知,如果消息
实体有自己的id
它应该没有任何PK吗?@Dev9567485如果消息
有自己的id
,那么这就是主键(PK)。但是如果消息没有发送者就不能存在,为什么它必须是不可识别的?@Dev9567485你没有足够仔细地阅读我的答案。我没说一定是不可识别的。我说那不一定是身份。这是一个设计选择。在您的情况下,看起来您选择将其设置为非标识,因为您似乎定义了一个唯一的候选密钥(id\u message
),因此可以自行标识,而无需参考id\u sender
。