Mysql

插入到數據庫中具有多態關聯的表中

  • June 21, 2021

我想設計一個數據庫,其中一些表有多個外鍵。

我正在尋找最好的設計方法。

我發現這種問題在數據庫中被稱為“多態關聯”。我發現 Stack Overflow 問題Foreign Key to multiple tables和 Nathan Skerl 的回答非常有幫助。

但是根據上面的連結,如果我想插入一個新使用者(不是新票,而是一個新使用者),那麼基於設計的插入語句會是什麼?

首先我插入party? 如何檢索要插入usergroup表中的 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:現有的孩子(使用者)取決於當事人的存在。現在我想插入一個新使用者,例如當一些使用者需要註冊時。

插入新使用者的查詢是什麼?

這是一個多態關聯的例子,其中許多表的主鍵是一個超表的外鍵。

您將首先插入到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