我们应该添加额外的 5 列还是构建一个单独的表?

new*_*e14 6 database-design optimization

目前我们有一个包含 35 个字段的表。

现在,我们需要添加 5 个额外的列,但这些列不会总是被填充。

所以,我想只添加一列并将该 id 作为另一个表中的外来 5 行或更少行取决于数据的可用性。

哪个更好

  • 添加列?
  • 添加一个新表?

Raf*_*afa 9

该决定不取决于您已有的列数,而是取决于这 5 列是否属于您要建模的内容。

没有规则说:“如果您有 10 列,则保留在同一张表中;当您达到 36 列时,使用单独的表”。

如果这 5 列就像一个人的街道、城镇、地区、国家,那么没有;他们应该在一个单独的桌子“位置”或类似的地方。如果这 5 列类似于一个人的第一个名字、姓氏、第二个姓氏、ID 号和电子邮件地址,那么它们可能应该在那里。

但是,如果您的表已经有 35 列,那么您可能一开始就没有进行太多的规范化,看起来您只是将所有内容都塞满了该表......

更新

首先,我们有一个名为关联的表,然后基于该表,我们将 gps 数据链接到关联。此外,我们还获得了与关联相关联的警报表。所以关联是这里的主表。每个设备本身也是一个表,但它会在何时何地被使用时链接到一个关联。

基本上,这种关联就像从 a 到 b 的旅行。因此,从 a 移动到 b 有许多 gps 数据保存在此主表中[?]。如果在此行程中有警报,则将保存在警报表中。这5 个新列指示链接到主要 gps 设备rfid 设备的状态。但是在不需要 5 的旅行中,它可以更少甚至没有。

假设:

  • 对于每次旅行,可以有 0..N 个警报
  • 按照我的理解,你所说的联想是对一段旅程的描述
  • 每次旅程或旅行使用多个RFID 设备
  • 一个GPS 设备有 0..N 个RFID 设备与之关联;换句话说,每个rfid设备都与一个 GPS 设备相关联(不过,我不确定我是否理解其中的逻辑;为什么使用 RFID 设备?如果您是,GPS 的作用是什么)
  • 鉴于您使用的是 GPS 设备,我假设在旅途中会有多个读数,并结合 RFID 读数 (?)
  • 当您说moving from a to b there is a number of gps data which is kept in this main table,我不确定我是否了解存储了哪些信息,或者为什么将其存储在称为关联/旅程的表而不是某些关联表中(鉴于似乎有“许多 gps 数据”而不是只是“每次旅行一个 GPS 数据”)

鉴于此,我会将您的 5 列添加到RFIDStatus表中,因为This 5 new column are indicating the status of the rfid devices. 下面是对类似于您可能正在建模的内容进行建模的第一次尝试...

[     Journey    ]<——————[  Alert  ]
| fk_from        |       | fk_trip |
| fk_to          |
|                |—(from)—>[    Location    ]
|                |–—(to)—–>| long/lat/name… |
|                |
|                |<—————[    RFIDStatus    ]—————>[RFIDDevice]—————>[ GPSDevice ]
|                |      | fk_rfiddevice    |      | fk_gps   |      |           |
|                |      | fk_journey       |                        |           |
|                |      | datetime         |                        |           |
|                |      | *status details* |                        |           |
|                |<———————————————————————————[ GPSStatus  ]———————>|           |
|                |                            | fk_journey |
|                |                            | fk_gpsdev  |
|                |                            | datetime   |
|                |                            | latitude   |
|                |                            | longitude  |
Run Code Online (Sandbox Code Playgroud)

但是,正如我在评论中提到的,这完全取决于您要建模的内容。请使用更多详细信息更新您的问题,以便其他人可以为您提供更好的答案。此外,您应该阅读有关数据库建模的一些内容,以便您从良好的基础开始,并很好地理解建模数据库时所需的内容;它还将帮助您提出有关数据库设计的更好问题。

  • 不必要。如果索引和查询设置正确,并且您要加入的表每个都没有数百万行,则不需要_heavy_。您应该始终从规范化的数据库开始,只在需要时、需要时去规范化,在需要时就去规范化,就为什么要对数据库的每个特定部分进行非规范化做出非常有意识的决定。但是,考虑到您可能拥有的所有依赖关系,现在最好不要接触具有 35 列的表。但是从这 5 个新列开始。 (2认同)

a1e*_*x07 3

即使 35 对我来说也有点太多了,除非您实施数据仓库并进行标准化以提高性能。如果没有所有细节,很难给出好的建议,但一般来说,我更喜欢 1 到 0..1 关系,而不是列NULL