When is a composite key the right choice for a primary key?
When the identity of a row genuinely consists of more than one attribute, and neither attribute identifies it on its own. A booking is a room plus a night. A line item is an order plus a line number. A link between two entities is one of each. In all three cases the pair is the smallest set of columns that determines the row, and a single-column surrogate key would be inventing an identity the data does not have.
The test for whether a composite key is correct is functional dependency. Ask whether one column of the candidate key determines the whole row on its own. If it does, that column should be the key and the rest should be ordinary columns. If removing any one column makes the key unable to identify a row, the composite key is minimal and correct.
The other situation worth naming is a natural key that is too wide. If the business identifier is a three-column combination of region, code and effective date, you can either make that the primary key or add a surrogate key and enforce the combination with a UNIQUE constraint. Both are correct; the choice is about how wide your foreign keys become and how stable the business identifier is.
The argument for composite keys is honest and worth making in an interview: they express the real structure of the data, they prevent a meaningless surrogate id from leaking into every downstream system, and they make accidental duplication impossible at the schema level. The argument against is equally real: every table that references this one now carries a multi-column foreign key, joins get wider, and changing the key later is expensive.