В моей базе данных есть GUID в качестве первичных ключей, это было сделано для обеспечения уникальности в нескольких системах. (да, я знаю, что 16 байт на строку на таблицу накладных расходов есть и другие варианты, кроме выбора компании)
Чтобы сделать таблицы более удобными, я добавил вычисляемые поля, поэтому, если вы сделаете выбор типа
SELECT * FROM Products
Вы получите не только столбец с внешним ключом, но и связанное с ним понятное поле.
например CompanyGUID (сохраняемое поле), CompanyName (вычисляемое поле)
Вычисляемое поле запускается через скалярную функцию, такую как:
CREATE FUNCTION [mySchema].[udf_CompanyNameFromGUID] (@GUID UNIQUEIDENTIFIER)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Return NVARCHAR(MAX)
SELECT @Return = CompanyName
FROM mySchema.Companies
WHERE CompanyGUID = @GUID
RETURN @Return
END
Я должен отметить, что эти поиски всегда выполняются по первичному ключу/кластеризованному индексу, поэтому по отдельности они настолько быстры, насколько я могу их сделать.
Теперь, хотя это имеет много преимуществ, когда мы отслеживаем проблемы, и не оказывает никакого влияния на эффективность основного использования (вычисляемые поля не запрашиваются, поэтому не влияет), когда мы запрашиваем большую таблицу, это занимает некоторое время. поиски. Я не хочу жертвовать дополнительными данными, которые я ищу, и я не хочу хранить их непосредственно в таблице (пустая трата данных и необходимость обслуживания). Я рассматривал создание представлений для каждой таблицы, но это кажется излишним, и я не хотел бы удваивать усилия.
Я уверен, что я не единственный человек, который так работает, поэтому я хотел бы знать, есть ли у кого-нибудь более эффективный способ сделать это? Эти поля используются только теми, кто смотрит непосредственно на базу данных, а все хранимые процедуры и т. д. полностью закодированы с индексированными ссылками и т. д., поэтому основная эффективность работы в порядке, просто отладка. Не большая проблема, но если есть лучшее решение, я бы хотел его услышать.
Заранее спасибо.