2017-04-21 81 views
0

這些是我的表格,我創建了一個tbl_relation,其中data_idtbl_datatag_idtbl_tagsdata_id可以有多少個tag_ids以一對多關係設計數據庫

例如在以下情況下: 約翰與食物,蘋果,橙子有關。 Linus與食物,馬鈴薯有關。

這是在速度和存儲方面做的正確方法嗎?因爲我的tbl_tagstbl_data可以有至少1百萬個條目,並且tbl_data中的name可以與至少5個tag_name相關聯。

tbl_tags 
+----+--------+ 
| id | name | 
+----+--------+ 
| 1 | food | 
+----+--------+ 
| 2 | apple | 
+----+--------+ 
| 3 | orange | 
+----+--------+ 
| 4 | potato | 
+----+--------+ 
| 5 | fruit | 
+----+--------+ 

tbl_data 
+----+--------+ 
| id | name | 
+----+--------+ 
| 1 | John | 
+----+--------+ 
| 2 | Linus | 
+----+--------+ 
| 3 | Bill | 
+----+--------+ 
| 4 | Steve | 
+----+--------+ 
| 5 | Dennis | 
+----+--------+ 

tbl_relation 
+---------+--------+ 
| data_id | tag_id | 
+---------+--------+ 
| 1  | 1  | 
+---------+--------+ 
| 1  | 2  | 
+---------+--------+ 
| 1  | 3  | 
+---------+--------+ 
| 2  | 1  | 
+---------+--------+ 
| 2  | 4  | 
+---------+--------+ 
+0

這看起來是一種存儲兩種類型數據及其之間關係的規範方法。您的挑戰在於創建正確的索引,以便可以高效地完成聯接。 –

+0

+是的,這確實是最好的方法 – Milney

+0

A 1:許多關係最好用一個表中的額外列來完成,而不是通過一個額外的表。 –

回答

0

這是什麼?

標題說「1對多」。在這種情況下,tags應該有一列說明哪個人(data_id)與該標籤有關。

也許Sam贊好applepotatokiwi?也就是說,文本暗示可能有很多:很多。在這種情況下,您需要一個2列表,基本上就像您所描述的那樣。這裏有my tips這樣的表的優化設計。這些提示解決了您的速度和空間問題。

0

這似乎是一個多對多的關係,因爲tbl_data_id可以與多個tbl_tags_id關聯,反之亦然(看到tbl_relation中的條目)。 如果是這種情況,您的方法看起來非常標準,正常形式。

一個推薦是在你的tbl_relation表上創建外鍵約束。