yes, a linking table with productID and CustomerID would be needed.
you would need to edit the recordset used by the add to cart behavior for adding products to the cart to link the productDiscount table using a JOIN and filet it using the Customer ID. I think you would need a RIGHT to ensure that the product info is returned regardless of there being a match in the productCoupon table, but you may need to play with the join type.
in the eCart object, you would need a column for the productDiscountAmount and bind it to the column returned in the recordset.
on the calculations tab, crate a productDiscount calculation as:
([Price] * [productDiscountAmount]) * [Quantity]
on the discounts tab, create the discount as Number of Items > 0
Subtotal of column "productDiscount"