这里是SQL的初学者-说我有一个收件人表,我想提出一个查询并按种族对结果进行排序。通常我会这样做
select abcd
from recipient
where ehthnicity = 'White'
但此表将种族列为字段(属性)-这是一个不好的设计吗?
解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
是的,通常这是一个糟糕的设计。原因因细节而异。
此数据结构称为数据透视表,因此如果您受困于此类表且无法更改其设计,则想搜索如何执行数据透视查询。
示例:https://databricks.com/blog/2018/11/01/sql-pivot-converting-rows-to-columns.html
答案 1 :(得分:0)
美国人口普查局对种族和种族有非常明确的定义(here是一个很好的总结)。
您没有说数据的来源。如果它来自这样定义明确的来源,那么分开的列可能是明智的。您也可以使用关联表,尽管在实践中可能会发现比较复杂。
为什么在这种情况下可以使用单独的列?因为列定义明确。因为有少数。而且因为它们随着时间的推移并没有太大变化。关联/连接表也是一个很好的解决方案。是的。
我不建议您使用字符串列表。例如,泰格·伍兹(Tiger Woods)可能具有“白色,黑色,印度,亚洲”字样,并且解析起来很麻烦并且容易出错(天哪,“白色,黑色”与“黑色,白色”相同吗?)。