我们如何实现这种关系?

时间:2014-06-17 14:25:35

标签: sql database database-design

我必须建立我的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中创建我的模型。

2 个答案:

答案 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

供您参考,图表应如下所示: enter image description here

答案 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;