我正在努力寻找制作表格的最佳方法,消除冗余问题并使其模块化。
例如,假设我有以下表格:
Company(id, name)
{
1; IBM
2; Google
3; Amazon
}
Services(id, name)
{
1; Phone
2; Gas
3; Electricity
4; Water
5; Heating
6; Health service
7; Education
8; Transport service
}
我想创建一个新表,问题是值不是互斥的。
在表格中,我想要制作,我必须将公司(1)与一定数量的服务联系起来,问题是公司可以拥有(n)服务数量。
我想到了三种不同的方法,但我认为这3种模式违反了数据库规范化的规则。
下面我将编写3种不同的模式,以及一些示例记录:
NewTableOne(company_id, servs)
{
1; 3,5,7,8
3; 1,2,5
}
第一个记录意味着IBM公司提供电力,供暖,教育和运输服务。 第二个记录意味着亚马逊公司提供电话,燃气,供暖服务
NewTableTwo(company_id, service)
{
1; 3
1; 5
1; 7
1; 8
2; 1
2; 2
2; 5
}
最后,
NewTableThree(id, phone, gas, elect, water, heating, health, edu, transport)
{
1; 0; 0; 1; 0; 1; 0; 1; 1
2; 1; 1; 0; 0; 1; 0; 0; 0
}
使用这三种方式中的任何一种都很方便吗? 或者有更好的方法来做我想做的事情,如果有,怎么做?
感谢您的阅读,请原谅我的英语。
答案 0 :(得分:2)
不唯一会让您陷入困境的版本是#2。
答案 1 :(得分:1)
您提供的第二个解决方案是最好的,也很容易实现。它被称为Junction Table