REST 设计困惑?Mysql 是直接存字符串好还是数字好?
伊谢尔伦
伊谢尔伦 2017-04-17 13:16:30
0
16
3811

现在正在做 REST API 的设计,在设计过程中遇到了一些困惑,问题是这样的:

比如我有一个订单表

order_id products status
1 笔记本电脑 canceled
2 华为手机 finished
3 小米手环 delivering

获取所有订单的接口设计如下,其中有一个可选参数是 status 可选值为 canceledfinisheddelivering

GET /order?status=canceled //已取消的订单

GET /order?status=finished//已结束的订单

GET /order?status=delivering //配送中的订单

这样设计API,可读性还是很好的。但对这里的 status 字段有一些疑问,该字段在数据库中,是直接存储为字符串?还是存储为数字?

由于需要保证API可读性好,所以如果用 数字来存储 status ,那么就需要管理字符串与数字之间的对应关系。

比如说:canceled => 0finished => 1, delivering => 2

但是这样子,就需要在程序上,对status做一些转换,会无形增加一些程序的复杂性。

我的问题是:能不能直接把 status 字段直接存储为字符型?,就像上面的设计一样。如果数据量大会不会造成性能问题?或者其他一些问题? 谢谢!

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

Antworte allen(16)
洪涛

我现在是觉得存字符串比较好。
如果存的是数字,根据你的业务流程下来,存0,1,2,3,4,5等代表不同状态,前期这么定义是没问题的。
但是如果业务流程变了,需要在4,5两个状态间增加两个个新状态,那么就是要新增一个状态6 ,7。
其实你的流程状态是0,1,2,3,4,6,7,5,我看着变扭。

这里使用字符串就不存在这个问题了。

伊谢尔伦

我是存tinyint ,然后在程序中用一个公共方法做映射

阿神

我建议存int比存string从各方面(除了你说的转换)来说都会好很多。

然后是转换的问题的,其实这不是个问题,所有和db接触之前的操作对于这些都可以使用你业务的名词(canceled,finished, delivering),只有当和db接触时才会转成对应的数字,其实转换的部分只写在一个地方就好了(比如这个部分就时java 设计模式中的dao层),当然为了便于之后名词的修改或是统一每个人的拼写(大小写?)名词也要定义成常量。

大家讲道理

我才不会告诉你淘宝存的是字符串

大家讲道理

存字符串的话,某天有人写代码的时候,不小心写了 DELlVERING(l 是小写,看出来没?) 之类的,你就蛋疼了。

一般我的编码习惯是,“别相信别人不会犯错,别相信自己不会犯错,给最小的选择。”

大家讲道理

存字符串是作死。

可读性可以在代码中用常量或者枚举代替硬编码。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage