Estoy creando una base de datos de productos para una tienda virtual,en esta tienda se van a vender productos dispares como puede ser por ejemplo un lapiz hasta una lavadora(no es real pero es para reflejar la diferencia

Los distintos productos tendran una serie de atributos comunes (id,precio,imagen).
La pregunta es: ¿ De que forma reflejar esos atributos variables?
Se me ocurren dos posibles implementaciones:
Una seria hacer una especia de tabla tipo all_tables donde cada tupla me indique el nombre del campo y el tipo para reconstruir cada producto concreto,pero esto complica mucho cualquier tipo de consulta al producto.
Otra seria crear una tabla producto con los campos comunes y una tabla especiales donde cada tupla llevaria id_producto y campo_especial.
Mas ideas??
Gracias por adelantado.