As an example, we have two CPTs, Books and Authors, and we would like to store the Books metadata (i.e parent_id, isbn, subtitle, average_rating, ratings_count, publication_date, num_pages, bisac_code, author_id, etc) in a custom DB table "Books" and also store the Authors metadata (i.e works_count, date_of_birth, fans_count, average_rating, etc) in a custom DB table "Authors".
We would then like to query the data like so:
SELECT p.post_id, p.post_title, p.post_content, b.subtitle, b.average_rating, a.post_tile as author_name
FROM wp_posts as p
INNER JOIN books as b ON p.post_id = b.parent_id
INNER JOIN authors as a ON b.author_id = a.id
WHERE b.average_rating => 3 AND YEAR(b.publication_date) => 2007 AND bisac_code = 'FIC009050' AND a.average_rating => 3
Storing all the CPTs metadata in wp_postmeta
is not an option because searching over 1 million rows would be very slow and doesn't scale and it's the reason why WooCommerce is moving orders and products to custom DB tables as well.
Will I be able to add custom fields/meta blocks to the two CPTs in Gutenberg and then save that meta data in custom database tables?
You already can do this without the need for changes to Gutenberg. You can do it now without Gutenberg actually. We do it on projects of ours semi regulrly.
@pmgarman Yes, you can already save the CPTs metadata in custom db tables without Gutenberg but I'm fairly certain that you can't yet do that with Gutenberg.
Building blocks that store things in several CPT fields is possible using the EntityProvider and useEntityProperty hook. You can check how PostTitle, PostExcerpt... blocks work.
Most helpful comment
@pmgarman Yes, you can already save the CPTs metadata in custom db tables without Gutenberg but I'm fairly certain that you can't yet do that with Gutenberg.