I have a table called Customer
with primary key CustomerId
.
I have a graph node called CustomerNode
. The CustomerNode
has CustomerId
as one of the columns. I want to establish a referential integrity between these two tables so an accidental deletion of a Customer
must not happen. A Customer
must be deleted only after the CustomerNode
is deleted.
I looked at this documentation, but don't see any reference to how to build relationships between a graph node and a table. SQL Server Management Studio also does not provide a "design" option to do that.
Is it possible to create a relationship between a graph node table and another flat table?
CodePudding user response:
A regular foreign key seems to do what you want. Here's my sample code
use tempdb;
drop table if exists dbo.CustomerNode;
drop table if exists dbo.Customer;
CREATE TABLE dbo.Customer (
CustomerID INT NOT NULL PRIMARY KEY IDENTITY,
FamilyName nvarchar(100),
GivenName nvarchar(100)
);
CREATE TABLE dbo.CustomerNode (
CustomerID INTEGER PRIMARY KEY,
CONSTRAINT FK_CustomerNode__Customer
FOREIGN KEY (CustomerID)
REFERENCES dbo.Customer(CustomerID)
) AS NODE;
GO
declare @output table (CustomerID int);
insert into dbo.Customer (FamilyName, GivenName)
output inserted.CustomerID into @output(CustomerID)
values ('Thul', 'Ben');
insert into dbo.CustomerNode
(CustomerID)
select CustomerID
from @output;
-- we have rows in the Customer table
select *
from dbo.Customer;
-- we have rows in the CustomerNode table
select *
from dbo.CustomerNode;
-- delete should fail because of foreign key constraint
delete dbo.Customer;