Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用NOT NULL标识关系或非标识关系?_Database_Database Design - Fatal编程技术网

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