Loo*_*fer 7 sql ms-access database-design
我知道这不是一个问题......无论如何,这就是问题所在.
我继承了一个有一(1)个表的数据库,看起来很像这样.其目的是记录在各个(200多个)国家中发现的物种.
ID
Species
Afghanistan
Albania
Algeria
American Samoa
Andorra
Angola
....
Western Sahara
Yemen
Zambia
Zimbabwe
Run Code Online (Sandbox Code Playgroud)
数据样本就是这样的
id Species Afghanistan Albania American Samoa
1 SP1 null null null
2 SP2 1 1 null
3 SP3 null null 1
Run Code Online (Sandbox Code Playgroud)
在我看来,这是一个典型的多对多情况,我想要3个表.物种,国家和物种.FoundInCountry
链接表(SpeciesFoundInCountry)在种类和Country表中都有外键.
(绘制图表很难!)
Species
SpeciesID SpeciesName
Country
CountryID CountryName
SpeciesFoundInCountry
CountryID SpeciesID
Run Code Online (Sandbox Code Playgroud)
我是否有一种神奇的方法可以生成一个insert语句,它将根据列名称和原始mega表中有1的SpeciesID从新的Country表中获取CountryID?
我可以为一个国家做这个(这是一个选择来显示我想要的)
SELECT Species.ID, Country.CountryID
FROM Country, Species
WHERE (((Species.Afghanistan)=1)) AND (((Country.Country)="Afghanistan"));
Run Code Online (Sandbox Code Playgroud)
(巨型表称为物种)
但是使用这个策略我需要对原始表中的每一列进行查询.
有没有办法在sql中这样做?
我想我可以将我的where子句加载到一起并编写一个脚本来制作sql,虽然看起来不那么优雅!
有什么想法(或要求澄清)?
我会使用脚本生成所有单个查询,因为这是一次性导入过程.
某些程序(如Excel)擅长混合不同维度的数据(将列名与行内数据进行比较),但关系数据库很少.
但是,您可能会发现某些系统(例如Microsoft Access,令人惊讶)具有可用于规范化数据的便捷工具.就个人而言,我发现编写脚本的速度更快,但是你使用Access和脚本编写的相关技能可能与我的不同.
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |