табличные отношения, SQL 2005 - PullRequest
       17

табличные отношения, SQL 2005

0 голосов
/ 22 сентября 2010

Хорошо, у меня есть вопрос, и, возможно, это очень просто, но я не могу найти решение.

У меня есть 3 таблицы плюс одна основная таблица.

tbl_1 - tbl_1Name_id 
tbl_2- tbl_2Name_id 
tbl_3 - tbl_3Name_id

Я хочу подключить поля Name_id к основным полям таблицы ниже.

main_tbl 
___________ 
tbl_1Name_id 
tbl_2Name_id 
tbl_3Name_id

Main tbl имеет уникальный ключ для этих полей, а в другой таблице поля являются обычными полями NOT NULL.

Что я хотел бы сделать, так это чтобы в любое время, когда запись вводилась в tbl_1, tbl_2 или tbl_3, значение из основной таблицы показывалось в этом поле или другим способом. Кроме того, у меня есть отношение «многие к одному», один из которых, конечно, является основным тбл.

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

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

Взгляните на Триггеры SQL Server .Это позволит вам выполнить действие при вставке записи в любую из этих таблиц.

Если вы предоставите дополнительную информацию, например:

  • Пример вставки
  • Результирующее изменение, которое вы хотели бы видеть в результате этой вставки

Я могу попытаться дать вам более подробную информацию.

ОБНОВЛЕНИЕ

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

Employee
--------
EmployeeId
fName
lName

EmployeeMedicalVisit
--------------------
VisitId
EmployeeId
Date
Cost

Некоторые важные вещи:

  1. Обратите внимание, что я не захожу к сотрудникамимя в таблице EmployeeMedicalVisit, просто EmployeeId .Это помогает поддерживать целостность данных и соответствует Первая нормальная форма
  2. Вы должны прочитать о 1-й , 2-й и 3-й нормальных форм. Нормализация базы данных - очень важный вопрос, и он облегчит вашу жизнь, если вы сможете его понять.

При такой структуре, когда сотрудник посещал медицинский кабинет, вы вставляетезапись в EmployeeMedicalVisit.Чтобы выбрать все медицинские визиты для сотрудника, используйте следующий запрос:

SELECT e.fName, e.lName
FROM Employee e
INNER JOIN EmployeeMedicalVisit as emv
ON e.EployeeId = emv.EmployeeId

Надеюсь, это поможет!

0 голосов
/ 24 сентября 2010

Вот пример триггера, который может показать вам, что вам нужно:

Create trigger mytabletrigger ON mytable
For INSERT 
AS

INSERT MYOTHERTABLE (MytableId, insertdate)
select mytableid, getdate() from inserted

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

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

...