Скажем, у меня есть таблица под названием HoursChargedSQL Design - Учет неизвестных
ChrgNum(varchar(10))
CategoryID(uniqueidentifier)
Month(datetime)
Hours(int)
CategoryID является внешним ключом ссылкой на другую таблицу в моей базе данных, которая является только имя/ID спаривание. ChrgNum гарантированно уникален за пределами этой базы данных, поэтому я проверяю только, существует ли он в моем db.
Вы также должны знать, что этот инструмент поддерживает несколько разных групп из одной базы данных (следовательно, универсальный уникальный идентификатор категории, поскольку разные группы могут назвать категории одинаковыми, мне нужно было их дифференцировать).
Эта таблица заполняется из файла CSV. Идея состоит в том, что каждая комбинация ChrgNum, CategoryID и Month будет уникальной. Отчет, который запускается для создания файла импорта, может видеть только определенный диапазон (т. Е. Год). Поэтому алгоритм выглядит следующим образом:
IF (ChrgNum exists in database, CategoryID exists in database,
combo of ChrgNum/CategoryID/Month DOES NOT exist in table HoursBurned)
THEN add a new row for this entry
ELSE IF (ChrgNum exists in database, CategoryID exists in database,
combo of ChrgNum/CategoryID/Month DOES exist in table HoursBurned)
THEN update the existing row with the new Hours value.
Это все прекрасно и хорошо, за исключением того, теперь мой босс хочет, чтобы я на счет в течение нескольких часов заряженных, в определенном месяце, для известного ChrgNum и неизвестной Категории.
Мой вопрос: как я могу объяснить это? Если я просто вставляю NULL CategoryID, что произойдет, если полная отдельная группа будет заряжать часы до того же числа и категории? Моя другая идея состояла в том, чтобы создать новую таблицу для неизвестных категорий, но если я это сделаю, и первый импорт имеет две неизвестные категории, а в следующем - один из двух (что может случиться), что мне делать?
Голова крутилась вокруг этого часами. Любая помощь приветствуется!
серьезно: вам нужно разделить разные «неизвестные» категории ID? Мне нравится ваша идея вставить в таблицу «неизвестных категорий». Чтобы обработать «неизвестное уже существует», вы можете либо выполнить программную проверку, либо только вставить, если она еще не существует, или добавить уникальное ограничение в CategoryID и сказать ему игнорировать дубликаты. –
Нет, проблема в том, что отчет имеет переменный временной интервал. Скажем, я обнаружил две неизвестные категории в первом отчете. В следующий раз я нахожу одно, и это точный дубликат одного из двух предыдущих. Что происходит со строкой? –
Вы могли бы добавить дополнительный столбец в свой «UnknownCategories», который бы сделал этот случай уникальным? Что-то вроде INT IDENTITY, или такое? Не полагаться на идентификатор категории, чтобы быть уникальным? –