Почему у вас не может быть внешнего ключа в полиморфной ассоциации?

Билл Карвин прав в том, что ruby-on-rails внешние ключи не могут использоваться ruby-on-rails с полиморфными отношениями ruby-on-rails из-за того, что SQL на самом foreign-key-relationship деле не имеет полиморфных rails отношений собственной концепции. Но ror если ваша цель иметь внешний polymorphic-associations ключ - обеспечить ссылочную ror целостность, вы можете смоделировать databases его с помощью триггеров. Это ror становится специфичным для database-structure БД, но ниже приведены некоторые database недавние триггеры, которые database-structure я создал для имитации поведения db каскадного удаления внешнего foreign-key-relationship ключа в полиморфных отношениях:

CREATE FUNCTION delete_related_brokerage_subscribers() RETURNS trigger AS $$
  BEGIN
    DELETE FROM subscribers
    WHERE referrer_type = 'Brokerage' AND referrer_id = OLD.id;
    RETURN NULL;
  END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER cascade_brokerage_subscriber_delete
AFTER DELETE ON brokerages
FOR EACH ROW EXECUTE PROCEDURE delete_related_brokerage_subscribers();


CREATE FUNCTION delete_related_agent_subscribers() RETURNS trigger AS $$
  BEGIN
    DELETE FROM subscribers
    WHERE referrer_type = 'Agent' AND referrer_id = OLD.id;
    RETURN NULL;
  END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER cascade_agent_subscriber_delete
AFTER DELETE ON agents
FOR EACH ROW EXECUTE PROCEDURE delete_related_agent_subscribers();

В database-structure моем коде запись в таблице ruby-on-rails brokerages или запись в таблице agents может ror относиться к записи в таблице rails subscribers.

ruby-on-rails

database

foreign-key-relationship

polymorphic-associations

2022-09-22T21:34:08+00:00
Вопросы с похожей тематикой, как у вопроса:

Почему у вас не может быть внешнего ключа в полиморфной ассоциации?