MS SQL: отношение один ко многим к собственной таблице - PullRequest
0 голосов
/ 31 января 2020

Я получил PrimaryKey "InventoryID" и поле "RelatedTo", которое является ссылкой на первичный ключ. Я пытаюсь создать таблицу следующим образом:

InventoryID: (1) это RelatedTo InventoryID; (2) & (3)

Например: ноутбук (1) имеет отношение к блоку питания (2) и отношение к монитору (3), но блок питания (2) и монитор (3) также имеют отношение к ноутбуку (1).

Поле RelationTo также может быть нулевым (необязательно)

При обновлении оно должно изменяться в обоих направлениях. Обновление: Монитор (3) Связанный с ноутбуком (4) <-> Портативный компьютер (1) Связанный с источником питания (2)

При удалении не следует удалять все связанные устройства на onCascade.

это мой текущая база данных enter image description here

Create Table DeviceType
(
DeviceID int Identity (1,1) primary key,
DeviceName nvarchar(255) not null
);


Create Table Users
(
UserID int Identity (1,1) primary key,
FirstName nvarchar(100),
LastName nvarchar(100),
Email nvarchar(255)
);

create table InventoryData(
InventoryNo int primary key not null,
Device_ID int not null, 
Manufacturer nvarchar(255) not null,
Model nvarchar(255) not null,
SerialNo nvarchar(255), 
DGUVV3 bit, 
PowerSupply nvarchar(255),
CurrentConsumption nvarchar(255),
RelatedTo int,
CreatorID int not null, 
OwnerID int not null, 
CreatedTimeStamp Datetime2,
ModifiedTimeStamp Datetime2,

Foreign Key (CreatorID) references Users(UserID),
Foreign Key (OwnerID) references Users(UserID),
Foreign Key (Device_ID) references DeviceType(DeviceID),
Foreign Key (RelatedTo) references InventoryData(InventoryNo)
);

Я надеюсь, вы поймете, что я пытаюсь реализовать в моей базе данных:)

1 Ответ

1 голос
/ 31 января 2020

Для реляционных баз данных (1NF) следует использовать вторую таблицу с двумя FK (первая будет InventoryNo, а вторая будет связана, определена как первичный ключ), каждая из которых - как отдельный FK.

Если вы не хотите использовать вторую таблицу, вы можете сохранить объект JSON внутри одного поля и позже обработать этот объект JSON. И не использовать физическое удаление на таблицах.

...