Уточнение: существует несколько корневых узлов, и корни могут иметь родительские узлы. Каждый является корнем только поддерева, которое имеет различные стили. Подумайте о разных цветовых отделах. (Возможно, root - плохой выбор имени. Предложения?)
Корень - плохой выбор имени, потому что он (несколько иронично) принят явно как верхний уровень древовидной структуры, потому что дерево начинается там, где корень выходит из-под земли. Любой узел за этим является ветвью или листом и не связан напрямую с корнем.
Лучшим именем было бы что-то вроде IsAuthoritativeStyleNode, IsCascadingStyleNode, IsStyleParentNode или вместо этого его можно квалифицировать: например, IsDepartmentRootNode. Предоставление четких однозначных названий - это одна из тех вещей, которая значительно улучшает читабельность / легкость понимания.
Вы не можете реально достичь того, чего хотите, просто с помощью абстрактных базовых классов / наследования. Согласно другим предложениям, рассмотрите интерфейсы вместо этого.
Я бы также подумал о том, чтобы позволить схеме базы данных слишком сильно влиять на дизайн класса на стороне клиента. Не сказать, что это нужно изменить в этом случае, но об этом, по крайней мере, нужно подумать. Подумайте, как можно разделить свойства на отдельные таблицы, ссылающиеся на общую таблицу «Узлы», и нормализовать их, чтобы минимизировать пустые значения и / или дублировать идентичные данные.