Students often have trouble in class with these also.
Take this example: SQL must come up and then you can bring up an application that uses SQL. They must run on the same system.
Since SQL must come up first, it is the child, App is the parent. The relationship is "online".
They must be on the same system so the next part of the relationship is "local", now we have "online local"
The must failover together is one fails, so they will be on the same system, so we use "hard", now we have the full relationship: online local hard.
Another: Sql must come online then the web app can come online anywhere in the cluster.
SQL must be online first, then the app so SQL is child and we have an "online"
Web can come up anywhere in cluster, so the next part is "global": "online global".
Now, if sql fails and fails over to another machine, must web come down and up to re-connect with sql?
If the answer is yes, then the relationship is "firm", if web must not be "bounced" after sql fails over, then the relationship is "soft".
Online global soft
online global firm
The offline relationship is the case where you never want development running on the same system as production. So the relationship has prod as child, then dev must come up elsewhere in the cluster.
Offline remote
In cases where the rules would be broken if the parent were to come up on a remaining system, the parent cannot come up.