所以我有这些车辆,它们有很多不同的类型。每种类型都有自己的表,具有许多属性。然后我有一个“车辆”表,其中包含每个表中所有车辆的 ID 和类型。车辆可以有照片,所以我有一个“照片”表,带有一个 vehicle_id,将照片链接到它所属的车辆。
现在每辆车都有一个设备列表,我将其作为 JSON 数组存储在单个“设备”列中。
像这样的东西:http: //pastie.org/353195
我怎样才能更好地做到这一点,尤其是设备栏?
所以我有这些车辆,它们有很多不同的类型。每种类型都有自己的表,具有许多属性。然后我有一个“车辆”表,其中包含每个表中所有车辆的 ID 和类型。车辆可以有照片,所以我有一个“照片”表,带有一个 vehicle_id,将照片链接到它所属的车辆。
现在每辆车都有一个设备列表,我将其作为 JSON 数组存储在单个“设备”列中。
像这样的东西:http: //pastie.org/353195
我怎样才能更好地做到这一点,尤其是设备栏?
我将有一个设备表,然后在车辆表和设备表之间建立一个连接表,其中包含设备 ID 和车辆 ID。
这为您提供了车辆和设备之间的多对多关系。
这将使查询和搜索具有特定设备的车辆变得更加容易,并且您的设备数据不会在您的 JSON 数据包中重复。您还可以更改设备类型,而无需更新大量 JSON 数据包。
将 JSON(或 XML)存储在数据库中通常是不好的,除非应用程序有一些固有的东西,例如需要可扩展的数据。
除了装备栏,你的设计还不错。我建议有一个带有 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
您的设备表应该看起来更像您的照片表。vehile_id 列和设备列。然后您的客户端代码可以将设备放入 JSON 数组(或其他任何需要的内容)。您通常不应该在数据库中以 JSON 数组(或任何其他格式)存储内容。
如果您更进一步,您可以制作一个设备表,然后在车辆和设备之间创建多对多关系。
为什么不让设备像其他人一样成为桌子?查询设备本身会很困难,你不能单独使用 SQL 来完成,总是需要一些客户端应用程序来反序列化它。