在我的联接表/连接表中存储附加数据有什么缺点吗?
例如,我正在开发一个卡车运输公司的数据库,我有三个表:
Table 1 - company,
Table 2 - trailer_type,
Table 3 - junction_table,
每个公司可以有一个以上的拖车类型,但我也需要每个拖车类型的每家公司的拖车计数。放置拖车计数的最合理的地方似乎是与company.id
和trailer_type.id
的接口处。
这样做有什么缺点吗?如果有,还有更好的办法吗?
发布于 2016-07-16 01:06:31
从你表达问题的方式来看,我认为你的直觉基本上是正确的。你把连接表确定为保存你的计数的地方。但你犹豫不决,显然是因为它是个“连接桌”。
所有表都是平等创建的。从SQL的角度来看,没有事实表,没有维度表,也没有连接表。只有桌子。
规范化设计表示标识每一行的最小键。在您的示例中,连接表的自然键类似于{company_id,trailer_type_id}。是否有功能上依赖于该键的信息?为什么,是的,有:ntrailers
。这样,一列就诞生了。
所以不要担心它是什么样的桌子。想想这一行意味着什么,以及它是如何识别的。这会让你继续在球道上。
发布于 2016-07-15 19:00:01
首先,可以在连接表中存储其他信息。例如,创建的日期通常非常有趣。而且,有许多实体的例子,你可以把它们看作是连接表--比如连接客户和发票的记帐记录--这些记录自然也有额外的字段。
然而,在普通情况下,伯爵不是你要储存的东西。这种类型的信息应该放在Company
表中,特别是如果随着时间的推移它是固定的。
如果它不是固定的,就会想到两个选择。第一个是一个缓慢变化的维度,您存储一个公司的拖车数量以及该值的生效日期和结束日期。一个可行的替代方法是将值存储在连接表中。这不是首选,但在许多情况下,这可能是一个很好的解决办法。
发布于 2016-07-16 01:17:10
您可能希望您的模式与公司和拖车之间的多到多关系有所不同:这就是您有一个连接表的原因。
用这样的方式思考如何:
因此,您的“拖车”表将包含以下列:
company_id
trailer_description_id
count
etc.
您甚至可以通过添加列并将“计数”设置为1来枚举各个预告栏。
trailer_id
company_id
trailer_description_id
count = 1
date_placed_in_service
license_plate_number
等。
https://stackoverflow.com/questions/38403191
复制相似问题