@Matt Sheppard:
Скажем, у вас есть таблица клиентов. Конечно, вы не хотите, чтобы клиент присутствовал в таблице более одного раза, иначе в ваших отделах продаж и логистики возникнет путаница (особенно, если несколько строк о клиенте содержат разную информацию).
Таким образом, у вас есть идентификатор клиента, который однозначно идентифицирует клиента, и вы удостоверяетесь, что этот идентификатор известен клиенту (в счетах), так что клиент и сотрудники службы поддержки клиентов имеют общую ссылку в случае, если им нужно общаться. Чтобы гарантировать отсутствие дублированных записей о клиентах, вы добавляете в таблицу ограничение уникальности либо с помощью первичного ключа идентификатора клиента, либо с помощью ограничения NOT NULL + UNIQUE для столбца идентификатора клиента.
Затем, по какой-то причине (о которой я не могу думать), вас просят добавить столбец GUID в таблицу клиентов и сделать его первичным ключом. Если столбец идентификатора клиента теперь оставлен без гарантии уникальности, вы просите о будущих проблемах во всей организации, поскольку идентификаторы GUID всегда будут уникальными.
Какой-то «архитектор» может сказать вам, что «о, но мы обрабатываем ограничение уникальности реального клиента на нашем уровне приложения!». Правильно. Мода на эти языки программирования общего назначения и (особенно) среды среднего уровня постоянно меняется и, как правило, никогда не превзойдет вашу базу данных. И есть очень хороший шанс, что в какой-то момент вам понадобится получить доступ к базе данных без прохождения настоящего приложения. == Проблема. (Но, к счастью, вы и «архитектор» давно ушли, поэтому вас не будет там, чтобы навести порядок.) Другими словами: сохраняйте очевидные ограничения в базе данных (и на других уровнях, если у вас есть) время).
Другими словами: могут быть веские причины для добавления столбцов GUID в таблицы, но, пожалуйста, не поддавайтесь искушению сделать так, чтобы это снизило ваши амбиции в отношении согласованности с реальной (== не-GUID) информацией.