我正在使用SQL Server 2014,但我正在寻找一种设计解决方案。
我需要将3个表连接在一起以确保完整性。为了清楚起见,我删除了一些表格和列。
Group是type的父类。
Group: Widgets
Types: Blue Widgets, Red Widgets
我想在组/类别级别存储数据,例如:
Group: Widgets
Categories: Widgets for men, Widgets for women
类别应该在类型级别
Type: Blue Widgets
Category: Widgets for men
Type: Red Widgets
Category: Widgets for women
因此,我正在努力确保我输入TypeCat的数据有效,因为GroupCat中存在Category和Type的组。
我确定这种模式有某种形式,但作为一个非DB人,我不知道如何解决这个问题。
答案 0 :(得分:0)
冒着在你的问题上花费太多时间的风险,我会试着告诉你解开是多么困难。您使用一系列抽象名词 - 类型,类别,组 - 以不同的组合。您可以在图示的表格和问题文本之间更改术语。你没有说明密钥是什么。然后你做一些声明,并期望读者做出正确的联想和推论。
Group是type的父类。
所以GroupID
标识GroupType
;因此GroupType具有TypeID。无论如何,这就是我如何解释" parent"。
类别应该在类型级别
鉴于下一个陈述,我无法理解这一点:
确保我输入TypeCat的数据有效,因为GroupCat中存在Category和Type&#39>
不确定"那"类别是,但规则似乎是
TypeCat.TypeID exists in GroupType.TypeID
GroupType.GroupID exists in GroupCat.GroupID
但你也说过
我想在组/类别级别存储数据
这似乎意味着新数据来自左侧,并且GroupCat
中的新行必须满足某些约束:
GroupCat.GroupID exists in GroupType.GroupID -- opposite above
GroupCat.CatID exists in TypeCat.CatID
{GroupCat.GroupID,TypeCat.TypeID} exists in GroupType
这些规则可以在SQL中表达,但我不确定它们应该如何。而且我不确定他们是否符合您的意图。我投掷飞镖,如果不是完全被蒙住眼睛,让我们说灯光还有一些不足之处。
通常,SQL中的语句A must have a B
表示存在表示其类型值的域的表B,以及A中的列的外键,其值必须来自该域。根据该逻辑,模型中应该有用于组,类别和类型的表。上面的最后一条规则的模式 - 必须连接两个表以确定它们是否符合第三个域 - 确实会发生,但很少。当它突然出现时,通常会仔细查看并确保模型真实地反映现实。