Я также хочу, чтобы bar.foo_id и bar.foobar_id были уникальными, но у меня возникнут проблемы, если я удалю foo.foo_id.
Вы можете иметь уникальные ключи, не будучи первичными ключами. Вы также можете иметь составные уникальные ключи или первичные ключи. Вы можете создать столько индексов, сколько захотите, для любого разнообразия, кроме основного.
Вы не столкнетесь с проблемами в том, что касается SQL, но вы можете столкнуться с людьми / кодом, которые уже используют эти таблицы.
А если я это сделаю, как мне соотнести foo и bar?
Похоже, у вас уже есть foobar_id в bar - вы можете сделать это внешним ключом foobar_id в foo.
Если это не сработает, вам может понадобиться сохранить foo_id в обоих случаях только для отношений. Это большая часть того, что идентификаторы для. К вашему сведению, если идентификатор является int, он занимает очень минимальное пространство, едва достаточное для беспокойства.