在我的加入/联结表中存储附加数据是否有任何缺点。
例如,我正在开发一个货运公司数据库,我有3个表:
Table 1 - company,
Table 2 - trailer_type,
Table 3 - junction_table,
每家公司可以有多种拖车类型,但我还需要每家公司每种拖车类型的拖车数量。放置预告片计数的最逻辑位置似乎是在与company.id和trailer_type.id的联结表中。
这样做是否有任何缺点?若有,有更好的方法吗?
答案 0 :(得分:4)
从你提出这个问题的方式来看,我认为你的直觉大多是正确的。您将联结表识别为保持计数的地方。但你犹豫不决,显然是因为它是一个“交汇处”。
所有表都是相同的。从SQL的角度来看,没有事实表,没有维度表,没有联结表。只有桌子。
标准化设计表示识别每一行的最小键。在您的情况下,联结表的自然键类似于{company_id,trailer_type_id}。是否存在功能上依赖于该密钥的信息?为什么,是的,有:ntrailers
。因此,一个专栏诞生了。
所以不要担心它是什么样的表。想想行意味着什么,以及它是如何识别的。这将让你在球道上。
答案 1 :(得分:0)
首先,可以在联结表中存储其他信息。例如,创建的日期通常非常有趣。并且,您可以将许多实体示例视为联结表 - 例如将客户与发票连接起来的结算记录 - 并且记录自然会有其他字段。
但是,在一般情况下,计数不是您要存储的。这类信息应该放在Company
表中,特别是如果它随着时间的推移而固定。
如果没有修复,我会想到两个选项。第一个是缓慢变化的维度,您可以在其中存储公司的预告片数量以及值的有效日期和结束日期。一种可行的替代方法是将值存储在联结表中。它不是第一选择,但在许多情况下它可能是一个很好的解决方案。
答案 2 :(得分:0)
您可能希望将您的架构与公司和预告片之间的多对多关系略有不同:这就是您拥有联结表的原因。
如何以这种方式思考:
因此,您的预告片表将包含以下列:
company_id
trailer_description_id
count
etc.
您甚至可以通过添加列并将“计数”设置为1来选择枚举各个预告片。
trailer_id
company_id
trailer_description_id
count = 1
date_placed_in_service
license_plate_number
等