Normal signal: train stops if there's a train in the section ahead (or it's reserved for another train on a conflicting path), otherwise train goes.
Chain signal: train stops here until it can get a mutex on a path past another non-chain signal.
So if you have rail sections (small letters) and signals (capitals) a - A - b - B - c - C - d in a row on a plain line and A/B are chain signals and C is regular, then trains from the left will stop at A until the train can grab all sections b, c, d in one go.
That's why chain signals at the entrance to a junction are good (prevents a train stopping on the junction) but you want regular ones at the exit, at least if some plain line follows.
Chain both in and out is supposedly the foolproof method, and apart from stations, rail signals are just an optimization.
Though I've played a lot of Factorio, I've never really felt the need to dive deeply in to signals, and I'm happy to just use the foolproof method and leave more optimized solutions for those who need them.
And of course you don't want trains stopping on intersections, because they'll block everybody, so you always put chain signals in front of intersections.
My simple rules:
* Trains can only stop on the section after a regular signal. If you don't want a train to be able to stop in a certain place (like on an intersection), don't use a regular signal in front of it.
* Make sure trains have places where they can stop. This will mostly be stations, but that's not enough. Actually, I've been wondering if it might be enough for stations that are only visited by a single train; then the train would only go if it has a clear path straight to its destination. Maybe I should give this a try. For me, however, the straights outside the intersections are usually fine places for trains to stop. But for better throughput and less blockage, there should probably multiple tracks, and special tracks for trains waiting to enter a station currently occupied by another train.
* Trains cannot pass a signal on their left if there's not also a signal on their right. You can use this to make certain tracks single-direction. Single-direction is good and easier than double-direction, so of course I mix them, because I'm not playing this game because I like things easy.
* Don't forget to give your trains a place to refuel! This is actually the part I mess up the most.
I just plop down a refueling station, and a requester station next to it that refuels the refueler and I'm done. Don't have to worry about it again.
But sometimes I forget, and sometimes there's no fuel nearby.
And I haven't yet figured out how to disable drop-offs that don't need anything. I often have a single train bring stuff to a couple of drop-offs, but that always feels sloppy. I have to use timeouts on the trains so they don't linger at a station that's too full to empty them. Disabling those stations and giving them all the same name might be a better alternative.
look into your circuit networks. you can make them quite complex if you want
However, the foolproof advice I've gotten from r/Factorio has been to put chain signals at the entrance and exit to every junction, and to make sure there's enough space for your longest train to stop behind a rail signal (and you wouldn't mind having it stop there).
I can also recommend the cybersyn mod (or LTN). Once you understand one of these mods it makes dealing with trains much less of a hassle.