Когда я спросил наших разработчиков БД, почему в нашей таблице фактов нет PK, мне ответили, что в таблице нет набора столбцов, которые бы однозначно идентифицировали бы запись, даже если были выбраны все столбцы. Когда я предположил, что в этом случае мы указали столбец идентификации, мне сказали, что «я просто потрачу впустую пространство и что это не нужно».
Мне кажется, что каждая таблица в исходной системе должна иметь PK, даже если это столбец идентификаторов. Учитывая, что хранилище данных (DW) является получателем данных из другой системы, - как бы я мог гарантировать, что данные в DW точно отражают то, что находится в исходной системе, если нет способа связать отдельные записи? Если у вас есть прогоненная программа загрузки, которая запутывает данные и работает в течение недели, как бы вы согласовали различия с исходной системой транзакций без каких-либо уникальных ограничений для сравнения?