AFAIK, no puede hacer esto con claves externas estándar. Sin embargo, podría implementar algo para ayudar a garantizar la integridad de los datos mediante el uso de activadores. Básicamente, el activador verificaría la presencia de una "clave externa" en la tabla referenciada, el valor que debe estar presente, siempre que haya una inserción o actualización en la tabla de referencia. Del mismo modo, una eliminación de la tabla a la que se hace referencia podría tener un activador que verifique los registros en la tabla de referencia que utiliza la clave que se elimina.
Actualización: Aunque fui directo a la "respuesta", estoy de acuerdo con el comentario dejado por @oneday cuando se trata de un problema causado por el diseño que probablemente debería hacer reconsiderar su diseño. Es decir, debe tener tres columnas diferentes en lugar de una columna que haga referencia a tres tablas. Simplemente dejaría las otras dos columnas nulas cuando se llene una que, a su vez, le permitiría usar claves externas estándar. Cualquier preocupación de que esto "use demasiado espacio" es una tontería; representa un caso severo de optimización prematura, simplemente no va a importar.
MailID, PhoneID, EMAILID son tres dominios distintos y no pueden, no deben ser modelado utilizando una única columna de channelId. Esto es algo fundamental. – onedaywhen