我會通過說我是一個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>
想想看,從邏輯的角度來看;當它不需要在那裏時,沒有必要人爲地將複雜性注入到這個設計中。在你的例子中,長度,寬度和高度並不是真正獨立的對象,它們都與你在表格行中描述的對象的尺寸有關。此外,長度寬度和高度在給定時間只有一個值。
我希望這是有道理的 - 如果我在我的教學法中有點迂腐,我很抱歉。但是,如果有人在這個問題上絆倒,希望這個例子能夠幫助他們。
祝你好運。
編輯:我剛纔意識到你的問題是關於性能的。這是更深入一點,也許基於你使用的數據庫引擎?不過,一般來說,我認爲查詢表格而不進行任何連接會稍微快一些,因爲反規範化是一種常見的提高性能的方法。