SQL表和关系设计

时间:2015-10-27 20:01:06

标签: sql database-design

我有以下三个表

         Deliveries
DeliveryID   A1    
-----------|----|
1          | 01 |      
2          | 01 |      
3          | 02 | 

         JobLinks
LinkID  DeliveryID   A1   JobID
------|------------|-----|------|  
1     | Null       | 01  |  1   |
2     | 3          | Null|  2   |

          Jobs
 JobID   
-------|
1      |      
2      |       

因此,获得的知识是,Job 1用于交付1和2,而Job 2用于交付3。

一个证明这一点的查询,

SELECT  Deliveries.DeliveryID,
        Jobs.JobID
FROM    Deliveries
        JOIN JobLinks 
            ON JobLinks.DeliveryID = Deliveries.DeliveryID
            OR JobLinks.A1 = Deliveries.A1
        JOIN Jobs
            ON Jobs.JobID = JobLinks.JobID

这将返回每个交付及其相关的作业

DeliveryID  JobID    
-----------|-----|
1          | 1   |      
2          | 1   |      
3          | 2   |

我看到的问题是Deliveries.A1不是Unique字段。在创建交付记录后,可以更改它。这意味着每当更改此字段时,我可能必须更新JobLinks表。这对我来说似乎是一个糟糕的设计。我如何设计这些关系以避免这种情况?

2 个答案:

答案 0 :(得分:1)

只需使用和ID自动数字

为A1元数据创建一个表
A1_ID    A1_meta
  1      01
  2      02

然后DeliveriesJobLinks会将A1_ID称为外键

因此,您只能在一个地方更改A1_meta

答案 1 :(得分:-1)

抱歉,我不知道你的需求是什么,但这绝对是糟糕的设计。

相关问题