SQLite: автоматически ли изменяется внешний ключ отношения таблицы во всех таблицах, которые к нему относятся? - PullRequest
0 голосов
/ 15 января 2012

Давайте рассмотрим простой пример (упрощенный пример из здесь ):

CREATE TABLE [Employees](
        [EmployeeID] nchar(5) primary key,
        [ReportsTo] nchar(5) NULL,
    constraint fk_Employees_Employees foreign key(ReportsTo) references Employees(EmployeeID)
);

CREATE TABLE [Orders](
        [OrderID] integer primary key autoincrement,
        [EmployeeID] int NULL
    constraint fk_Orders_Employees foreign key (EmployeeID) references Employees (EmployeeID)
);

у нас есть 2 таблицы, одна из которых имеет элементы, которые взаимосвязаны, а другая - элементы первой таблицы.

Представьте, что у нас есть некоторые "Сотрудники" и некоторые "Заказы", что произойдет с заказами и сотрудниками, которые относятся к некоторым EmployeeID, когда они будут изменены?

Скажем, у нас Tom и порядок 1, относящийся к tom. Мы изменили Tom на Ben. Будет ли заказ 1 связан с Ben теперь автоматически через скрытую от нас магию SQLite, или нам придется явно высчитывать все ордера, принадлежавшие Tom, чтобы они были Ben сейчас?

1 Ответ

1 голос
/ 15 января 2012

Если я правильно понимаю ваши требования;если все заказы, принадлежащие TOM, заменены на BEN, необходимо обновить таблицу [Orders] следующим образом:

Case1: Если TOM больше не существует в офисе, и TOM заменяетсязатем BEN:

assuming that TOM's employeeId is 1 BEN's employeeId is 33

UPDATE [Orders]
SET    EmployeeId = 33
WHERE  EmployeeId = 1

Case2: Если значение EmployeeId в TOM изменяется с 1 на 33 в таблице сотрудников, то вам также необходимо обновить таблицу заказов (Вы задали вопрос, и я отвечаю здесь, вопрос: зачем вам нужно менять идентификатор EMployee TOM?):

assuming that TOM's employeeId is changed from 1 is 33

UPDATE [Orders]
SET    EmployeeId = 33
WHERE  EmployeeId = 1
...