【问题标题】:Someone tell me why my database design is stupid, and how I can fix it有人告诉我为什么我的数据库设计很愚蠢,以及如何修复它
【发布时间】:2009-01-05 20:38:46
【问题描述】:

所以我有这些车辆,它们有很多不同的类型。每种类型都有自己的表,具有许多属性。然后我有一个“车辆”表,其中包含每个表中所有车辆的 ID 和类型。车辆可以有照片,所以我有一个“照片”表,带有一个 vehicle_id,将照片链接到它所属的车辆。

现在每辆车都有一个设备列表,我将其作为 JSON 数组存储在单个“设备”列中。

类似这样的:http://pastie.org/353195

我怎样才能更好地做到这一点,尤其是设备栏?

【问题讨论】:

    标签: database rdbms


    【解决方案1】:

    我将有一个设备表,然后在车辆表和设备表之间建立一个连接表,其中包含设备 ID 和车辆 ID。

    这为您提供了车辆和设备之间的多对多关系。

    这将使查询和搜索具有特定设备的车辆变得更加容易,并且您的设备数据不会在您的 JSON 数据包中重复。您还可以更改设备类型,而无需更新大量 JSON 数据包。

    在数据库中存储 JSON(或 XML)通常是不好的,除非应用程序有一些固有的东西,例如需要可扩展的数据。

    【讨论】:

      【解决方案2】:

      除了装备栏,你的设计还不错。我建议有一个带有 id 和 name 的新表,然后是一个将车辆链接到它拥有的设备的表。

      vehicles:
      id | type
      ---------
      1  | tank
      2  | car
      3  | boat
      4  | car
      
      equipment:
      id | name
      ---------
      1  | radio
      2  | abs
      
      vehicles_ equipment:
      vehicles_id | equipment_id
      2           | 1
      2           | 2
      

      【讨论】:

        【解决方案3】:

        您的设备表应该看起来更像您的照片表。 vehile_id 列和设备列。然后您的客户端代码可以将设备放入 JSON 数组(或其他任何需要的内容)。您通常不应该在数据库中以 JSON 数组(或任何其他格式)存储内容。

        如果您更进一步,您可以制作一个设备表,然后在车辆和设备之间创建多对多关系。

        【讨论】:

          【解决方案4】:

          为什么不把设备做成其他桌子一样的桌子呢?直接查询设备会很困难,单靠SQL是做不到的,总是需要一些客户端应用来反序列化。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-25
            • 2015-05-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多