The share table right now does not represent a share in the sense of T583818 atm, and seems more like an ACL.
It links a 'sharable' to a user meaning it will require an entry for every combination. The idea of the "share" intermediary instead was that a "shareable" could be attached to a share and users could be granted a level of access to the "share", so you would need one extra acl entry to grant access to N sharables, instead of N extra entries, at the cost of an extra indirection.
In the room case, as it is currently use I suppose you'd end up with a share per room, so it's a corner case of the concept.
I think we should either separate the "share" and the acl (I would welcome that so we can use it for files as well ;-) ), or rename the share to acl and leave the share for future use.
Why is this removed?
I still don't buy your concept of shares. Anyway, acl does not sound that nice regarding naming, I'll use the word permission then.
It hit me (as I use artisan migrate:refresh sometimes). It does not work if you have long session identifiers in the table. It throws an error. I think it is not that important, so we can have it to stay at 36. Or we need to set session_id to null first.