首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否应该将其他数据存储在SQL /join表中?

是否应该将其他数据存储在SQL /join表中?
EN

Stack Overflow用户
提问于 2016-07-15 18:47:38
回答 3查看 2.2K关注 0票数 4

在我的联接表/连接表中存储附加数据有什么缺点吗?

例如,我正在开发一个卡车运输公司的数据库,我有三个表:

代码语言:javascript
运行
复制
Table 1 - company,
Table 2 - trailer_type,
Table 3 - junction_table,

每个公司可以有一个以上的拖车类型,但我也需要每个拖车类型的每家公司的拖车计数。放置拖车计数的最合理的地方似乎是与company.idtrailer_type.id的接口处。

这样做有什么缺点吗?如果有,还有更好的办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-16 01:06:31

从你表达问题的方式来看,我认为你的直觉基本上是正确的。你把连接表确定为保存你的计数的地方。但你犹豫不决,显然是因为它是个“连接桌”。

所有表都是平等创建的。从SQL的角度来看,没有事实表,没有维度表,也没有连接表。只有桌子。

规范化设计表示标识每一行的最小键。在您的示例中,连接表的自然键类似于{company_id,trailer_type_id}。是否有功能上依赖于该键的信息?为什么,是的,有:ntrailers。这样,一列就诞生了。

所以不要担心它是什么样的桌子。想想这一行意味着什么,以及它是如何识别的。这会让你继续在球道上。

票数 10
EN

Stack Overflow用户

发布于 2016-07-15 19:00:01

首先,可以在连接表中存储其他信息。例如,创建的日期通常非常有趣。而且,有许多实体的例子,你可以把它们看作是连接表--比如连接客户和发票的记帐记录--这些记录自然也有额外的字段。

然而,在普通情况下,伯爵不是你要储存的东西。这种类型的信息应该放在Company表中,特别是如果随着时间的推移它是固定的。

如果它不是固定的,就会想到两个选择。第一个是一个缓慢变化的维度,您存储一个公司的拖车数量以及该值的生效日期和结束日期。一个可行的替代方法是将值存储在连接表中。这不是首选,但在许多情况下,这可能是一个很好的解决办法。

票数 2
EN

Stack Overflow用户

发布于 2016-07-16 01:17:10

您可能希望您的模式与公司和拖车之间的多到多关系有所不同:这就是您有一个连接表的原因。

用这样的方式思考如何:

  1. 公司与拖车有一对多的关系。
  2. 拖车与TrailerDescriptions有着多对一的关系。

因此,您的“拖车”表将包含以下列:

代码语言:javascript
运行
复制
 company_id
 trailer_description_id
 count
 etc.

您甚至可以通过添加列并将“计数”设置为1来枚举各个预告栏。

代码语言:javascript
运行
复制
 trailer_id
 company_id
 trailer_description_id
 count = 1
 date_placed_in_service
 license_plate_number

等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38403191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档