Normally you would only store the ID and whenever you wanted to show the basked you would JOIN your Basket table on your Product table on the ID, effectively creating a virtual table that has all the fields from both tables, so you can now access the product name etc
SELECT * FROM Basket B JOIN Product P on B.ProductID = P.ID
However for a basket you might want to copy things like the price across into your Basket table. So when it is added to the basket store the product ID but also store the price. The reason for doing this is in case the price changes. If it was "£10" when I added it to my basket and the price changes it should still be listed as "£10" in my basket as you are making a contract with the customer when they add something to their basket that they are buying that item at that price.
So to show your basket you would still do the join, but the product name, description etc would come from the product table (P.Name, P.Description in the above query) but you would get the price from the basket table (B.Price).