加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 一旦数据在系统中,就修复坏的BAD数据库设计

发布时间:2020-12-12 06:36:12 所属栏目:MsSql教程 来源:网络整理
导读:我知道这不是一个问题……无论如何,这就是问题所在. 我继承了一个有一(1)个表的数据库,看起来很像这样.其目的是记录在各个(200多个)国家中发现的物种. ID SpeciesAfghanistanAlbaniaAlgeriaAmerican SamoaAndorraAngola....Western SaharaYemenZambiaZimbabwe
我知道这不是一个问题……无论如何,这就是问题所在.

我继承了一个有一(1)个表的数据库,看起来很像这样.其目的是记录在各个(200多个)国家中发现的物种.

ID 
Species
Afghanistan
Albania
Algeria
American Samoa
Andorra
Angola
....
Western Sahara
Yemen
Zambia
Zimbabwe

数据样本就是这样的

id Species Afghanistan Albania American Samoa
1  SP1         null     null        null
2  SP2          1         1         null
3  SP3         null      null         1

在我看来,这是一个典型的多对多情况,我想要3个表.
物种,国家和物种.FoundInCountry

链接表(SpeciesFoundInCountry)在种类和国家/地区表中都有外键.

(绘制图表很难!)

Species
SpeciesID  SpeciesName

Country
CountryID CountryName

SpeciesFoundInCountry
CountryID SpeciesID

有没有一种神奇的方法可以生成一个insert语句,它将根据列名和原始mega表中有1的SpeciesID从新的Country表中获取CountryID?

我可以为一个国家做这个(这是一个选择,以显示我想要的)

SELECT Species.ID,Country.CountryID
FROM Country,Species
WHERE (((Species.Afghanistan)=1)) AND (((Country.Country)="Afghanistan"));

(巨型表称为物种)

但是使用这个策略我需要对原始表中的每一列进行查询.

有没有办法在sql中执行此操作?

我想我可以将我的where子句加载到一起并写一个脚本来制作sql,虽然看起来不那么优雅!

有什么想法(或要求澄清)?

解决方法

我会使用脚本生成所有单个查询,因为这是一次性导入过程.

某些程序(如Excel)擅长混合不同维度的数据(将列名与行内数据进行比较),但关系数据库很少.

但是,您可能会发现某些系统(例如Microsoft Access,令人惊讶)具有可用于规范化数据的便捷工具.就个人而言,我发现编写脚本的速度更快,但是你使用Access和脚本编写的相关技能可能与我的不同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读