我必须建立我的E / R模型。 我有3个实体。英雄,Family_Hero,SuperPower。 英雄是英雄的名字。 (id,description)(例如,"超人","蝙蝠侠") Family_Hero是英雄的家族(例如,#34;超人"和#34;蝙蝠侠"属于家庭"飞行英雄") Hero to Family_Hero之间的关系是多对一的。 (一个英雄只属于一个家庭_Hero。一个家庭_Hero有很多英雄)。 超级大国是权力的名称。 (例如,"飞行"," SuperStrenght"," Superpunch")
我想要超级大国与英雄和family_hero之间的关系。 我希望一个家庭 - 英雄带来基本的超级大国,而与英雄的关系带来特定的超级大国。
例如。 "蝙蝠侠"和#34;超人"是家庭"飞行英雄"。每个"飞行英雄"拥有像#34; Fly"和" Super Strenght"。 "蝙蝠侠"还有" Superpunch"功率。 每当我创造一个"飞行英雄"英雄它自动得到"飞"和" Super Strenght"。
如何在sql中创建我的模型。
答案 0 :(得分:0)
CREATE TABLE [dbo].[Family_Hero](
[Id] [int] NOT NULL PRIMARY KEY,
[Family] [varchar](50) NULL)
GO
CREATE TABLE [dbo].[Superpower](
[Id] [int] NOT NULL PRIMARY KEY,
[Skill] [varchar](50) NULL)
GO
CREATE TABLE [dbo].[SuperpowersInFamilys](
[FamilyId] [int] NOT NULL PRIMARY KEY,
[SuperpowerId] [int] NOT NULL PRIMARY KEY)
GO
CREATE TABLE [dbo].[Hero](
[Id] [int] NOT NULL PRIMARY KEY,
[Hero] [varchar](50) NULL,
[FamilyId] [int] NULL)
GO
ALTER TABLE [dbo].[Hero] WITH CHECK ADD CONSTRAINT [FK_Hero_Family_Hero] FOREIGN KEY([FamilyId])
REFERENCES [dbo].[Family_Hero] ([Id])
GO
ALTER TABLE [dbo].[Hero] CHECK CONSTRAINT [FK_Hero_Family_Hero]
GO
ALTER TABLE [dbo].[SuperpowersInFamilys] WITH CHECK ADD CONSTRAINT [FK_SuperpowersInFamilys_Family_Hero_FamilyId] FOREIGN KEY([FamilyId])
REFERENCES [dbo].[Family_Hero] ([Id])
GO
ALTER TABLE [dbo].[SuperpowersInFamilys] CHECK CONSTRAINT [FK_SuperpowersInFamilys_Family_Hero_FamilyId]
GO
ALTER TABLE [dbo].[SuperpowersInFamilys] WITH CHECK ADD CONSTRAINT [FK_SuperpowersInFamilys_Superpower_Id] FOREIGN KEY([SuperpowerId])
REFERENCES [dbo].[Superpower] ([Id])
GO
ALTER TABLE [dbo].[SuperpowersInFamilys] CHECK CONSTRAINT [FK_SuperpowersInFamilys_Superpower_Id]
GO
供您参考,图表应如下所示:
答案 1 :(得分:0)
以下是模型或多或少。您必须为英雄和家人选择不同的超级大国,或使用触发器将家庭权力复制到英雄权力。或严格使用插入和删除函数来执行该作业,而不是直接使用插入和删除语句。
<强> family_hero 强>
id_family_hero PK
name
<强>英雄强>
id_hero PK
name
id_family_hero FK
<强>超级大国强>
id_superpower PK
name
<强> family_hero_superpower 强>
id_family_hero FK
id_superpower FK
<强> hero_superpower 强>
id_hero FK
id_superpower FK
<强>查询强>
select
h.name as hero_name,
fh.name as family_name,
group_concat(distinct s.name) as superpowers
from hero h
join family_hero fh using (id_family_hero)
join hero_superpower hs using (id_hero)
join family_hero_superpower fhs using (id_family_hero)
join superpower s on s.id_superpower in (hs.id_superpower, fhs.id_superpower)
group by hero_name, family_name;