我试图弄清楚将国际标准职业分类插入MySQL的最佳方法是什么。
以下是有关类别的详细信息: http://www.ilo.org/wcmsp5/groups/public/---dgreports/---dcomm/---publ/documents/publication/wcms_172572.pdf
我还找到了一个github项目: https://github.com/patriciomacadden/isco/blob/master/db/schema.rb 它似乎每个不同级别的组使用单独的表。
我目前的意见是制作单个表并存储一些重复数据,因为数据不会经常更改,并且数据量少于千行。例如:
let navigationController = UINavigationController(rootViewController: viewController2())
navigationController.navigationBar.backgroundColor = UIColor.clearColor()
navigationController.navigationBar.tintColor = UIColor.clearColor()
navigationController.navigationBar.translucent = true
// customize according to your need
self.presentViewController(navigationController, animated: true, completion: {
})
'level'字段是varchar,因为我可能需要获取所有行,包括顶级类别。
WHERE level LIKE'511%'
我不确定将'level'作为int更好,但是在对这些特定数据进行排序时,varchar也可能具有更好的特性。
我不确定我是否需要单独使用l1,l2,l3,l4,但行数如此之少,也许并没有真正伤害到一些冗余。
所以,问题是,你在我的设计中看到任何明显的错误吗?你能改进吗?
我不确定是否需要提防更多字段,因为我还没有读完ISCO pdf ...
由于
答案 0 :(得分:1)
我愿意
level VARCHAR(4) CHARACTER SET ascii
。 (瞥一眼PDF似乎说4就足够了,但如果有必要,可以增加“4”。)VARCHAR
将“正确”排序,INT
不会。SUBSTR(level, 3, 1)
以获得相当于l3的内容,如果您需要显示这样的内容。SUBSTR
会为您提供一个空字符串,而不是NULL
;您可以使用IF(,)
或CASE...
以您喜欢的方式呈现它。答案 1 :(得分:1)
你不需要l1 / l2 / l3 / l4和等级:这些都是完全多余的。以两种不同的方式存储相同的数据只会产生这样的可能性:沿线的某个地方出现错误会使它们不一致,然后你会得到奇怪的结果。使用l1 / 2/3/4的查询会查找与使用级别的查询不同的记录,并且用户感到困惑,为什么他们的结果没有意义。例如,如果数据输入屏幕使用级别并且您有代码将其分解为l1 / 2/3/4,则用户运行查询,该查询在表下使用l1 / 2/3/4并且它找到零匹配记录。然后他看着屏幕,记录就在那里!或者更糟糕的是,总数不会累加等等。
很难说两者中哪一个更喜欢。大多数查询可能更容易使用单个字段编写:选择等等等等等级=' 512'或选择等等等等等等等等等等等等等等等等等其中l1 = 5且l2 = 1且l3 = 2且l4为空等等。哦,测试较低级别而不参考更高级别可能毫无意义。也就是说,你什么时候会说选择blah blah l2 = 4但不测试l1?
级别肯定是一个字符串而不是整数。你想要' 51'在' 512'之前排序,而不是在之后排序。你永远不会对这些做算术,对吧?说chemist.level + teacher.level或者clerk.level * 3是什么意思?