我对基础数据库设计感兴趣。我想设计一个有州和国家公园的简单数据库。因为一个州可以有许多国家公园,一个国家公园可以设在许多州,我认为它们应该是多对多的关系。
在这种类型的关系中,关联实体是必需的,这是我的设计。
database - 简单数据库中的关联实体和第三范式-LMLPHP
我不确定实体和关联实体之间的关系。我这样做是因为:
单个州不必是任何国家公园的所在地
一个州可以列为许多国家公园
因此,“州”和“州公园”之间的一对多(可选)
每个国家公园必须至少位于一个州
每个国家公园可以位于许多州
因此,在“国家公园”和“国家”之间有许多(可选)对一(强制)
我想知道我的思维方式是否正确?
我还想知道什么类型的数据会违反我数据库中的第三个标准格式?我不认为人口或地区违反了这一点,因为这取决于“id(pk)”和“name”。

最佳答案

作为您的解释,我认为您的第一个模型应该如下所示(UML符号):
database - 简单数据库中的关联实体和第三范式-LMLPHP
每个State都可以有0 or more(0..*)National Parks。(州可选)
每个National Park都可以位于1 or more(1..*)State(s)中。(国家公园强制要求)
如果我们把这种多对多的关系对应起来:
database - 简单数据库中的关联实体和第三范式-LMLPHP
每个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的定义不明确)

10-08 13:38