Создайте 2 таблицы, имеющие один столбец, но не первичный ключ - PullRequest
0 голосов
/ 07 февраля 2020

Я хочу создать 2 таблицы на SQL сервере, скажем 'table1' и 'table2' в одной базе данных. У обоих должен быть столбец с именем 'col1', который не является первичным ключом.

Итак, как мне создать его, чтобы при вставке данных в одну таблицу другая обновлялась автоматически?

ПРИМЕЧАНИЕ: Так что это для проекта колледжа, нас просят сделать конкретный тип c первичных ключей, поэтому ссылка на это не вариант, теперь я должен иметь одну и ту же сущность в 2 разных таблицах, так хорошая идея, чтобы как-то ссылаться на них, какие-нибудь идеи?

Например, , детали проекта en сотрудника будут иметь его / ее empID, а таблица зависимых также будет иметь empID. Но я не могу сделать его первичным ключом, поскольку он уже определен профессором. Но обновление одного должно обновлять и другое, имеет ли это смысл?

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Вы можете иметь два типа родительско-дочерних отношений.

  1. Идентификационные отношения : Здесь ребенок зависит от родителя, который идентифицирует себя. Например, Проект требует, чтобы Сотрудник существовал. Здесь Project должен иметь часть EmployeeId своего первичного ключа или EmployeeId в качестве первичного ключа. Если EmployeeId является первичным ключом проекта, сотрудник может иметь только один проект.
CREATE TABLE Employee
(
  EmployeeId INT,
  EmployeeName VARCHAR(255) NOT NULL,
  PRIMARY KEY(EmployeeId)
)
GO

CREATE TABLE EmployeeProject
(
  EmployeeId INT,
  EmployeeName VARCHAR(255) NOT NULL,
  PRIMARY KEY(EmployeeId),
  FOREIGN KEY (EmployeeId) REFERENCES Employee(EmployeeId),
)
GO
Неидентифицирующая связь : Здесь ребенок не зависит от родителя, чтобы идентифицировать себя. Например, проект может быть определен без сотрудника. Здесь Project может иметь EmployeeId в качестве внешнего ключа. Если EmployeeId - это столбец NOT NULL, то наличие сотрудника обязательно. Если EmployeeId - это столбец NULL, то наличие сотрудника не обязательно.
CREATE TABLE Employee
(
  EmployeeId INT,
  EmployeeName VARCHAR(255) NOT NULL,
  PRIMARY KEY(EmployeeId)
)
GO

CREATE TABLE EmployeeProject
(
  EmployeeProjectId INT,
  EmployeeName VARCHAR(255) NOT NULL,
  EmployeeId INT NOT NULL, -- Can be NULL, if it is not mandatory
  PRIMARY KEY(EmployeeProjectId),
  FOREIGN KEY (EmployeeId) REFERENCES Employee(EmployeeId),
)
GO
0 голосов
/ 10 февраля 2020

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

Table1:

[SIN] int NOT NULL UNIQUE,

Во-вторых, в другой таблице, где вызывается [SIN] в качестве FK задайте условия для обновления и удаления:

Table2:

[SIN] INT CONSTRAINT [SIN_FK1] FOREIGN KEY REFERENCES Employee([SIN]) ON DELETE SET NULL ON UPDATE CASCADE

Таким образом, при каждом обновлении или удалении записей в Table1 соответствующая запись в Table2 будет обновляться.

...