create table b(id int,jobid char(10),jobname char(100),deptid char(10) not null)
create table a( id int ,deptid char(10),jobid char(10) REFERENCES b(JobID)

解决方案 »

  1.   

    如何考虑depid和jobid对应,即表b里的depid和jobid  能和表a里的depid和jobid对应。不是表b里的jobid和表a的jobid对应。除非
    create table b(id int,jobid char(10),jobname char(100),deptid char(10) not null)
    create table a( id int ,deptid char(10),jobid char(10) REFERENCES b(JobID),b(depid)
      

  2.   

    表a
    {
    id       编号
    depid    部门ID <<===是冗余的
    jobid    岗位ID
    }
      

  3.   

    举例:CREATE TABLE [dbo].[TABLE2] (
    [a] [int] NULL ,
    [b] [int] NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[TABLE1] (
    [a] [int] NOT NULL ,
    [b] [int] NOT NULL 
    ) ON [PRIMARY]
    GOALTER TABLE [dbo].[TABLE1] ADD 
    CONSTRAINT [PK_TABLE1] PRIMARY KEY  CLUSTERED 
    (
    [a],
    [b]
    )  ON [PRIMARY] 
    GOALTER TABLE [dbo].[TABLE2] ADD 
    CONSTRAINT [FK_TABLE2_TABLE1] FOREIGN KEY 
    (
    [a],
    [b]
    ) REFERENCES [dbo].[TABLE1] (
    [a],
    [b]
    )
    GO
      

  4.   

    create table b(id int,jobid char(10),jobname char(100),deptid char(10) not null,primary key (deptid,jobid))
    create table a( id int ,deptid char(10),jobid char(10) REFERENCES b(depid,JobID))
      

  5.   

    表a
    {
    id       编号
    Badge    工号        --实际上还有这个字段
    depid    部门ID <<===是冗余的
    --这里不是冗余,只是说明这个人属于哪个部门,担任什么岗位。这个岗位必须是此部门下的岗位。
    jobid    岗位ID
    }
    create table b(id int,jobid char(10),jobname char(100),deptid char(10) not null,primary key (deptid,jobid))
    create table a( id int ,deptid char(10),jobid char(10) REFERENCES b(depid,JobID))
    --这样也是可以的。但是
    希望最好用约束表达式写。
    我写的jobid in(select t.jobid from b t where t.depid=depid)
    保存时说约束表达式不支持子查询