Til.
You can probably calcualte the subsite_id using the site_nodes table and connect by (oracle) or tree_sortkey (postgresql)
Besides that, I agree with everything here. It is necessary to allow multiple instances of a package to store the package_id of an object. Some objects do not have package_id in their type specific table such as groups, acs_rels and other internel system objects.
I don't see this as a problem. All of the packages supplied with OpenACS are using package_id currently in the type specific storage table. This works fine to scope objects to the correct package instance, but does not help in searching or other general operations.