在关系数据库中建立复杂的关系
building complicated relationships in a relational database
我有一个关于关系数据库设计的一般性问题。我有一长串来自 table 的对象。这些对象使用三个描述符 类 进行分类。有 distributor1、distributor2 和 distributor3。为了描述一个对象,人们总是构建这些描述符的三元组。
例如,假设描述符 1 是颜色,描述符 2 是尺寸,描述符 3 是重量。对于每个对象,我都会构建一个描述该对象的三元组。
在我的例子中,每个描述符都有数千个条目。所以我为每个描述符构建一个 table 。我现在如何构建一个三元组并将其与对象 table 中的对象相关联?
如果每个对象只有一个这样的三元组,我可以将每个对象中的三个描述符 ID 作为外键存储,但我们假设每个对象可以有 0 个或多个这样的三元组。
我正在使用 sqlalchemy,但我很乐意自己编写代码,我只是在文档中寻找关键字,因为到目前为止我找不到太多。
我的解决方案是使用三个描述符 ID 和对象 ID 创建另一个 table。那是要走的路吗?
我还可以在每个对象中存储一个包含三倍描述符 ID 的字符串……但这似乎非常违背关系数据库的原则……
很少有适用于所有场景的完美设计。如果您知道您永远不需要另一个属性并且您将始终使用所有三个属性查找该行,那么您所描述的内容会很好用。这取决于您的用例,但这些都是非常有限的假设。
添加更多属性或通过 1 或 2 个属性而不是所有 3 个属性查找记录是 Lucas 关于添加可以索引的额外列的建议更加灵活的时候。在非聚集索引中定义任意一组列的能力是关系数据库倾向于获得大量搜索的地方performance/flexibility。
我有一个关于关系数据库设计的一般性问题。我有一长串来自 table 的对象。这些对象使用三个描述符 类 进行分类。有 distributor1、distributor2 和 distributor3。为了描述一个对象,人们总是构建这些描述符的三元组。
例如,假设描述符 1 是颜色,描述符 2 是尺寸,描述符 3 是重量。对于每个对象,我都会构建一个描述该对象的三元组。 在我的例子中,每个描述符都有数千个条目。所以我为每个描述符构建一个 table 。我现在如何构建一个三元组并将其与对象 table 中的对象相关联?
如果每个对象只有一个这样的三元组,我可以将每个对象中的三个描述符 ID 作为外键存储,但我们假设每个对象可以有 0 个或多个这样的三元组。
我正在使用 sqlalchemy,但我很乐意自己编写代码,我只是在文档中寻找关键字,因为到目前为止我找不到太多。
我的解决方案是使用三个描述符 ID 和对象 ID 创建另一个 table。那是要走的路吗? 我还可以在每个对象中存储一个包含三倍描述符 ID 的字符串……但这似乎非常违背关系数据库的原则……
很少有适用于所有场景的完美设计。如果您知道您永远不需要另一个属性并且您将始终使用所有三个属性查找该行,那么您所描述的内容会很好用。这取决于您的用例,但这些都是非常有限的假设。
添加更多属性或通过 1 或 2 个属性而不是所有 3 个属性查找记录是 Lucas 关于添加可以索引的额外列的建议更加灵活的时候。在非聚集索引中定义任意一组列的能力是关系数据库倾向于获得大量搜索的地方performance/flexibility。