Database 在关系数据库中实现模型
我有一个超类/子类层次关系,如下所示: 超级班:IT专家 子类:数据库、Java、UNIX、PHP 假设一个超类的每个实例可能不是一个子类的成员,而一个超类实例可能是两个或更多子类的成员,我将如何实现这个系统Database 在关系数据库中实现模型,database,relational-database,Database,Relational Database,我有一个超类/子类层次关系,如下所示: 超级班:IT专家 子类:数据库、Java、UNIX、PHP 假设一个超类的每个实例可能不是一个子类的成员,而一个超类实例可能是两个或更多子类的成员,我将如何实现这个系统 我还没有给实体分配任何属性,所以我觉得这非常模糊,我不知道从哪里开始。要开始,您需要一个包含所有超类的表(在您的示例中,只有IT专家,但它也可以包含网络专家,或数字专家)之类的内容。我将这些内容包括在内,以增加一些特色: ID | Name | ---
我还没有给实体分配任何属性,所以我觉得这非常模糊,我不知道从哪里开始。要开始,您需要一个包含所有超类的表(在您的示例中,只有
IT专家
,但它也可以包含网络专家
,或数字专家
)之类的内容。我将这些内容包括在内,以增加一些特色:
ID | Name |
-----------------------------
1 | IT Specialist |
2 | Networking Specialist |
3 | Digital Specialist |
您还将拥有另一个包含所有子类的表:
ID | Name |
--------------------
1 | Databases |
2 | Java |
3 | UNIX |
4 | PHP |
例如,假设一个网络专家
需要了解数据库
,一个数字专家
需要了解Java
和PHP
。一个IT专家
需要了解上面列出的所有四个字段
有两种可能的方法。其中一种方法是在子类表中设置“标志”:
ID | Name | Is_IT | Is_Networking | Is_Digital
----------------------------------------------------
1 | Databases | 1 | 1 | 0
2 | Java | 1 | 0 | 1
3 | UNIX | 1 | 0 | 0
4 | PHP | 1 | 0 | 1
记住,这只是使用了一小部分技能。如果你开始有很多超类,子类表中的列可能很快就会失控
幸运的是,您还可以使用称为的东西(也称为关联实体)。本质上,桥接表允许您在另一个表中有两个外键作为主键,从而解决了多对多关系的问题
您可以通过创建一个新表来设置它,将哪些子类与哪些超类关联起来:
ID | Sub-class ID | Super-class ID |
-------------------------------------
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 1 |
4 | 2 | 3 |
5 | 3 | 1 |
6 | 4 | 1 |
7 | 4 | 3 |
请注意,sub-class ID和super-class ID字段中都有“重复项”,但ID字段中没有重复项。这是因为桥接表具有唯一的ID,用于建立独立关联。sub-class 1(数据库
)需要关联到两个不同的组(IT专家
和Networking专家
)。因此,需要成立两个不同的协会
上述两种方法都给出了相同的“结果”。这里唯一真正的区别是桥接表将为您提供更多的行,而设置多个标志将为您提供更多的列。显然,您创建查询的方式也将有所不同
您选择哪一种方法取决于您处理的数据量,以及未来数据库的扩展范围:)
希望这有帮助!:)这是一个常见问题,请用谷歌搜索stackoverflow数据库子类型。你发布这个问题已经有一段时间了,所以我只是跟进一下,看看你是否仍然有这个问题?如果您这样做,请让我们知道,这样我们可以尝试进一步帮助您。如果您的问题已在此处的答案帮助下成功解决,请不要忘记通过单击投票按钮下方的灰色复选框接受解决方案。当然,说这句话,你没有义务接受我的答案(或任何其他答案),尽管这确实有助于保持网站的顺利进行:)