Обычно ЗАКАЗЫ и СЧЕТА, хотя и очень тесно связаны, разъединены; вы объединяете их в одно целое.
ЗАКАЗЧИК размещает ЗАКАЗ на один или несколько ИЗДЕЛИЙ. Это создает заголовок заказа и детали заказа. Продавец выставляет СЧЕТ со ссылкой на Заказ. Но в очень простой операции «мама и поп» можно обойтись без ORDERS и позволить сущности INVOICE представлять заказ.
ORDER|INVOICE DETAIL
id int PK
headerid foreign key references INVOICEHEADERS or ORDERHEADERS *mutatis mutandis*
productid foreign key references PRODUCTS(id)
quantity
extendedamount
Внешние ключи необходимы, потому что они предотвращают такие вещи, как создание заказа на несуществующий продукт или выставление счетов клиенту, который не существует. Они гарантируют, что строка базы данных не содержит невозможностей.
Обычно CUSTOMERADDRESSES представляет собой отдельную таблицу, которая ссылается на CUSTOMERS. У клиента может быть один или несколько адресов.
Всякий раз, когда у сущности "может быть один или несколько X", это признак того, что вам нужна отдельная таблица для захвата X-ов.