I am still coming to grips with fully OOP design principles. If they were so similar then why would people go to all the effort of mapping them to a relational db? Well I think I know the answer but this is probably a different thread that im sure has been had before...
In regards to my access project client/vendor/staff problem, you are correct, for the most part they all shared the same properties and performed the same methods, and were related to the same entities.....it made sense to stick them in the same table. In this instance I called them a "Cardfile" just meaning a company/individual we dealt with and added 3 bool fields. It worked very well for me.
From an OO point of view however, I probably would have had a super class and 3 child classes. The super class having all the common properties and methods and the 3 child classes having those which are specific to themselves.....perhaps this would be overkill and perhaps is similar to the null fields arguements...(In DB's I am quiet content with null fields as long as theres not too many of them and if it cuts down on enough labour). Mind you I am out of my depth to be arguing about OO design.
My main reason behind supporting entity driven design is that database schema's and their data are a hell of alot harder to change/fix when you screw them up than any domain layer or UI layer.
But in either case....going back to the Attachments example....
I really would like to avoid duplicating the schema of attachment table.
I will be using an ORM and I would end up with a whole bunch of different objects, theres no true inheritance there using option 2.
I think in terms of say a procedural MS-Access Applicatation Option2 would be the way to go, simply to cut down on the amount of joins....but for an ORM mapper Option1. Is that sound logic or am I nutcase?
Would I be mistaken to believe there is no way I can share methods on clientAttachment and salesAttachments unless they were procedural in nature (without comlpex mapping anyway)?