Вычисляемый столбец SQL Server на основе таблиц транзакций

#sql-server #database

#sql-сервер #База данных

Вопрос:

Я создаю веб-приложение для отслеживания обучения сотрудников.

Каждому сотруднику будут назначены модули, состоящие из разных курсов.

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

Вот таблицы транзакций.

Содержимое модуля:

   CREATE TABLE [dbo].[ModuleContent](
[ModuleID] [int] NOT NULL,
[CourseID] [int] NOT NULL,
[Status] [nvarchar](50) NULL,
CONSTRAINT [PK_ModuleContent] PRIMARY KEY CLUSTERED 
(
[ModuleID] ASC,
[CourseID] ASC
)
  

Регистрация модуля:

   CREATE TABLE [dbo].[ModuleEnrollment](
[EmployeeID] [int] NOT NULL,
[ModuleID] [int] NOT NULL,
[Status] [nvarchar](50) NULL,
CONSTRAINT [PK_ModuleEnrollment_1] PRIMARY KEY CLUSTERED 
(
[EmployeeID] ASC,
[ModuleID] ASC
)
  

EmployeeCourseStatus:

    CREATE TABLE [dbo].[EmployeeCourseStatus](
[EmployeeID] [int] NOT NULL,
[ModuleID] [int] NOT NULL,
[CourseID] [int] NOT NULL,
[Status] [nvarchar](50) NULL,
CONSTRAINT [PK_EmployeeCourseStatus] PRIMARY KEY CLUSTERED 
(
[EmployeeID] ASC,
[ModuleID] ASC,
[CourseID] ASC
)
  

На данный момент конечному пользователю придется обновлять таблицу EmployeeCourseStatus , когда сотрудник завершает курс, который будет отмечен как завершенный, что нормально.

Как мне вычислить Status столбец, чтобы он был помечен как завершенный на основе того, когда сотрудник завершает все курсы, назначенные этому модулю в ModuleContent таблице.

Я бы просто использовал ALTER table для добавления столбца и объединения трех таблиц?

Комментарии:

1. Вычисляемый столбец не может ссылаться на другие строки или объекты (если вы не используете скалярные функции, но это другая проблема). Похоже, вам может быть лучше с VIEW .

2. Возможно, вы захотите использовать триггер на EmployeeCourseStatus , чтобы проверить, были ли завершены все курсы для модуля, и обновить нужный столбец.

3. @Larnu ладно, круто, представление было бы хорошей идеей

Ответ №1:

вы должны использовать функцию в своем вычисляемом столбце и не забыть передать первичный ключ функции ( [ModuleID] и [CourseID] и [ModuleID] )

и

Я бы просто использовал ALTER table для добавления столбца и объединения трех таблиц?

вы можете сделать это в функции