Может ли атрибут соединительной таблицы использоваться в качестве внешнего ключа в другой таблице?

sql relational-database entity-relationship

444 просмотра

2 ответа

Предположим, у меня есть таблица пациентов и таблица тестов. Пациенты могут пройти много тестов, и тесты даны многим пациентам так что это отношения многие ко многим. Я создаю соединительную таблицу между ними. Я также хочу сохранить дату, когда пациент хочет сдать анализы, поэтому я делаю это в соединительной таблице. Кроме того, предположим, что пациент проходит более 1 теста в один день, и я хочу создать конкретную платежную учетную запись для всех тестов в эту дату.

Я создаю автоматически сгенерированный биллинг нет. Я добавляю это и к соединительной таблице.

До сих пор в моей соединительной таблице записаны тесты, которые пациент, возможно, прошел на дату, а номер счета нет.

Теперь я создаю таблицу billingaccounts. В этой таблице я хочу сохранить всю информацию для выставления счетов против 1 номера счета, например, totalamount, оплаченную сумму и так далее. Я также хочу указать здесь номер платежа, так как он поможет мне идентифицировать пациента и проверить поле платежного счета, к которому относится.

Я пытался сделать платежное нет в этой таблице счетов-фактур внешним ключом для платежного номера в предыдущей соединительной таблице.

Но я не могу этого сделать, поскольку номер платежа no в соединительной таблице не может быть уникальным, поскольку это таблица соединений m: n.

Что я могу сделать, чтобы сделать эту работу или любые другие альтернативы?

Автор: Protim Mallick Источник Размещён: 08.11.2019 11:24

Ответы (2)


0 плюса

Просто добавьте столбец первичного ключа в таблицу «junction». Ваша таблица соединений богаче, чем просто сопоставление двух таблиц. Поскольку вы хотите отношения с внешним ключом, оно достойно своего собственного первичного ключа. Например (используя синтаксис 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),
    . . .
);

создать таблицу

Автор: Gordon Linoff Размещён: 20.08.2016 03:08

0 плюса

Сделайте billing noв соединительной таблице внешний ключ к первичному ключу billingaccountsтаблицы. Таким образом, вы должны сначала создать новую строку billingacounts, включая автоматически сгенерированный идентификатор / номер счета, а затем использовать этот номер в соединительной таблице.

Автор: reaanb Размещён: 25.08.2016 05:56
Вопросы из категории :
32x32