Where to place derived attributes
Don't store redundant information. Both total_bed_count and total_vacant_bed_count can be queried.

total_bed_count would be something like select count(*) from bed, while total_vacant_bed_count could be queried if you know which beds don't have patients assigned to them, maybe something like select count(*) from bed where patient is null.