我想设计一个数据库,其中一些表有多个外键。
我正在寻找最好的设计方法。
我发现这类问题在数据库中被称为“多态关联”。我发现堆栈溢出问题多个表的外键和Nathan的回答非常有用。
但是根据上面的链接,如果我想插入一个新用户(不是一个新的票证,而是一个新的用户),基于设计的insert语句是什么?
首先我插入到party中?如何检索要插入到user或group表中的id?因为它与user和group有识别关系。
描述插入查询的关系:
create table dbo.PartyType
(
PartyTypeId tinyint primary key,
PartyTypeName varchar(10)
)
insert into dbo.PartyType
values(1, 'User'), (2, 'Group');
create table dbo.Party
(
PartyId int identity(1,1) primary key,
PartyTypeId tinyint references dbo.PartyType(PartyTypeId),
unique (PartyId, PartyTypeId)
)
CREATE TABLE dbo.[Group]
(
ID int primary key,
Name varchar(50) NOT NULL,
PartyTypeId as cast(2 as tinyint) persisted,
foreign key (ID, PartyTypeId) references Party(PartyId, PartyTypeID)
)
CREATE TABLE dbo.[User]
(
ID int primary key,
Name varchar(50) NOT NULL,
PartyTypeId as cast(1 as tinyint) persisted,
foreign key (ID, PartyTypeId) references Party(PartyID, PartyTypeID)
)user似乎与party表有一种标识关系:现有的子(用户)取决于该方的存在。现在我想插入一个新用户,例如,当一些用户需要注册时。
插入新用户的查询是什么?
发布于 2021-06-21 21:22:44
这是多态关联的一个例子,其中许多表的主键是超级表的外键。
首先插入Party表,然后接受插入的ID并将其插入到User表中:
insert into `Party` (PartyTypeId)
values (1);
insert into `User` (ID, Name)
values (LAST_INSERT_ID(), 'SomeName');https://dba.stackexchange.com/questions/294183
复制相似问题