У меня есть таблица под названием inventory_movements, и я планирую сохранить движение продукции внутри и вне склада, он имеет такие поля, какКак я могу ограничить отношение внешнего ключа, где он может ссылаться на несколько других таблиц?
1- movement_id(PK)
2- product_id(FK)
3- quantity int
4- unit_price decimal
5- movement ENUM('in','out')
6- date datetime
7- ????????? (reference)(e.g. sell(out)- purchase(in)- fire loss(out)
- sales return (in) - purchase return (out)
Моя проблема заключается в том, что я хочу, чтобы сохранить ссылку движения (причина движения), где находится идентификатор заказа, или идентификатор покупки, идентификатор возврата покупки, .... и т. д.
, но я также хочу сделать ограничение в этом поле, чтобы убедиться, что недействительные данные (например, не существует покупки) будет храниться в базе данных, проклятия Я не могу заставить один внешний ключ ссылаться на многие таблицы (продажи, покупки, покупки, и т. д.)
очень плохое решение состоит в том, чтобы добавить столбец для каждого ссылочного типа (идентификатор продажи, идентификатор покупки, идентификатор продажи и т. Д.) И заполнить правильный номер в каждом движении, а остальные - недействительными, но это проклятие против нормализация, и я не могу добавить больше ссылок позже.
Что делать в этой ситуации?
пожалуйста, считают, что я очень новичок, благодаря
вы либо имеете ссылочную целостность в столбце # 7, либо нет. В вашем текущем черновике вы не будете – Drew
@Drew Нет, у меня нет ссылочной целостности, счета-фактуры на продажу имеют разную сериализацию, чем покупки, чем возврат, ... и т. Д. (Что означает, что у меня может быть счет-фактура покупки и счет-фактура продаж ** с таким же идентификационным номером **. В этом случае у меня есть какой-либо способ сделать ограничение внешнего ключа в столбце 7, поэтому я не получаю ссылку, которая не существует в системе (либо счет-фактура продажи или счет-фактура покупки)? –
вы можете использовать NULL, и, как правило, он нахмурился как нарушение чувствительности, но обход. Если вы хотите, чтобы я дал полный ответ, я буду, но это сводится к это для того, как бы я это сделал: каждый тип транзакции имел бы свою собственную выделенную таблицу.Он бы поддерживал полную ссылочную целостность.И использование «союза» могло бы обеспечить хронологическое представление вещей – Drew