What I meant is that, to a human, a "transaction" can mean "On Friday Joe brought back three keychains and six posters". To avoid complexity and redundancy, that's not a single table, though.
You'd have one transaction MASTER table where a single record (say transaction number 27) represents "Joe brought stuff back on Friday".
Code:
TranMasterID (primary key)
StaffID (foreign key)
EventID (foreign key)
TransDate
TransType (In/Out)
Then you'd have a second transaction DETAIL table where one record represents (for transaction 27, add 3 keychains to inventory) and a different record represents (for transaction 27, add 6 posters to inventory).
Code:
TranDetailID (primary key)
TranMasterID (foreign key)
ItemID (foreign key)
TransType (In/Out)
Quantity
Or, if you prefer, you can have everything be a detail record, as June laid it out, and store the redundant info on each detail record.
Redundancy isn't a horrible thing. You'll notice that I decided above to have in/out be redundant. The field could be deleted from the master, but I'd think it carries information that I'd like to have there. Having a third possible value - "Mixed" - might be useful for when Gertrude comes by, drops off something and picks up something to go back to the same event. That third value wouldn't be useful at the detail level.