escenario de layout de database relacional

Considere que tenemos 2 tablas como las siguientes:

products: id, name (PK = id) product_group1: product_id (PK = a1_id) (FK = a1_id REFRENCES a1) product_group2: product_id (PK = a1_id) (FK = a1_id REFRENCES a1) product_group3: product_id (PK = a1_id) (FK = a1_id REFRENCES a1) 

la pregunta es, quiero diseñar una tabla llamada productos_probados que solo acepte productos del grupo1 y del grupo2 (no del grupo3).

¿cómo puedo diseñar tal tabla? (Estoy usando mysql BTW)

No puede resolver este problema con su layout actual sin interponer alguna lógica en el nivel de activación o aplicación. FOREIGN KEY s no puede hacer reference a más de una tabla (entiendo que su layout use una tabla por grupo de productos, si me equivoco, por favor avíseme). Además, no pueden contener ninguna lógica condicional, por lo que incluso si tiene una sola tabla product_groups , no puede crear una FOREIGN KEY que solo permita los loggings G1 y G2 de esa tabla.

Para lograr esto con las restricciones estándar de integridad relacional, necesitaría una tabla adicional llamada algo así como approvable_products que contendría los product_ids de aquellos productos que están en el grupo uno o grupo dos.

Lo que desea es restricciones de key externa "negativas", es decir, rechazar la identificación de producto que está presente en esta tabla.

Sin embargo, eso no es posible. Tendría que mantener dicha tabla, que contiene solo identificadores del grupo 1 y 2, usted mismo; podrías usar triggers para eso. Después, usaría esa tabla como tabla de reference de key externa.

debe diseñar sus tablas como si esa "regla" no existiera (porque, admitámoslo, puede cambiar eventualmente)

Entonces, puedes usar otro mecanismo para implementar este contraint. Si desea hacerlo en un nivel de database, puede usar un desencadenador de inserción anterior en la tabla, o una verificación en la columna que llama a una function que verifica los datos. Pero, ¿por qué no hacerlo en tu aplicación? Me parece una regla de negocios.