Mysql RDBMS:如何表示复合实体

Mysql RDBMS:如何表示复合实体,mysql,database,postgresql,database-design,relational-database,Mysql,Database,Postgresql,Database Design,Relational Database,我有一个实体,例如复合税。每个复合税可以由另一实体税的几个实例组成。例如,一种复合税可能由两种税组成,顺序可能很重要: VAT: 4.5% of Net Total (tax) Service Tax: 3.4% of Net Total (tax) ------------------------------------ Total Tax: 7.9% of Net Total (compound_tax) 创建这些表的最佳方法是什么?有没有标准的做法 这是我想到的解决

我有一个实体,例如复合税。每个复合税可以由另一实体税的几个实例组成。例如,一种复合税可能由两种税组成,顺序可能很重要:

VAT:         4.5% of Net Total (tax)
Service Tax: 3.4% of Net Total (tax)
------------------------------------
Total Tax:   7.9% of Net Total  (compound_tax)
创建这些表的最佳方法是什么?有没有标准的做法

这是我想到的解决方案,尽管我不确定这是否是正确的解决方案。如果可能的话,请让我听听赞成和反对意见:

Table: taxes {PK: tax_id}
+--------+-------------+------+------------+
| tax_id | tax_name    | rate | tax_type   |
+--------+-------------+------+------------+
| 1      | VAT         | 4.5  | single     |
+--------+-------------+------+------------+
| 2      | Service Tax | 3.4  | single     |
+--------+-------------+------+------------+
| 3      | Total Tax   | 7.9  | compound   |
+--------+-------------+------+------------+

Table: compound_taxes {PK: (ctax_id, tax_id), FK(tax_id)}
+--------+-------------+--------+
| ctax_id | tax_id     | order  |
+---------+------------+--------+
| 3       | 1          | 1      |
+-------- +------------+--------+
| 3       | 2          | 2      |
+---------+------------+--------+
更新: 对@БГББПББöö夫问题的回答:


同一单一税种是否可以归属于多个不同的复合税种对

某些复合税是否有可能由另一种复合税构成对

您将对这些表执行哪些查询?-我需要一个快速列表所有税率,基本上是一个选择的税收。我需要能够更新税收,包括复合税收,这将涉及插入、更新和删除复合税收以及税收

您想计算复合税的总税率还是将其硬编码到表中我都同意。我硬编码了它,因为这样我就可以运行一个简单的SELECT on taxes来获得所有税收以及税率的列表


应该是相反的。在taxes表上应该有一个外键component\u tax\u id,它的名称应该是tax,而不是taxes,实际上指向复合税,因此可以有多个taxes指向同一复合税。在这个表格中也会有“订单”字段


另一个表应称为复合税。而且它只有一个字段id。要知道属于复合税的税,您可以按复合税id对税表执行SELECT查询,按照我的理解,复合税的每个实例都由一些税的排列组成。如果您使用的是PostgreSQL,请将复合税字段声明为数组类型。这也能满足你的职位要求。
如果不是,则对复合税使用逗号分隔的字符串类型,并以编程方式转换为数组

我认为您的设计还可以,可以满足您的要求。 但有一些问题需要高度重视

在复合税表中,没有任何东西可以阻止单一税 作为ctax_id插入的记录。如:

更新TAXS表格的tax_type列可以生成数据 不一致

我建议采用其他设计: 对于所有类型的税务元素单个和复合,都有一个名为Tax的父表。此税表将与所有税类型具有零或一个关系。Tax表中的一条记录将在另一个表中显示一条且仅显示一条记录。 将税收视为包含所有税收类型的共享属性的抽象实体。单一和复合将从税收中继承。

一些有助于做出决定的问题。同一单一税种是否可以归属于多个不同的复合税种?某些复合税是否有可能由另一种复合税组成?您将对这些表执行哪些查询?您是要计算复合税的总税率,还是像现在一样将其硬编码到表中?相同的单一税是否可以属于多个不同的复合税对某些复合税是否有可能由另一种复合税构成对您将对这些表执行哪些查询?-我需要一个快速列表所有税率,基本上是一个选择的税收。我需要能够更新税收,包括复合税收,这将涉及插入、更新和删除复合税收以及税收。您想计算复合税的总税率还是将其硬编码到表中我都同意。
     +--------+-------------+--------+
     | ctax_id | tax_id     | order  |
     +---------+------------+--------+
     | 1       | 2          | 1      |
     +-------- +------------+--------+