2012-11-03 57 views
0

對不起,我對mysql和數據庫一無所知,但我有點了解它。Mysql數據庫設計了多個值的多個值

因此,假設以下情況:

我有一個定義(ball_definitions)表的不同顏色的球:

id color 
1 red 
2 blue 
3 green 
... 
N 

其中id是首要價值。

和我有第二個表(人)與人的定義:

id name 
1 John 
2 Peter 
3 Michel 
... 
M 

(其中id是主鍵)

現在,我想涉及到每個人,量擁有球由人,在概念上,是這樣的:

john: 1 red ball, 3 green ball, 0 blue ball 
peter: 3 red ball, 2 green ball, 1 blue ball. 
... 

以這種方式,無論是M和N可以(爲可移植性原因)而有所不同。

我的第一個難題是讓人的桌子有N列,其中每列指的是每種顏色,但這不是可移植的(需要每次更改ball_definitions更改的觸發器,而且看起來很難查詢) 。

在另一方面,創建一個新表與「多對多」的關係:

persons_id ball_definitions_id amount 
1 1 1 
1 2 3 
1 3 0 
2 1 3 
2 2 2 
2 3 1 

在我看來,一點點的努力,當人的數量或球的數量變化。

有沒有更好的解決方案?

乾杯, 豪爾赫

+0

第二個解決方案又是什麼問題?我真的不明白你在說什麼,這對我來說這樣做很有意義。 – Jasper

+0

@Jasper如果我添加一個新球,我必須爲該表創建M個新條目。也許我不習慣這個,但是如果N和M很大並且我想從特定的人「我」查詢表格(例如,爲什麼必須通過所有條目,如果我只想要條目第一個元素是「我」) –

回答

2

沒有,有沒有更好的解決辦法。

當你有兩個有N到N(多對多)關係的表時,你應該使用一箇中間表。

另一種方法是在人表中爲每種類型的球創建一個列,或者在球表中爲每個人創建一個比您所描述的解決方案更加努力的列。如果你需要添加更多的球或人,事情變得非常複雜和混亂。你描述了最好的解決方案。

+0

可能有一個微妙的,我沒有看到。 –

+1

如果添加一個新的球,如果大多數人有0個球,則不必爲該表創建M個新條目。 當你更新一個人的球的數量時,你可以插入一條新記錄,並且如果中間表中沒有記錄,則假設一個人'x'的球數爲0。 –