2009-07-30 1 views
2

Скажем, у меня есть таблица под названием 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, что произойдет, если полная отдельная группа будет заряжать часы до того же числа и категории? Моя другая идея состояла в том, чтобы создать новую таблицу для неизвестных категорий, но если я это сделаю, и первый импорт имеет две неизвестные категории, а в следующем - один из двух (что может случиться), что мне делать?

Голова крутилась вокруг этого часами. Любая помощь приветствуется!

+0

серьезно: вам нужно разделить разные «неизвестные» категории ID? Мне нравится ваша идея вставить в таблицу «неизвестных категорий». Чтобы обработать «неизвестное уже существует», вы можете либо выполнить программную проверку, либо только вставить, если она еще не существует, или добавить уникальное ограничение в CategoryID и сказать ему игнорировать дубликаты. –

+0

Нет, проблема в том, что отчет имеет переменный временной интервал. Скажем, я обнаружил две неизвестные категории в первом отчете. В следующий раз я нахожу одно, и это точный дубликат одного из двух предыдущих. Что происходит со строкой? –

+0

Вы могли бы добавить дополнительный столбец в свой «UnknownCategories», который бы сделал этот случай уникальным? Что-то вроде INT IDENTITY, или такое? Не полагаться на идентификатор категории, чтобы быть уникальным? –

ответ

2

Ваш босс представил вам эту проблему, так почему бы не спросить их? Потому что это действительно звучит как деловая проблема. Если у вас есть группы, которые сообщают о категориях, о которых вы не знаете, то наверняка вы должны попытаться синхронизировать свою базу данных с системами, которые ее кормят?

В противном случае, что не так с наличием одной категории «Неизвестно»? Вас просят отслеживать часы, назначенные категориям, которые вы в настоящее время не отслеживаете.

+0

Верьте или нет, это самый близкий ответ на то, что я на самом деле делал. –

+0

Иногда самые простые решения являются лучшими. Обычно на самом деле, хотя это не означает, что мы всегда можем реализовать такие вещи. – APC

0

Мне кажется, что вы должны добавлять непризнанные категории в существующую таблицу категорий на лету. Если проблема заключается в том, чтобы различать категории с одинаковым именем из разных групп, разве у вас уже нет этой проблемы сейчас?

+0

Я не хочу добавлять категории, поскольку они могут быть выбраны пользователями для других целей. –

+0

Если вы никогда не добавите категории в основную таблицу, вы должны использовать таблицу «неизвестных категорий», о которой вы говорили, вероятно, с указанием столбца, указывающего, какая группа предоставила его.Затем при каждом импорте вы не увидите, существует ли категория в любой таблице, а если нет, добавьте ее в неизвестную таблицу? – edsoverflow