我对基础数据库设计感兴趣。我想设计一个有州和国家公园的简单数据库。因为一个州可以有许多国家公园,一个国家公园可以设在许多州,我认为它们应该是多对多的关系。
在这种类型的关系中,关联实体是必需的,这是我的设计。
我不确定实体和关联实体之间的关系。我这样做是因为:
单个州不必是任何国家公园的所在地
一个州可以列为许多国家公园
因此,“州”和“州公园”之间的一对多(可选)
每个国家公园必须至少位于一个州
每个国家公园可以位于许多州
因此,在“国家公园”和“国家”之间有许多(可选)对一(强制)
我想知道我的思维方式是否正确?
我还想知道什么类型的数据会违反我数据库中的第三个标准格式?我不认为人口或地区违反了这一点,因为这取决于“id(pk)”和“name”。
最佳答案
作为您的解释,我认为您的第一个模型应该如下所示(UML符号):
每个State
都可以有0 or more
(0..*)National Parks
。(州可选)
每个National Park
都可以位于1 or more
(1..*)State
(s)中。(国家公园强制要求)
如果我们把这种多对多的关系对应起来:
每个National Park
应该至少参与一个State_National_Park
。(国家公园强制要求)
每个State
都可以参与0 or more
(0..*)State_National_Park
(s)。(州可选)
但是,每个State_National_Park
(在该实体/表中存在的每个实例/记录)应该有一个State
和一个National Park
。
注意:可选和强制参与的基数显示在关系的另一面。例如,在第一个模型中,National Park
具有强制参与,因此在模型的另一边,我们使用1..*
(而不是0..*
)。
而且,这个型号是3NF的。(但是Area
的定义不明确)