Вопрос по архитектуре базы данных - PullRequest
0 голосов
/ 25 августа 2009

У меня есть база данных SQL, с которой я собираюсь взаимодействовать через LINQ после ее создания. У него есть клиент, который имеет (игнорируя остальные) два поля fkID для двух таблиц.

Класс
Страна

Я пытаюсь сохранить таблицу «Правила», где происходит следующее:

if the Class is 'A' and the Country is 'USA' then 
    create rows  'RowsA' in table todo

else if the class is 'A' and the country is not 'USA' then
    create rows 'RowsB'  in table todo

else
    create rows 'RowsC' in table todo



Итак, лучший способ сделать это, чтобы иметь в таблице правил

Идентификатор RuleID
ClassFK Int null
CountryFK Int null
заказ int not null


и мой код C # делает следующее:

var rules = from r in db.Rules
            orderby r.order
            select r;

foreach(rule in rules)
{
     if (((client.ClassFK == rule.ClassFK) || (rule.ClassFK == null)) &&             
           ((client.CountryFK== rule.CountryFK) || (rule.CountryFK== null)))
     {
          // Create The Rows
     }
}

Мне это кажется ужасно хрупким

1 Ответ

1 голос
/ 25 августа 2009

Один из способов сделать его немного чище, я думаю, состоит в том, чтобы создать метод класса Rule, который проверяет, применяется ли он к клиенту или нет; Это делает ваш код похожим на:

foreach(rule in rules.Where(r => r.AppliesTo(client)))
{
    // Create the Rows
}

Тем не менее, часть, которую я вижу отсутствующей, это знание того, какие строки создавать на основе определенного правила; Это не содержится в вашей таблице правил.

...