我的数据库存储版本号;但是,它们有两种格式:major.minor.build(例如 8.2.0、12.0.1)和日期(例如 YY-MM-DD)。我想到了两种解决方案:
+---+---+-----+-----------+ +-----+-----+-----+-----+ +-----+--------+
|...|...|id |versionType| |id |major|minor|build| |id |date |
|---+---+-----+-----------| |-----+-----+-----+-----| |-----+--------|
|...|...|12345|0 | |12345|0 |1 |2 | |21432|12-04-05|
|---+---+-----+-----------| +-----+-----+-----+-----+ +-----+--------+
|...|...|21432|1 |
+---+---+-----+-----------+
Run Code Online (Sandbox Code Playgroud)
或者
+---+---+-----+-----+-----+-----+--------+
|...|...|id |major|minor|build|date |
|---+---+-----+-----+-----+-----+--------|
|...|...|12345|0 |1 |2 |null |
|---+---+-----+-----+-----+-----+--------+
|...|...|21432|null |null |null |12-04-05|
+---+---+-----+-----+-----+-----+--------+
Run Code Online (Sandbox Code Playgroud)
这些看起来都不是特别有效:第一个需要跨两个表的连接只是为了获得版本号,而第二个每个版本条目浪费的空间是第一个的两倍。或者,我可以将值存储在列中的一些位中,然后在客户端解释它,但我希望有一些我忽略的这种情况的标准做法。
有没有一种正确的方法可以在关系数据库中为同一“列”存储两种不同类型的数据?
我很确定以下行为不正确(至少在我的脑海中)因为一些真实的疯狂:
var x = 5;
0 < x < 10 // True, and returns true.
0 < x < 2 // False, and returns true.
0 < x < 0 // False, and returns false.
Run Code Online (Sandbox Code Playgroud)
我的方法是,(0 <5)评估为true,(true <2)也评估为true(即1 <2).我用第三个语句对此进行了测试,这似乎证实了我的理论.现在问的问题是:有没有办法让这个"工作"没有大量的额外代码?
在通过jsperf运行'ol factorial recursive one-liner第一百万次后,我决定尝试一些更有趣的东西......但它不起作用!
function n(cap){
return (function y(x){
return ((x < cap) ? x^2/y(x+1)+2*x-1 : 1)
}(1))
}
Run Code Online (Sandbox Code Playgroud)
然而,它应该起作用(并且为更大的"上限"值返回越来越精确的实际值); 当对数字0-19运行时,它在Chrome的控制台中产生以下输出:
1 (x2)
2
0
2 (x16)
Run Code Online (Sandbox Code Playgroud)
我不知所措.当逐步执行时,给定调用堆栈,它显然是递归但是无法返回除自然数之外的任何内容.有什么想法吗?