Я заново изучаю первичные и внешние ключи из примера на Source Daddy о различных производителях различных игрушек:
CREATE TABLE Manufacturers
(
ManufacturerID INTEGER CONSTRAINT ManfID PRIMARY KEY,
ToyID INTEGER NOT NULL,
CompanyName CHAR(50) NOT NULL,
Address CHAR(50) NOT NULL,
City CHAR(20) NOT NULL,
State CHAR(2) NOT NULL,
PostalCode CHAR(5) NOT NULL,
AreaCode CHAR(3) NOT NULL,
PhoneNumber CHAR(8) NOT NULL UNIQUE,
CONSTRAINT ToyFk
FOREIGN KEY (ToyID) REFERENCES Toys (ToyID)
ON UPDATE CASCADE
ON DELETE CASCADE
);
Хотя я не часто пользуюсь ключами, думаю, я их понимаю. Я озадачен приведенным выше примером. Это стол производителя и есть еще один стол игрушек. Можно ожидать сопоставления множества игрушек с любым производителем. Таким образом, не имеет смысла иметь поле Toy ID в таблице производителей, если только для какой-либо конкретной записи производителя это поле не должно содержать коллекцию Toy ID.
Конечно, вы можете использовать строку для этого [1], но цель этого примера, похоже, не в том, чтобы путать вещи со странными экзотическими примерами.
Неужели я все эти годы неправильно понимал? Если да, может кто-нибудь объяснить эту проблему?
Спасибо.
P.S. Если я прав, то ошибка полностью смущает следующую страницу 1015 *, которая пытается описать направление обновлений, вытекающих из CASCADE
.
[1] Или сделайте это в Matlab, который допускает сложные ячейки.