Just to be totally clear: You intend for both Column and AggregateColumn to implement the same interface? (which is "duck-typed"). I might suggest making Column the interface with unimplemented methods, like you did for SqlTabularReport, and rename Column to DatabaseColumn or some other thing that indicates it is directly stored in a table. Not going to block a merge on this, though.