Assumptions: - A service can be of either type A or B. Not both. - A request can be for either a service of type A or for two services (one of type A and one of type B). - A client can have many requests. I think a clean option is to have a `service_request` entity with 2 attribute, `service_a` and `service_b` where the second is nulable. In SQL: CREATE TABLE service_request ( service_request_id INT NOT NULL PRIMARY KEY, client_id INT NOT NULL -- who ordered it REFERENCES client (client_id), request_ordered_at TIMESTAMP NOT NULL, -- when it was ordered -- more details about the request -- (price, duration, etc.) service_a_id INT NOT NULL -- type A service REFERENCES service_a (service_id), -- (mandatory) service_b_id INT NULL -- type B service REFERENCES service_b (service_id) -- (optional) ) ;