在数据库模型中的分类

8 浏览
0 Comments

在数据库模型中的分类

我有一个关系数据库,其中我想要有一个名为'Entity'的表。这个实体有一个类型:它可以是个人、公司或非盈利组织。根据这个类型,它应该有不同的属性(列):

个人:
- id
- 姓名
- 年龄
- 状态: ['儿童','成年人','老年人']
公司:
- id
- 名称
- 地址
- 联系表单
- 行业
- 状态: ['初创公司','扩张中公司','大公司']
非盈利组织:
- id
- 名称
- 地址
- 银行账户
- 状态: ['环境','社会']

它们都有一个名称,在前端它们应该以类似的方式在列表中显示:

实体:
姓名          类型        状态
----------------------------------
玛丽          个人        成年人
麦肯罗       公司        初创公司
乔            个人        儿童
美好世界    非盈利组织  社会

如果你点击详细信息,根据类型,实体以不同的方式显示。

我正要创建4个不同的表:Entity、Person、Company和NonProfit,然后在Entity表中引用后面三个表中的任何一个。

Entity:
- id
- person_id #可选
- company_id #可选
- nonprofit_id #可选

然后以某种方式强制实体只有三个外键中的一个。但是感觉有些笨重,所以我觉得有更好的方法。不过我对关系数据库的经验不太丰富。

在关系数据库中,实现这种数据的最佳方式是什么?

0
0 Comments

在数据库模型中,问题的出现是因为需要将三个实体的数据显示在一个共同的实体中。可以通过创建一个视图来组合来自这三个实体的数据,如下所示。我假设在数据模型中除了这两个实体之外,Person和Company之间没有任何关系。

create view all_entities 
as
select name,'Person' as entity,status
from Person
union all
select name,'Company' as entity,status
from Company     
union all
select name,'NonProfit' as entity,status
from NonProfit

这样,通过查询all_entities视图,可以获取到来自Person、Company和NonProfit实体的数据,并且每条数据都会带有对应的实体类型(entity)和状态(status)。这样就实现了将三个实体数据合并到一个实体中的需求。

通过创建视图,可以将三个实体的数据合并到一个实体中,从而实现了数据的统一展示。这种方法适用于在数据库模型中没有明确关系的实体之间的数据展示需求。

0
0 Comments

数据库模型中的分类问题

在数据库模型中,经常会遇到需要对实体进行分类的情况。比如,一个实体可以是个人、公司或非营利组织。在这种情况下,我们希望能够在数据库中对这些实体进行分类,并能够在不同类型的实体之间建立外键关系。

然而,传统的数据库模型在处理这种“一对多”关系时并不擅长。如果我们将所有实体的信息存储在同一个表中,然后使用检查约束来限制不同类型的实体,这样虽然能实现分类,但却无法建立外键关系。

解决这个问题的一种方法是将数据分成三个独立的表,分别存储不同类型的实体信息。然后我们可以在这些表中使用相同的主键来建立外键关系。但是,由于不同类型的实体可能存在一些重叠的字段,这样做会导致数据模型变得混乱。

另一种更好的解决方法是使用四个表。其中一个是主表entities,另外三个是分别存储不同类型实体的表。这样可以保持外键关系的同时,避免了字段重叠的问题。但是,如果状态信息存储在类型表中,查询实体信息时会变得有些混乱。

总结起来,数据库模型中的分类问题可以通过以下几种方式解决:

1. 在一个表中使用检查约束来限制不同类型的实体。

2. 将数据分成多个独立的表,使用相同的主键来建立外键关系。

3. 使用一个主表和多个子表的结构,避免字段重叠的问题,但查询时会变得复杂。

以上是数据库模型中分类问题的出现原因以及解决方法的概述。不同的方法适用于不同的场景,开发人员可以根据具体需求选择合适的解决方案。

0