数据库规范化与通配符查询

时间:2014-01-12 01:55:35

标签: database database-design

我一直想知道是否需要进行标准化。我主要关注的不是这些表的可读性和易用性,而是速度。以汽车桌为例。假设这个汽车表有超过10,000条记录。

我的问题是:做多次连接的时间代价是否值得更好地设计数据库系统?以及如何进行'%%'查询与连接之间的区别

汽车

-------------------------------------------------------------
|CarID  |Car_Name   |         Car_Features                   |
------------------------------------------------------------- 
|F31344 | Corolla   | Sedan - Sun Roof Power Lock Manual 4WD |
-------------------------------------------------------------

并执行以下查询:

  
      
  1. 从汽车中选择Car_ID,Car_Name,Car_Features,其中Car_Features如'%4WD'%;
  2.   
  3. 从Car中选择Car_Name,其中Car_Features如'%Manual Sun Roof%';
  4.   

持续时间/获取时间相对较快。

采用标准化方法。

汽车

------------------------------------------
|Car_ID | Car_Name |Transmission|Features|
------------------------------------------
|F31344 | Corolla  | M4WD       | EX1    |
------------------------------------------

传送

---------------------------------
|ID           | Drive | Manual  |
--------------------------------
|M4WD         | 4WD   |   1     |
--------------------------------


Features
---------------------------------
|Features | Sun_Roof | Power_lock|
---------------------------------
|EX1      | 1         |     0    |
---------------------------------

现在我必须编写连接来完成同样的事情。除了在原始表中引入两个新表和两个查找列之外。

> 1.Select Car_ID,Car_Name,Drive From Cars inner join Transmission
> ON Cars.Transmission = Transmission.ID
> Where Drive = '4WD'; 

1 个答案:

答案 0 :(得分:1)

规范化与性能无关,尽管在大多数情况下,性能的提高是正确规范化数据库的副作用。它主要是关于数据的完整性和一致性

在非规范化方法中,您将无法正常维护(例如,一致地向所有汽车记录添加新的或更新现有功能)并查询您的数据(当您开始混合和匹配汽车功能时)。而你的第二个问题就是那个

的完美例证
Select Car_Name from Cars where Car_Features like '%Manual Sun Roof%';

此查询不会返回任何内容

这是 SQLFiddle 演示

推荐阅读: