Mysql
插入到數據庫中具有多態關聯的表中
我想設計一個數據庫,其中一些表有多個外鍵。
我正在尋找最好的設計方法。
我發現這種問題在數據庫中被稱為“多態關聯”。我發現 Stack Overflow 問題Foreign Key to multiple tables和 Nathan Skerl 的回答非常有幫助。
但是根據上面的連結,如果我想插入一個新使用者(不是新票,而是一個新使用者),那麼基於設計的插入語句會是什麼?
首先我插入
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
:現有的孩子(使用者)取決於當事人的存在。現在我想插入一個新使用者,例如當一些使用者需要註冊時。插入新使用者的查詢是什麼?
這是一個多態關聯的例子,其中許多表的主鍵是一個超表的外鍵。
您將首先插入到
Party
表中,然後獲取插入的 ID 並將其也插入到User
表中:insert into `Party` (PartyTypeId) values (1); insert into `User` (ID, Name) values (LAST_INSERT_ID(), 'SomeName');