As you point out, you have the option to develop your own module. In this case, that would be my advise.
Nodereference module (packaged in the CCK bundle) is not a generic relations-module. It can be used for what the description says it is: Defines a field type for referencing one node from another.
With some creativity one can abuse this to create generic N:N and 1:N and even polymorphic relations, but that is never optimal; both technical/performancewise as usabilitywise.
Things you cannot do (well) with this module:
- Associate things to things other then nodes-to-nodes.
- Keep the SQL and tabledefinitions optimal for your specific cases, filters and searches.
- Validate across relations: If child misses a required field, don't proceed with parent.
- Atomic updates and inserts: If Relation X fails, don't write its parent Y (or roll it back)
- Implement businesslogic: e.g. An order is either unshippable OR has a shipping-address associated.
However, Writing your own solution comes with a lot of downsides, most notably:
- Drupal (6) has no ORM, Drupal 7 has one, but is underused. You will be doing all the DBA interaction "by hand". Required effort one might not expect in a "framework"
- Drupal gives no scaffolds, APIs and such for CRUD-actions: you will be writing all the forms, pages, storage- and update- handlers by hand. Obviously using Drupal-APIs, but nonetheless, often over 2000 lines of PHP just to manage some "items" and their associations. Nodes on the other hand, do come with such benefits "for free".
- Drupal has little or no validation-helpers. You will be writing all your validations in your own PHP. The FormAPI comes with basic (but solid) mass-assignment-protection, but offers little validations on things like dates, lengths[1], sizes, ranges etceteras.
[1] As such, many contributed modules (and even core) have quite often bugs where the input allows a lot longer texts or numbers then the database can store according to its schema: simply because developers did not write validators for them.