If you only had two tables, Session and Booking, you could do this: 1. Add CourseSizeMax column to your dbo.Session table, and add a UNIQUE constraint on [dbo].[Session]([ID], [CourseSizeMax]) - it is needed later. 2. Add CourseSizeMax column, and BookingNumber column to your dbo.Booking table. 3. Add a FK constraint on dbo.Booking(CourseId, CourseSizeMax) referring to Session 4. Add a CHECK(BookingNumber BETWEEN 1 AND CourseSizeMax) 5. Add a UNIQUE constraint on dbo.Booking(CourseId, BookingNumber) and you are all set, as long as all your constraints are trusted. I am not sure why would you need the third table CourseSize at all.