我会通过说我是一个SQL和数据库表的相对新手,然而,这并不意味着我不了解我的基本知识。
除非你的例子严重过度简化,否则你应该使用第一个例子。它不仅更快,更容易查询,而且更具有意义。
在此示例中,根本不需要拆分表;您的'属性ID'由表头充分表示。而且,这些价值本身并没有真正的意义,所以他们真的不需要在另一个表中。
如果您有另一个单独存在的与您的对象有一对多关系的对象,您通常会分出一个新表并引用它。
这里使用的博客条目博客条目和评论(其实从我的O'Reilly的服务器上的数据库)的例子:
mysql> select * from blog_entries;
+----+--------------+-------------+---------------------+
| id | poster | post | timestamp |
+----+--------------+-------------+---------------------+
| 1 | lunchmeat317 | blah blah | 0000-00-00 00:00:00 |
| 2 | Yongho Shin | yadda yadda | 0000-00-00 00:00:00 |
+----+--------------+-------------+---------------------+
2 rows in set (0.00 sec)
mysql> select id, blog_id, poster, post, timestamp from blog_comments;
+----+---------+--------------+----------------+---------------------+
| id | blog_id | poster | post | timestamp |
+----+---------+--------------+----------------+---------------------+
| 1 | 1 | lunchmeat317 | humina humina | 0000-00-00 00:00:00 |
| 2 | 1 | Joe Blow | huh? | 0000-00-00 00:00:00 |
| 3 | 2 | lunchmeat317 | yakk yakk yakk | 0000-00-00 00:00:00 |
| 4 | 2 | Yongho Shin | lol | 0000-00-00 00:00:00 |
+----+---------+--------------+----------------+---------------------+
4 rows in set (0.00 sec)
mysql>
想想看,从逻辑的角度来看;当它不需要在那里时,没有必要人为地将复杂性注入到这个设计中。在你的例子中,长度,宽度和高度并不是真正独立的对象,它们都与你在表格行中描述的对象的尺寸有关。此外,长度宽度和高度在给定时间只有一个值。
我希望这是有道理的 - 如果我在我的教学法中有点迂腐,我很抱歉。但是,如果有人在这个问题上绊倒,希望这个例子能够帮助他们。
祝你好运。
编辑:我刚才意识到你的问题是关于性能的。这是更深入一点,也许基于你使用的数据库引擎?不过,一般来说,我认为查询表格而不进行任何连接会稍微快一些,因为反规范化是一种常见的提高性能的方法。