gpt4 book ai didi

mysql - ISCO/国际标准职业分类的 SQL 表设计

转载 作者:行者123 更新时间:2023-11-29 07:10:45 24 4
gpt4 key购买 nike

我正在尝试找出将国际标准职业分类插入 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它似乎为不同级别的组使用单独的表。

我目前的想法是做一个单表,存储一些重复的数据,因为数据不会经常变化,而且数据量不到千行。例如:

'l1','l2','l3','l4' are 'TINYINT' and 'level','name' are VARCHAR. So 'level' is the primary key

l1 |l2 |l3 |l4 |level|name
----|----|----|----|-----|--------
5 |null|null|null|5 |Services and Sales Workers
5 |1 |null|null|51 |Personal Services Workers
5 |1 |1 |null|511 |Travel Attendants, Conductors Guides
5 |1 |1 |1 |5111 |Travel Attendants and Travel Stewards
5 |1 |1 |2 |5112 |Transport Conductors
5 |1 |1 |3 |5113 |Travel Guides

“level”字段是 varchar,因为我可能需要获取包括顶级类别在内的所有行。

WHERE level LIKE '511%'

我不确定将“level”设置为 int 是否更好,但在对特定数据进行排序时,varchar 可能也具有更好的特性。

我不确定是否需要单独的 l1、l2、l3、l4,但行数如此之少,也许有一些冗余并不会真正造成伤害。

那么,问题是,您在我的设计中发现任​​何明显的错误吗?您能在这方面进行改进吗?

我不确定是否需要注意更多字段,因为我还没有读完 ISCO pdf...

谢谢

最佳答案

您不需要同时使用 l1/l2/l3/l4 和 level:这些完全是多余的。以两种不同的方式存储相同的数据只会产生一种可能性,即沿线的某个地方出现错误会使它们不一致,然后你会得到奇怪的结果。使用 l1/2/3/4 的查询找到的记录与使用 level 的查询不同,用户很困惑为什么他们的结果没有意义。例如,如果数据输入屏幕使用级别,并且您有代码将其分解为 l1/2/3/4,则用户运行表下使用 l1/2/3/4 的查询,并找到零个匹配记录。然后他看向屏幕,记录就在那里!或者更糟糕的是,总数不相加,等等。

很难说更喜欢两者中的哪一个。大多数查询可能更容易使用单个字段编写: select blah blah where level='512',或者 select blah blah were level like '51%',而不是 select blah blah where l1=5 and l2=1 and l3= 2 和 l4 为空,等等。哦,测试较低级别而不引用较高级别可能是没有意义的。也就是说,您什么时候会说 select blah blah where l2=4 但不测试 l1?

级别肯定应该是一个字符串而不是整数。您希望“51”排序在“512”之前,而不是之后。你永远不会对这些进行算术,对吗? chemist.level + Teacher.level 或 clerk.level * 3 意味着什么?

关于mysql - ISCO/国际标准职业分类的 SQL 表设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39852134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com