Если у вас не может быть повторяющихся строк, вы можете сделать эти три поля первичным ключом. То, хотите ли вы, зависит от понимания того, что означает эта таблица.
Всегда ли Sop Number уникален? Или у разных типов сопов могут быть одинаковые номера?
Это соединение между Sop и Tracking, или Tracking является свойством Sop? Может ли у Сопа много трекингов? Что на самом деле представляет эта таблица?
Если вы настроите первичный ключ, то база данных будет препятствовать тому, чтобы ваш код вставлял дубликаты. Это довольно надежная защита, но ваш код должен быть более дружественным и пытаться предотвратить его, а не потерпеть неудачу с исключением «Duplicate Key».
Редактировать: Глядя на имя вашего метода - кажется, что ваш объект является "Sop", и отслеживание является его свойством. Метод называется «обновление», поэтому мы можем предположить или потребовать, чтобы Sop уже существовал? В этом случае это просто заявление об обновлении. Как часто и по какой схеме вы будете вызывать эти методы? Будете ли вы создавать Sops и затем обновлять их номер для отслеживания? Будете ли вы всегда создавать их вместе с номером отслеживания каждый раз?
Может оказаться полезной инфраструктура реляционного отображения объектов. Это более значительный скачок в плане обучения, но он может значительно упростить программирование и понимание.