there is no “good” answer here, but I think there should be a difference between SVN repositories that contain 1 or 2 projects and others that contain 100.
I support the SVN repo, which was ported from VSS, it has several hundred “projects” in it, none of them were organized along the structure of the connecting lines / branches / tags (in fact, I believe that the structure is really unnecessary and useless after I used SVN for a while, this certainly will not help when you need to mark 2 or 3 projects as one change).
We maintain a project directory for all of our supported software, according to which we have subdirectories for configuration, and another for the source. At the same time, we have product version numbers - so effectively we discard the concept of the trunk, we only have tag catalogs - the highest number, which is a chest (we must do this because we must support several versions of projects at the same time). Merging occurs as needed, so if I update an error in Project A, version 3.0; I will combine these changes with versions 4.0 and v5.0.
If I only performed repos with 1 or 2 projects, I might be tempted to keep the branch / tag structure, but, on the other hand, I would probably keep the directories explicit in the main tree (assuming that I (I often use the revision number as a “tag” BTW, and I store binaries there. Therefore, if I need to get a specific old revision, I can get the correct binary information from viewing the log)
Its surprisingly easy to manage, given that I have a 10Gb repo with a jealousy that currently exceeds 300,000 with a lot of old code as well as newer. I would recommend the structure to others and will use it again.
By the way, another reason dir doesn't work for us is because we issue every time there is an error or request for change, no matter how tiny they are. After some time, our tag catalog will be unmanageable, so we use revnum as a tag - we can associate it with an error tracker to make it even more readable.
So, to summarize in a crude form, we have a directory structure where v1 and v2 are product versions:
maint/source/v1.0/projectA maint/source/v1.0/projectB maint/source/v2.0/projectA maint/source/v2.0/projectB etc
obviously, we could put the branch branch in the "source" and the branch / tag under each subproject, but it will become difficult if we need to release 2 subprojects as one change request (as it often happens). Inclusion of a tag subdirectory in the source directory would mean that we would mark everything when only one subproject has changed (does not meet our requirement to track each subproject individually)