MySQL: таблица «Платежи» привязана к нескольким возможным таблицам «Сервис» - PullRequest
0 голосов
/ 19 октября 2018

Я постараюсь быть кратким и ясным.

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

Я хотел бы создать(Libre Office Base) форма, которая добавляет платеж.Но это потребует не только выполнения INSERT для нескольких таблиц («Платежи» для информации и заданной таблицы «Сервис» для внешнего ключа), но и для добавления первичного ключа во внешнюю таблицу до того, как сама форма создаст этот первичный ключ.,Таким образом, эта опция выглядит не так.

Я попытался сделать это по-другому - поместить внешний ключ «Сервис» в таблицу «Платежи» и вставить туда идентификаторы (первичные ключи) из других таблиц, но сказал:первичные ключи - это простые целые числа, и добавление, скажем, идентификатора ServiceA ID = 1, заставило бы базу данных думать, что объект ID = 1 из всех других таблиц также "оплачен".Я знаю, что мог бы различать идентификаторы между этими таблицами, делая их varchars, а не целыми числами, но тогда я не думаю, что есть способ сделать их автозаполнениями, верно?

Наконец, я подумал, что, возможно, категория«вариант поможет» - выберите тип услуги (например, «Хирургия», «Продажа лекарств», «Экзамен»), а затем введите один из идентификаторов.Это может дать мне возможность разделять идентичные номера в запросах.Однако это не решило бы проблему, заключающуюся в том, что попытка вставить ID = 40, скажем, из «Операций», в то время как в любой из других таблиц такого идентификатора не было, вызвала бы явную ошибку, нарушение отношения, поскольку база данныхэта запись ведет в никуда.

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

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я думаю, что нашел способ сделать именно то, что мне нужно.

Во-первых, я создал таблицу с именем «For» только с одним полем - BIGINT ID с автоинкрементом.Затем я создал связь между этой таблицей и идентификаторами моих таблиц «служб» (теперь, очевидно, также BIGINT).При этом все они теперь имеют автоматически увеличивающиеся идентификаторы (внешний ключ от «For»), но между ними не повторяется ни один.Нет риска, что моя база данных будет перепутана с тем, к какой таблице принадлежит идентификатор.

Далее я создал таблицу с именем «PS» (для «Платежей и услуг»), которая будет действовать как «промежуточный»таблица в мульти-мульти отношения.Я хочу, чтобы люди платили за многие услуги одним платежом, если они хотят, а также позволяли им платить за один сервис несколькими более мелкими платежами.Таким образом, в таблице «Для» есть поле для внешнего ключа от «Платежей» (идентификатор) и внешний ключ от «Для» (он же идентификаторы из Служб).

Звучит как беспорядок, возможно,но я думаю, что это наилучшее из возможных решений.

Теперь у меня возникли другие проблемы с формой "добавить платеж", которую я пытаюсь сделать, так что ... Увидимся с одним вопросом, я думаю;)

0 голосов
/ 19 октября 2018

Попробуйте использовать триггер, после того, как основной был вставлен, триггер будет вызван, и другая информация будет добавлена ​​в другие таблицы.

...