多个表或多个类型的单个表?

时间:2016-02-18 13:36:22

标签: mysql sql database performance database-design

我正在创建一个数据库,例如vehicles的集合。有些是cars,有些是卡车。所以我有一张这样的表:

COLLECTIONS: id, title, description

然后我有更多的表格,其中包含每个集合中的车辆清单。

我可以使用这样的多个表:

COLLECTION_CARS: collection_id, make, model, year

COLLECTION_TRUCKS: collection_id, make, model, year

或者我可以只有一个带有类型字段的表:

COLLECTION_VEHICLES: collection_id, vehicle_type, make, model, year. (And then just make the `vehicle_type` be `Car or Truck`)

哪个更好,主要是在性能方面?

2 个答案:

答案 0 :(得分:1)

虽然在看到您打算运行的查询之前无法估计性能,但以下是您可以应用的一些常规注意事项:

  • 如果COLLECTION_CARSCOLLECTION_TRUCKS中的总行数较小(例如,不到一百万),则该方法不太可能与性能观点有所区别
  • 如果行数很大,并且您经常将汽车与汽车分开查询或反之,使用单独的表可能是有利的
  • 如果您总是查询汽车和卡车,使用单个表可能会提供一些优势

除了性能之外,单个表格为您提供了更灵活的设计,因为添加新类型的车辆(例如,RV)不会改变数据库的结构。这也适用于查询:假设为COLLECTION_RV添加第三个表,并更改加入SELECTCOLLECTION_CARS的所有COLLECTION_TRUCKS,以便它们加入{{1} }}

答案 1 :(得分:0)

为什么不能只用一个额外的列创建一个表?如果您担心这一点,那对SQL性能最好。

COLLECTIONS: id, title, description, type, make, model, year

enter image description here

enter image description here

只需在SQL Server中打开一个新查询并运行此代码即可生成新表:

CREATE TABLE [dbo].[collections](
    [id] [int] NULL,
    [title] [varchar](50) NULL,
    [description] [varchar](50) NULL,
    [type] [varchar](5) NULL,
    [model] [varchar](50) NULL,
    [make] [varchar](50) NULL,
    [year] [numeric](18, 0) NULL
) ON [PRIMARY]