Обновление: у вас есть N: 0..1 (отличается от 1: 0..1). В этом случае ваши 2 решения являются единственно возможными. На практике это, вероятно, зависит от того, какой случай вы хотите оптимизировать; Я бы пошел для простоты на один столик меньше.
Обычно простота решения 1 делает его предпочтительным. Вы можете легко выполнять объединения с таблицей B и фильтровать по NULL / NOT NULL без объединений.
Теоретически, решение 2 ближе к теоретическому идеалу нормализации; на практике это сложно, и единственная ситуация, которую я могу себе представить, - это лучше, если место занимает очень много места, а ваши столы действительно огромны; однако, если бы это было так, вероятно, вам нужно перейти к какой-либо схеме NO-SQL.
РЕДАКТИРОВАТЬ: ЭТОТ ПАРАГРАФ НЕДОСТУПЕН: Вам не хватает другого возможного решения. Иметь внешний ключ в B, указывающий на A. Из того, что вы говорите в своем вопросе, кажется, что каждая запись в B должна иметь запись в A. Следовательно, вы можете указать от B до первичного ключа в A, и не будет пустые записи в любой таблице. Конечно, вы теряете возможность проверять записи в A без соответствующего B без объединения.
Чтобы решить, какую стратегию использовать, возможно, вам нужно более конкретно указать, что вы собираетесь запрашивать, и ваши варианты использования; Затем вы можете оптимизировать для определенной стратегии.