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