C # SQL - обновление дочерней таблицы с тем же значением, что и родительская таблица - PullRequest
0 голосов
/ 10 мая 2018

У меня есть таблица materialGroup, в которой я храню информацию о группах материалов по умолчанию. Пример:

> MaterialGroup
>  - ID 
>  - MaterialGroup_Name 
>  - MaterialGroup_Price

Однако существует проблема: свойства MaterialGroup могут изменяться для каждой компании. Для этого я создал таблицу:

MaterialGroup_Company
 - ID
 - MaterialGroup_Default_ID
 - CompanyID
 - MaterialGroup_Company_Name
 - MaterialGroup_Company_Price

Пример:

MaterialGroup По умолчанию :

Имя: Группа 1

Цена: 40,00

Компания A: Название группы материалов: Группа 1

Группа материалов Цена: 40,00

Компания B:

Группа материалов: группа 1 (удлинитель)

Материал Группа Цена: 100,00

В бэкэнде моего кода у меня есть класс MaterialGroup.

Моя настоящая проблема заключается в следующем:

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

Это означает, что в моем примере, если я изменю имя MaterialGroup на Group 1 - по умолчанию, компания A должна быть обновлена, но компания B должна остаться прежней.

Как мне добиться такого обновления? Имейте в виду, что в моей реальной таблице гораздо больше столбцов.

1 Ответ

0 голосов
/ 11 мая 2018

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

А как насчет создания строки в MaterialGroup_Company только тогда, когда компания решает переопределить группу материалов по умолчанию? Логика будет такой: - если в MaterialGroup_Company есть строка, используйте ее - в противном случае используйте значение по умолчанию.

Вы можете сделать это в одном запросе SQL, если вы используете левое соединение и разбираетесь с остальным в вашем коде. Если в MaterialGroup_Company нет связанной строки, столбцы должны быть нулевыми, и вы можете посмотреть на столбцы MaterialGroup_Default.

...