fwiw, i tend to use STI almost only when only behavior, not the properties, are different ... for the same reasons Ashley already pointed out. I hate NULL columns when the domain doesn't explicitly require them.
On Thu, Sep 10, 2009 at 22:27, Ashley Moran <[email protected]> wrote: > > > On 10 Sep 2009, at 16:08, Jos Elkink wrote: > >> This can become quite a long list. Since they are single table >> inheritance, all the information ends up in one SQL table. I.e. >> notes have titles and contents, which means that now every item >> (incl. e.g. knives) have a "title" and "content" field. Not in the >> class definition, of course, but in the SQL table. >> >> My simple question is: is this bad design? Does this lead to super >> inefficient database usage? Or is this just fine and common? >> >> In terms of practical usage and coding, the inheritance definitely >> brings substantial benefits. > > > Hi Jos > > Personally, I follow Date on this, and try to avoid NULLs at every > step. Occasionally they are necessary, I can think of one nullable > column in my current project, although there may be others I forgot > about. Having excessively wide tables may or may not be a performance > issue, depending on the DBMS you're using. A bigger issue I've found > is enforcing integrity, eg making sure Knife objects don't end up with > a note title. > > I've been forced to use STI to solve a problem on this current > project. To avoid making non-sensical database tables, you can keep > only the core properties on the STI table, and use associations to > reference the extra properties. eg you might have > > class Note < Item > has 1, :note_description > end > > class Knife < Item > has 1, :knife_blade > end > > etc. Although watch out, there are still a couple[1][2] of issues > with STI. That said, it can make some problems much easier to solve. > But treat large class hierarchies as a warning sign - if you have too > much inheritance, you may be coupling some of your code too tightly. > (Again, my personal preference is to never use inheritance, but > occasionally it is the most pragmatic solution.) > > HTH > Ashley > > > [1] > http://datamapper.lighthouseapp.com/projects/20609/tickets/1001-sti-broken-when-subclassed-parent-to-a-child-possibly-connected-in-some-way-to-validation-code > [2] > http://datamapper.lighthouseapp.com/projects/20609/tickets/1002-sti-association-not-accessible-on-certain-reloaded-resources > > > > -- > http://www.patchspace.co.uk/ > http://www.linkedin.com/in/ashleymoran > http://aviewfromafar.net/ > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "DataMapper" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/datamapper?hl=en -~----------~----~----~----~------~----~------~--~---
