Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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/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
MySql对象链接_Mysql_Database_Database Design - Fatal编程技术网

MySql对象链接

MySql对象链接,mysql,database,database-design,Mysql,Database,Database Design,我的问题可能很简单,但我不确定什么是最好的答案 我有一个表(对象1),它需要与两个不同的表(其他对象)关联。所以我看到了两种方法。创建一个包含以下内容的链接表: LNKObject 1对象 lnkObjectObjectId-PK object1Id-FK(必填字段) object2Id-FK(非必填字段) object3Id-FK(非必填字段) object4Id-FK(非必填字段) 因此,在本例中,只填写字段object1Id,但只填写字段object2-4Id中的一个 我看到的第二个解

我的问题可能很简单,但我不确定什么是最好的答案

我有一个表(对象1),它需要与两个不同的表(其他对象)关联。所以我看到了两种方法。创建一个包含以下内容的链接表:

LNKObject 1对象

  • lnkObjectObjectId-PK
  • object1Id-FK(必填字段)
  • object2Id-FK(非必填字段)
  • object3Id-FK(非必填字段)
  • object4Id-FK(非必填字段)
因此,在本例中,只填写字段object1Id,但只填写字段object2-4Id中的一个

我看到的第二个解决方案是创建3个不同的链接表

LNKObject 1对象2

  • lnkObject1Object2Id-PK
  • 目标1-FK(必需)
  • 目标2-FK(必需)
LNKObject 1对象3

  • lnkObject1Object3Id
  • PK目标1 FK(必需)
  • 目标3-FK(必需)
LNKObject 1对象4

  • lnkObject1Object4Id
  • PK目标1-FK(必需)
  • 目标4-FK(必需)

我赞成第一种选择,因为对于编程来说这可能更容易,但是对于数据库设计来说,第二种解决方案更好。我是否错过了其他伟大的解决方案?还是有一个大的论据可以用来支持其中一个

您可以创建一个带有类型列的表,以维护与对象1链接的所有对象,如下所示


这将非常理想,因为数据库中没有空值。

是的,这是可能的,但是您不能在otherObjectId列上创建外键,因为它可以映射到多个表