Я хочу проверить правильность обработки внешних ключей в таблице. Вот мои две таблицы, созданные ниже. Возможно, у человека может не быть указанного адреса, поэтому я хочу, чтобы он был нулевым. В противном случае я хотел бы ссылаться на первичный ключ из таблицы адресов и хранить его в таблице Person как внешний ключ. Возможно также, что у нас может быть адресный объект без человека.SQL Server Создать таблицу с внешним ключом
Стол для лица:
CREATE TABLE Person
(
PersonID int IDENTITY PRIMARY KEY,
FName varchar(50) NULL,
MI char(1) NULL,
LName varchar(50) NULL,
AddressID int FOREIGN KEY REFERENCES Address(AddressID) NULL,
)
Таблица для Адрес:
CREATE TABLE Address
(
AddressID int IDENTITY PRIMARY KEY,
Street varchar(60) NULL,
City varchar(50) NULL,
State varchar(2) NULL,
Zip varchar(10)NULL,
Intersection1 varchar(60) NULL,
Intersection2 varchar(60) NULL,
)
Также Q2 я никогда не работал с триггерами, но я предполагаю, что способ обработки вставки будет использовать хранимую процедуру, чтобы сначала вставить адрес, получить первичный ключ, затем передать его в хранимую процедуру для вставки в таблицу Person?
Выглядит хорошо, хотя сначала нужно создать «Адрес». –
Вы уверены, что этот дизайн не требуется? Сколько людей имеют одинаковый адрес? Это будет единственной причиной, по которой вы хотите, чтобы внешний ключ находился в таблице адресов. В противном случае просто используйте PersonID как PK в вашей адресной таблице. –
Согласен с @ElectricLlama. Возможно, вы захотите рассмотреть дизайн. Обычно вы помещаете PersonID в таблицу Address и ссылаетесь на это с помощью таблицы Person, таким образом, и в реальной жизни человек может иметь несколько адресов. – Elmer