数据库表格包含多个外键怎么处理呢?

现在有一个人员表,主键是工号

工号姓名
23张三
34李四

一个设备表格,主键是资产号

资产号设备名称
1示波器
2信号发生器

一个物料表格,主键是物料号

物料号物料名称
1电阻
2电容

现在要建立一个实验计划表格,主键是计划编号

计划编号责任人工号所需设备资产号所需物料的物料号
1231,21,2
2341,21,2

责任人、所需设备资产号、所需物料的物料号 都是外键。问题是所需设备可能有不止一个,所需物料也可能有不止一个,且个数不确定,该怎么处理呢?有人知道吗?

改变一下设计思路,用主从表实现(2个表),计划及责任人放在主表,设备及物料id放在明细表里面。

用function函数,把资产号和物料号转义成资产名称和物料名称。

ALTER function [dbo].[GetDictionaryValue](@in nvarchar(255))
returns nvarchar(255)
as 
begin
-- 先决条件:D_Code组合必须是用','隔开
-- 函数用途:可以将DictionaryValue表中的 任意D_Code字段 转化 成 D_Name 并使用逗号分割开。
    declare @out nvarchar(255) = '';
    declare @index int;
    declare @name nvarchar(255) = '';
    declare @code nvarchar(255);
    while(LEN(@in)>0)
        begin
            select @index = CHARINDEX(',', @in, 0); --找到第一个逗号
                if(@index>0)
                    begin
                        set @code =Left(@in,@index-1);
                    end;
                else
                    begin
                        set @code = @in;
                        set @index = LEN(@in);
                    end;
            set @in = RIGHT(@in,LEN(@in)-@index); --剩余部分
            select @name = D_Name from DictionaryValue where D_Code = @code;
            if(LEN(@out)=0)
                set @out =@out + @name;
            else
                set @out =@out +','+ @name;
            
        end;
    return @out;
end;


这个属于多对多啊,设置外键存储不了1,2这样的数据
将数据展开存储就行了,
1 23 1 1
2 23 1 2
3 23 2 1
4 24 2 2