我对关系数据库设计有一般性问题。我从表中有一大堆对象。这些对象分为三个描述符类。有distributor1,distributor2和distributor3。为了描述一个对象,总是构建这些描述符的三元组。
例如假设descriptor1是color,descriptor2是size,descriptor3是weight。对于每个对象,我将构建一个描述该对象的三元组。 就我而言,每个描述符都有数千个条目。所以我为每个描述符构建一个表。我现在如何构建一个三元组并将其与对象表中的对象相关联?
如果每个对象只有一个这样的三倍,我可以将每个对象中的三个描述符id存储为外键,但是我们假设每个对象可以有0个或更多这样的三元组。 / p>
我正在使用sqlalchemy,但我很乐意自己编写代码,我只是在文档中寻找要查找的关键字,因为到目前为止我找不到多少。
我的解决方案是创建另一个包含三个描述符ID和对象id的表。这是要走的路吗? 我还可以在每个对象中存储一个带有三倍描述符ID的字符串......但这似乎违背了关系数据库的原则......
答案 0 :(得分:2)
所有场景都很少有完美的设计。如果您知道自己永远不需要其他属性,并且始终使用所有三个属性查找该行,那么您所描述的内容将会很好用。这取决于你的用例,但这些都是非常有限的假设。
添加更多属性或按1或2个属性而不是全部3来查找记录是Lucas建议添加可以编制索引的其他列更灵活的。在非聚集索引中定义任意列集的能力是关系数据库倾向于获得大量搜索性能/灵活性的地方。