I work with a large datamart (2+ TB of stored data).
We have over 1000 SSIS packages that run every day. They pull data from over 100 different data sources, into our datamart. This data is then summarized and appended to our fact-tables.
We make no use of the primary-key / foreign-key SQL pattern. If a procedure is slow, we will add indexing on joined fields or where clauses. But, no use of the built-in primary-key / foreign-key.
We don't 'normalize' our data to any great extent - so there is repetition of data all over the place - and we could trim fat in that manner. But, this would make it harder for analysts to get the data they need quickly, as well as increasing the development time of making new procedures.
This seems to be working fine for us.
I was wondering if any really experienced SQL developer / DBA could comment on this, and offer some wisdom about the use of Primary-foreign keys in situations where you're not serving up data to other users, and you're loading a tremendous amount of data every day.