SQL Design - учет неизвестных значений
Скажем, у меня есть таблица под названием HoursCharged
ChrgNum(varchar(10))
CategoryID(uniqueidentifier)
Month(datetime)
Hours(int)
CategoryID - это ссылка внешнего ключа на другую таблицу в моей базе данных, которая является просто именем/идентификатором. 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, что произойдет, если полная отдельная группа будет заряжать часы до того же числа и категории? Моя другая идея состояла в том, чтобы создать новую таблицу для неизвестных категорий, но если я сделаю это, и первый импорт будет иметь две неизвестные категории, а в следующем - один из двух (что может случиться), что мне делать?
Моя голова крутилась вокруг этого часами. Любая помощь приветствуется!
Ответы
Ответ 1
Ваш босс представил вам эту проблему, так почему бы не спросить их? Потому что это действительно звучит как деловая проблема. Если у вас есть группы, которые сообщают о категориях, о которых вы не знаете, то наверняка вы должны попытаться синхронизировать свою базу данных с системами, которые ее кормят?
В противном случае, что не так с наличием одной категории "Неизвестно"? Вас просят отслеживать часы, назначенные категориям, которые вы в настоящее время не отслеживаете.
Ответ 2
Мне кажется, что вы должны добавлять непризнанные категории в существующую таблицу категорий на лету. Если проблема состоит в том, чтобы различать категории с одинаковым именем из разных групп, разве у вас уже есть эта проблема сейчас?