Okay, since i'm busy creating a fairly heavy multisite (W.I.P.) let me share some research i've done about shared database tables etc.
We're starting with a multisite that has different content on each site, but are using the same userbase for each site, we're operating from a single database
We're starting from the drupal core essentials perspective, meaning we start with no modules enabled besides drupal required core.
Database Tables:
seeing that drupal has 40 database tables, it can take some time to understand the implications of each table
- access - you probaly want this table shared, since this is your access rules table, altrough seperation is possible if you want your content-admins to manage this. (but if you ban a person, you probaly want to ban him all over your multi-site.)
- authmap - more info needed
- blocks - this is a table you want to seperate, since every multisite (and theme) can have a different block setting and this table is NOT multisite aware
- blocks_roles - more info needed
- boxes - more info needed
- cache & cache_* - Keep this set of tables sepeate, since different sites can have different contents cached and those tables are NOT multisite aware, also seperation leads to a smaller cache (per-site) meaning faster response.
- Comments - keep this table seperated, since comment are content specific and each site can have different contents and this table is NOT multisite aware
- boxes - more info needed
- files & file_revisions - you want these seperated because attached files are content specific and each site can have different contents and those tables are NOT multisite aware
- filters - You probaly want to share this table, since this hold only the combinations of filter that make up the formats
- filter_formats - You probaly want to share this table, since the only thing stored here is which filter formats are availble for the sites and which roles can use them.
- flood - more info needed
- history - more info needed
- menu - simple, seperate, since different sites have different layout, and this table is NOT multisite aware
- node - simple, seperate, since different sites have different content and this table is NOT multisite aware
- node_* - more info needed
- permission & role - you probaly want this shared, since this way similar roles behave similar on all sites
- sequences - this table MUST BE SHARED since this table tracks all tables including shared tables and this table IS multisite aware
- sessions - as far as i can see, you can safely share this table. more info needed (there are modules that require this table shared.)
- system - This table MUST BE SEPERATED since it consist of site specific settings (enabled modules etc.)
- users - this table is shared... doh, that's the whole point here...
- term_* - more info needed
- Url_alias - you want this table seperated, since different sites can have similar alias to different content, and this table is NOT multisite aware, also speeds up site if seperated.
- Users_roles - This table is seperated because different users can have different functions on different sites and this table is NOT multisite aware
- Variable - This table MUST BE SEPERATED since it consist of site specific settings (sitename, slogan etc.)
- Vocabulary & Vocabulary_node_type- more info needed
- Watchdog - depends on your likings, suggesting to seperate but can be shared since this table IS multisite aware
a quick recap, the following tables are shared:
- access
- filters
- filter_formats
- permission
- role
- sequences
- sessions
- users
Near-Required Modules
I would suggest to install always the following modules on any multisite config:
- Single Sign-On - Logs you in in all sites at the same time
- Paranoia - disallowes PHP usage in content etc.