Mysql 如何基于a>;建立定价结构模型;(大于)或<;(小于)操作数
我有一个这样的合同表(删除了无关数据): 其中数据可能如下所示:Mysql 如何基于a>;建立定价结构模型;(大于)或<;(小于)操作数,mysql,sql,entity-relationship,Mysql,Sql,Entity Relationship,我有一个这样的合同表(删除了无关数据): 其中数据可能如下所示: | id | serviceid | mode | months | dateStart | dateEnd | | 1 | 111112 | active | 24 | 1319115600 | 1382274000 | | 1 | 111113 | active | 6 | 1319115600 | 1382274000 | | 1 | 111114 | active
| id | serviceid | mode | months | dateStart | dateEnd |
| 1 | 111112 | active | 24 | 1319115600 | 1382274000 |
| 1 | 111113 | active | 6 | 1319115600 | 1382274000 |
| 1 | 111114 | active | 12 | 1319115600 | 1382274000 |
| id | operator | contract_length | amount |
| 1 | < | 6 | 100 |
| 2 | > | 6 | 50 |
我想添加一个收费表,该收费表基于用户签订合同的时间,如下所示:
CREATE TABLE `new_charge` (
`id` INT(10),
`operator` VARCHAR(1),
`contract_length` TINYINT(2),
`amount` DECIMAL(5,2),
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 |
| id | operator | contract_length | amount |
| 1 | < | 6 | 100 |
| 2 | > | 6 | 50 |
| id |操作员|合同|长度|金额|
| 1 | < | 6 | 100 |
| 2 | > | 6 | 50 |
也就是说,如果合同期限为6个月,则收取50美元
然而,对我来说,建模看起来还不错,我似乎无法编写一个查询来检索费用金额,而无需编写额外的查询
有人能帮我吗
- 使用给定的表,生成一个查询以检索金额
- 重新设计允许我生成一个查询以检索金额的表
谢谢如果一份合同可以延续100年,那么这个表仍然只需要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
我想我在我的问题中没有提到任何关于优雅的东西:)我想这会起作用,但我相信它会打破一条规范化规则。你以前在现实生活中实现过类似的东西吗?@superspace:你会打破什么规范化“规则”?单列键和一个非主要属性——至少在5NF中。鉴于没有其他人接受,我将不得不给你正确的答案。但这是非常不雅观的。当它不雅观时,我的直觉告诉我必须有更好的方法。例如,当使用新金额更新
new\u charge
时,必须更新大量记录。这表明存在重复数据,可能有理由进行标准化。同样,这只是本能,我不是规范化专家:)