有人告诉我为什么我的数据库设计是愚蠢的,以及我如何解决它

时间:2009-01-05 20:38:47

标签: database rdbms

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

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

像这样:http://pastie.org/353195

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

4 个答案:

答案 0 :(得分:12)

我有一个设备表,然后在车辆工作台和设备表之间有一个连接表,带有equipment_id和vehicle_id。

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

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

在数据库中存储JSON(或XML)通常很糟糕,除非应用程序有固有内容,以便需要可扩展的数据。

答案 1 :(得分:4)

除设备栏外,您的设计还可以。我建议有一个带有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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

为什么不把设备变成像其他设备一样的桌子?查询设备本身很难,你无法单独使用SQL,总是需要一些客户端应用程序来反序列化。