В настоящее время я пытаюсь улучшить дизайн устаревшей БД, и у меня следующая ситуация
В настоящее время у меня есть таблица SalesLead, в которой мы храним LeadSource.
Create Table SalesLead(
....
LeadSource varchar(20)
....
)
Исходные источники хранятся в виде таблицы.
Create Table LeadSource (
LeadSourceId int, /*the PK*/
LeadSource varchar(20)
)
Итак, я просто хочу создать внешний ключ от одного к другому и удалить ненормализованный столбец.
Надеюсь, все стандартные вещи.
Вот моя проблема. Кажется, я не могу уйти от вопроса, что вместо того, чтобы писать
SELECT * FROM SalesLead Where LeadSource = 'foo'
Что совершенно однозначно, теперь я должен написать
SELECT * FROM SalesLead where FK_LeadSourceID = 1
или
SELECT * FROM SalesLead
INNER JOIN LeadSource ON SalesLead.FK_LeadSourceID = LeadSource.LeadSourceId
where LeadSource.LeadSource = "foo"
Что сломается, если мы когда-либо изменим содержимое поля LeadSource.
В моем приложении, когда я хочу изменить значение LeadSource в SalesLead, я не хочу обновлять с 1 до 2 (например), так как я не хочу, чтобы разработчики помнили эти магические числа . Идентификаторы являются произвольными и должны быть сохранены.
Как мне удалить или отменить зависимость от них в коде моего приложения?
Редактировать Языки, которые будет поддерживать мое решение
- .NET 2.0 + 3 (для чего стоит asp.net, vb.net и c #)
- VBA (доступ)
- дБ (MSSQL 2000)
Редактировать 2.0 Соединение в порядке, просто «foo» может измениться по запросу на «foobar», и я не хочу обрабатывать запросы.