Ambas formas son optimas si se aplican bien.
He visto que algunos soft contables cuando crean una nueva empresa realmente se crea un archivo de base de datos (naturalmente automatizado para que sea transparente al usuario), y les va bien. El gran beneficio es que ante cualquier "desgracia" solo se fastidia una BD, bastante raro pero puede pasar.
También la otra forma es como tu dices, teniendo en un campo mas un ID que identifique que dicha transacción pertenece a tal o cual empresa, esto yo lo uso cuando se trata de un cliente que tiene varias empresas y en algún momento hay que consolidar, de esta forma resulta mas sencillo armar los querys.
Y la tercera forma seria crear un prefijo a las tablas. Esto lo he visto en ERPs, cuando se crea una nueva empresa se disparan scripts que generan nuevas tablas con el prefijo de la empresa. Ejemplo, Tabla: Ventas, Compras, etc, creas una empresa llamada karlytos y las tablas se llamaran karlytos_Ventas, karlytos_Compras, etc. Si creas otra empresa llamada LDX, las tablas seran LDX_Ventas, LDX_Compras, etc.
Saludos