I have the following database design:

An E-Report has one
My question is about
EReportReqtable. I'm not sure if I need a column as primary key (EReportReqId) or I can useeReportIdandrequirementIdas primary key.
You can use either of them - none of them is absolutely "better". Just be careful that if you decide to use the first approach, also create a UNIQUE constraint on {eReportId, requirementId}.
The fist approach (with non-identifying relationship and surrogate key) leads to:
EReportReqImg in this case) - as you already noted,EReport.eReportId, only EReportReq.eReportId is cascade-updated, but not EReportReqImg.eReportId)On the other hand, the second approach (with identifying relationship and natural keys):
EReportReqImg JOIN EReportReq just to find-out requirementId - you have it directly in EReportReqImg.requirementId),EReportReq rows with the same eReportId will be stored physically "close", which may significantly benefit some queries)Since you have a small number of child tables, "fat" FKs don't matter much and since we are dealing with IDs, they are unlikely to change and cascading ON UPDATE is unlikely to be a problem. So, my instinct is to go with the second approach, but you might have some other considerations that might tip your decision in a different direction...