Я предпочитаю создавать таблицы сопоставлений там, где это необходимо. Подумайте, что Продукт может существовать для Сайта 1, Сайта 2 и т. Д. Информация о продукте не меняется на всех сайтах. Хотя цены на продукцию могут! В этом случае таблице цен могут понадобиться SiteID и ProductID, где ProductID может быть реплицирован для каждой записи на разных сайтах. Это можно сказать и о пользователях, за исключением того, что пользователи могут воспринимать это как «старшего брата». Поэтому, хотя это может сработать для клиентов, я обычно рекомендую, чтобы у клиентов были разные учетные записи на разных сайтах! Иногда то, что будет работать физически, не означает, что это будет работать логически. Поместите SiteID туда, где он вам нужен, а не просто поместите его везде. Имейте в виду, что вам может понадобиться этот SiteID за пределами того места, где это требуется вашему приложению ... подумайте и о автономных запросах. Необходимость сделать 5 объединений для фильтрации по SiteID будет отстойной! Поддерживать индексы лучше, чем искать фильтр!
Что касается горизонтального разбиения с помощью отдельных таблиц с похожими именами ... используйте SQL Server 2005 и выше. Он имеет функции для разделения, так что беспокойство о размере данных больше не является проблемой.