Многостоловый подход является более "нормальным" (в терминах базы данных), поскольку он избегает столбцов, в которых обычно хранятся значения NULL.Это также немного затрудняет программирование, потому что вам нужно присоединиться к куче таблиц, чтобы вернуть исходную сущность.
Я предлагаю принять средний путь.Кажется, вес является свойством большинства продуктов, если не всех (действительно, кольцо имеет вес, даже если он маленький, и вы, вероятно, захотите узнать его для целей доставки), поэтому я бы оставил это в таблице «Продукты».Но количество страниц относится только к книге, как и множество других не упомянутых свойств (автор, ISBN и т. Д.).В этом примере я бы использовал таблицу Products и таблицу Books.Таблица книг будет расширять таблицу Продуктов способом, аналогичным наследованию классов в объектно-ориентированной программе.
Все специфичные для книги свойства переходят в таблицу Книги, и вы присоединяетесь только к Продуктам и Книгамчтобы получить полное описание книги.