我的任务是规范化一些数据库数据。99% 都很好,但我遇到了难题。
它不是我的问题领域,但类似的领域是书籍。想象一下,您必须记录书籍的详细信息,以及它们在供应商网站上的表现方式(可能是为了价格比较引擎)
供应商 A、B 和 C 的每本书都由一个数字标识符表示(尽管对于每个供应商来说不同),但是供应商 D 每年的发行开始于 1,因此您还需要出版年份。
如果我只需要处理 A、B 和 C,我就会有一个主图书表,以及一个将我的主图书 ID 映射到供应商特定 ID 的查找表。但是供应商 D 打破了这一点。例如,我不能让 vendorID,vendorCode 成为唯一键,因为对于 D,供应商代码可以重复使用(代码 1 每年都有不同的条目....)
一个答案是使 D 的供应商代码成为一个组合变量 - 因此 id 123 的“123,2013”,年份 = 2013,并且在我的查找代码中具有如下内容:
if(vendor = D){
...split the code in two and format the search request accordingly...
}
但它似乎有点...... hacky。
我是否错过了一些数据库规范化的微妙技巧?还是我只需要接受现实世界并不总是以一种好的方式正常化?