AFAIK, dies ist mit Standard-Fremdschlüsseln nicht möglich. Sie können jedoch mithilfe von Triggern etwas implementieren, um die Datenintegrität sicherzustellen. Im Wesentlichen würde der Trigger das Vorhandensein eines "Fremdschlüssels" in der referenzierten Tabelle prüfen - der Wert, der vorhanden sein muss -, wenn ein Einfügen oder Aktualisieren der referenzierenden Tabelle stattfindet. Ebenso kann ein Löschvorgang aus der referenzierten Tabelle einen Trigger enthalten, der nach Datensätzen in der referenzierenden Tabelle sucht, die den gelöschten Schlüssel verwenden.
Update: Obwohl ich ging richtig für die "Antwort" stimme ich mit dem Kommentar von @onedaywhen, dass dies tatsächlich ein Design-Problem ist, das Sie wahrscheinlich überdenken Sie Ihr Design machen sollte. Das heißt, Sie sollten drei verschiedene Spalten anstelle einer Spalte haben, die auf drei Tabellen verweist. Sie würden einfach die anderen beiden Spalten leer lassen, wenn eine gefüllt ist, was wiederum die Verwendung von Standard-Fremdschlüsseln ermöglichen würde. Jede Sorge, dass dies zu viel Platz verbrauchen würde, ist albern; es stellt einen schwerwiegenden Fall einer vorzeitigen Optimierung dar - es wird einfach keine Rolle spielen.
mailid, PhoneID, EMAILID sind drei verschiedene Domänen und kann nicht, sollte nicht eine einzige ChannelID Säule modelliert werden. Das ist fundamentales Zeug. – onedaywhen