如何基于>建立定价结构的模型(大于)或< (小于)操作数

时间:2012-01-29 23:02:32

标签: mysql sql entity-relationship

我有一个这样的合同表(删除了无关的数据):

CREATE TABLE `contracts` (
  `id` INT(12),
  `serviceid` INT(10),
  `mode` CHAR(1),
  `months` TINYINT(3),
  `dateStart` INT(12),
  `dateEnd` INT(12),
  PRIMARY KEY (`id`)
)

数据可能是这样的:

| id | serviceid | mode   | months  | dateStart  | dateEnd    |
| 1  | 111112    | active | 24      | 1319115600 | 1382274000 |
| 1  | 111113    | active | 6       | 1319115600 | 1382274000 |
| 1  | 111114    | active | 12      | 1319115600 | 1382274000 |

我想添加一个基于用户合约时间的收费表,如下所示:

CREATE TABLE `new_charge` (
  `id` INT(10),
  `operator` VARCHAR(1),
  `contract_length` TINYINT(2),
  `amount` DECIMAL(5,2),
  PRIMARY KEY (`id`)
)

数据可能是这样的:

| id | operator | contract_length  | amount |
| 1  | <        | 6                | 100    |
| 2  | >        | 6                | 50     |

意思是,如果合同期限<6个月,则收取100美元。如果> 6个月收取50美元。

虽然,对我的建模看起来不错我似乎无法编写一个允许我检索费用金额的查询,而不必诉诸额外的查询。

任何人都可以帮助我

  • 使用给定的表格,生成一个查询以检索金额
  • 重新设计允许我生成一个查询以检索金额的表格

由于

1 个答案:

答案 0 :(得分:0)

如果合同可以使用一百年,那么此表仍然只需要1200行。就个人而言,我会在两列上使用CHECK()约束,但MySQL不支持CHECK()约束。

CREATE TABLE new_charge (
  contract_length_months integer not null,
  amount_usd DECIMAL(5,2),
  PRIMARY KEY (contract_length_months )
);

insert into new_charge values (1, 100);
insert into new_charge values (2, 100);
insert into new_charge values (3, 100);
insert into new_charge values (4, 100);
insert into new_charge values (5, 100);
insert into new_charge values (6, 100);
insert into new_charge values (7, 50);
insert into new_charge values (8, 50);
insert into new_charge values (9, 50);
insert into new_charge values (10, 50);
insert into new_charge values (11, 50);
insert into new_charge values (12, 50);
insert into new_charge values (13, 50);
insert into new_charge values (14, 50);
...

select c.*, nc.amount_usd
from contracts c
inner join new_charge nc on c.months = nc.contract_length_months