Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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/7/sql-server/26.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
Sql 一个表中有多个可为空的外键_Sql_Sql Server_Database Design_Foreign Keys - Fatal编程技术网

Sql 一个表中有多个可为空的外键

Sql 一个表中有多个可为空的外键,sql,sql-server,database-design,foreign-keys,Sql,Sql Server,Database Design,Foreign Keys,我正在为促销设计一张桌子。我可以推广三种类型的实体:文章、照片和论坛线程 最初,我考虑创建一个表,其中包含三个外键,其中只设置一个外键 promotion: - id - id_article - id_photo - id_thread - promotion_type - ... other properties article: - id - .. other properties photo: - id - .. other properties thread:

我正在为促销设计一张桌子。我可以推广三种类型的实体:文章、照片和论坛线程

最初,我考虑创建一个表,其中包含三个外键,其中只设置一个外键

promotion: 
- id
- id_article
- id_photo
- id_thread
- promotion_type
- ... other properties

 article:
 - id
 - .. other properties

 photo:
 - id
 - .. other properties

 thread:
 - id
 - .. other properties

这不是一个好办法吗?在最初的想法之后,看起来这里确实可以做一些“更漂亮”的事情<代码>升级类型指示应加入哪些外键表

只需添加一列,而不是3列(id\u文章、id\u照片、id\u线程)。。例如,将其称为PromotionID,然后仍然可以使用PromotionType列来确定要绑定的表

促销表如下:-促销: -身份证 -促销id(id_文章、id_照片或id_线程) -推广型
- ... 其他属性

promotion\u type
似乎是多余的。通过设计它可以节省一些连接时间,因为我们不必连接所有表,只连接需要的表。这还可以由哪个id的值正确确定?这似乎是一个很好的观点,sql server不会尝试加入null值,即使我在查询中请求它。我不想削弱数据完整性。使用FK,sql server将检查另一个表中是否存在此id。