Database 数据建模:超类型/子类型
正在寻找建立以下需求模型的正确方法Database 数据建模:超类型/子类型,database,database-design,relational-database,database-schema,datamodel,Database,Database Design,Relational Database,Database Schema,Datamodel,正在寻找建立以下需求模型的正确方法 有三种类型的“派对”需要关注,一个粉丝、一个乐队和一个乐队成员 该乐队成员将始终与乐队关联,也可以是任何乐队的粉丝 扇子、乐队和乐队成员之间有共同的属性,但这三者都有各自独特的属性 风扇可以是任何波段的风扇,也可以根本不是 这只是一个更大想法的一小部分,但它在扩展模型时造成了混乱。我认为它必须是图2或其他一些选项,因为我不知道在第一个模型中如何将一个Band成员与一个Band关联 我感谢你的任何意见 我认为这比你想象的要简单。您有两个对象-Band和Pers
我认为这比你想象的要简单。您有两个对象-Band和Person,它们可以以两种不同的方式连接,可以作为风扇或成员。下面是一个没有外键或任何东西的quickie db脚本:
CREATE TABLE [dbo].[XREFBandMembers](
[MemberID] [int] NOT NULL,
[BandId] [int] NOT NULL,
CONSTRAINT [PK_XREFBandMembers] PRIMARY KEY CLUSTERED
(
[MemberID] ASC,
[BandId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[XREFBandFans](
[FanId] [int] NOT NULL,
[BandId] [int] NOT NULL,
CONSTRAINT [PK_XREFBandFans] PRIMARY KEY CLUSTERED
(
[FanId] ASC,
[BandId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[People](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_People] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[Bands](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Bands] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
对于特定于关系的属性,您可以将它们放在外部参照表中,例如,FanClubMembershipNumber放在XREFBandFans中。注意事项
各方
(子类型)与其他实体的关系,我无法提供完全正确的答案(这不会改变)
由于您提供的数据分为两部分,因此答案将分为两部分,第二部分将要求更改第一个模型。不是抱怨,只是事先通知你,因为如果我事先看到所有数据,这是可以避免的- 然而,在我的回答中并没有出现这种情况,因为这是一个“问答”网站,我必须在提问者的层面上回答。(我比其他人更全面地回答问题,即使这样,也会引起负面评论!)。请放心,我已经完成了正式的程序。
. 李>
- 我坚持E F Codd&C J Date的关系模型
- (?)cj-Date&F-Pascal完全归一化原理
- D McGoveran和C J Date的正交设计原理
- 请注意,每个子类型本身也是一个完全有效的实体(当我们到达该阶段时,物理中的表),并且可以独立存在
- 对于与这些子类型相关的较低级别或事务或函数表,诀窍是使用正确的子类型(角色)。常见的错误是他们使用了
,然后子类型或角色的含义就丢失了,正确的引用完整性也就丢失了参与方
- 另外,所有角色名称均源自
,但这不是使用参与方
而不是正确角色的有效理由参与方
- 在这里,您非常了解数据,但是(没有人教您这一点)您混淆了角色和子类型
和乐队成员
不是粉丝
。他们首先是双方
(人
是人
,其次)一方
- 看来你有欧文(最好的!);它允许您非常方便地在该级别查看单个模型。即使在这个抽象级别,也要在实体中实现标识符
波段
不能是独立的(方角):因为它
SELECT Name FROM Party WHERE PartyId = FanId