联结表属性可以在另一个表中用作外键吗?

时间:2016-08-20 14:01:28

标签: sql relational-database entity-relationship

假设我有一个表患者和一个表测试。患者可以进行许多测试,并且对许多患者进行测试。所以这是一对多关系。我在它们之间创建了一个联结表。我还想存储患者想要进行测试的日期,所以我在结点表中这样做。此外,假设患者在一天内进行了超过1次测试,并且我想在该日期针对所有测试创建特定的结算帐户。

我创建了一个自动生成的结算号码。我也将它添加到联结表中。

到目前为止,我的联络表记录了患者可能在某个日期进行的检查以及账单编号

现在我创建一个表billingaccounts。在此表中,我希望将所有帐单信息存储在1个帐单号中,例如totalamount,付费金额等。我还想在此处包含结算号,因为它可以帮助我识别患者并测试结算帐户字段所指的内容。

我试图在此结算帐户表中将结算号码作为前一个联结表中结算号的外键。

但我无法做到这一点,因为联结表中的结算号不能保持唯一,因为它是一个m:n联结表。

我可以做些什么来完成这项工作或任何其他替代方案?

2 个答案:

答案 0 :(得分:0)

只需将主键列添加到“联结”表即可。您的联结表比简单匹配两个表更丰富。因为您需要外键关系,所以它值得拥有自己的主键。例如(使用MySQL语法):

create table PatientTests (
    PatientTestId int primary key auto_increment,
    PatientId int not null,
    TestId int not null,
    TestDate date,
    BillingAccount int,
    . . .
    constraint fk_patienttests_patientid references Patients(PatientId),
    . . .
);

创建表

答案 1 :(得分:0)

使联结表中的billing no成为billingaccounts表主键的外键。因此,您首先要在billingacounts中创建一个新行,包括自动生成的id / billing no,然后在联结表中使用该数字。