mysql - 在 MySQL 表中存储运费,将来会添加许多列

标签 mysql sql database database-design

我正在创建一个系统,用户可以在其中指定其商品的运费。我需要涵盖的变量是重量范围(从克到克)、价格和涵盖的国家/地区。根据这些数据,我可以通过引用客户所在国家/地区和篮子的总重量来计算运费。

我的第一个想法是这样的:

id      from_weight to_weight   price   us  ca  gb  fr  es  de  it
------------------------------------------------------------------
1       0g          499g        1.99    Y   Y   N   N   N   N   N
2       500g        999g        2.99    Y   Y   N   N   N   N   N
3       1000g       1999g       4.99    Y   Y   N   N   N   N   N
4       2000g       2999g       7.99    Y   Y   N   N   N   N   N
5       0g          499g        4.99    N   N   Y   Y   Y   Y   Y
6       500g        999g        6.99    N   N   Y   Y   Y   Y   Y
7       1000g       1999g       9.99    N   N   Y   Y   Y   Y   Y
8       2000g       2999g       14.99   N   N   Y   Y   Y   Y   Y

但是,计划将添加越来越多的国家/地区选项。这意味着每次添加更多列。这是构建此类数据的最佳方式吗?还有其他建议吗

最佳答案

通常,首选做法是保持表结构相同,只添加行以满足您所说明的情况。 (由于优化等原因,您可能会偏离这一点)

我建议查找“第三范式”,如果您的数据库符合第三范式的规则,那么您通常最终会减少很多维护,并且更容易扩展。

table1
id | from_weight | to_weight | price   
1  | 0g          | 499g      | 1.99

table2
id | table1id | countrycode | status
1  | 1        | us          | Y
2  | 1        | ca          | Y
3  | 1        | gb          | N

这是查询数据的方式

select price from table1 
join table2 on table1.id=table2.table1id
where countrycode='us' and status='Y' and
300 between from_weight and to_weight

关于mysql - 在 MySQL 表中存储运费,将来会添加许多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7800111/

相关文章:

mysql - 如何在多列上使用不同的 SQL

mySQL - 将值分组在一起的查询

PHP PDO 多选查询始终删除最后一个行集

php - 如何使用 PHP 从加权 'teams' 列表中随机但公平地创建 'users'?

php - 基于选定字段的报告生成

ruby-on-rails - 将键值存储用于 URL 缩短器的优点?

mysql - 如何更新 mysql 文件中指定的用户?

mysql - 获取子查询的结果并连接到相应的 id 列

mysql - 我可以在同一个查询中计算两个不同的事物吗?

mysql - Grails:当域类包含 'version false' 时,数据库行更新会静默失败