2011-07-14 53 views
0

我想知道是否有人可以幫助我以一種您認爲正確的方式組織我的MySQL表(我在某處查看關聯表是我正在尋找的)。我在執行它們時遇到了麻煩。執行關聯表

下面是一個例子:

Location   Type     Event     Date 
Location 1   bar, disco   event1     friday 
Location 1   bar, disco   event2     saturday 
Location 2   bar, restaurant  Event3     friday 

你怎麼會去這個,如果你想有「位置1」在你的數據庫只有一次,並與其他地方存儲相關的事件?這同樣適用於類型部分。我無法決定我應該如何設置多個變量的一個位置,如酒吧也正在一間餐廳,等...

回答

2

LocationsEvents之間的關係是一個1對多的關係的一個例子。這意味着每個單獨的位置可以有許多與之關聯的事件。這些類型的關係通常通過將外鍵添加到引用「一個」表(位置)的主鍵的「多個」表(事件)來實現。

'位置'和'類型'之間的關係是多對多關係的一個例子。這意味着一個地點可以有多種類型,並且類型可以與多個地點相關聯。這些類型的關係通常通過鏈接表來實現,鏈接表包含相關行的外鍵。鏈接表通常具有兩個外鍵的組合主鍵,這意味着一個位置不能與「條形」類型鏈接兩次。

所以,下面的表結構可能適合你:

Location: ID (primary key), LocationName, ... 
Events: ID (primary key), LocationID (foreign key), Date, Name, ... 
LocationTypes: LocationID (fk), TypeID (fk) 
Types: ID (pk), Name, ... 

要跨多個表的查詢信息,你必須使用連接。對於一對多關係,以下查詢將起作用:

SELECT 
    l.LocationName, e.Name, e.Date 
FROM Location l 
    JOIN Events e ON l.ID = e.LocationID 

對於多對多關係,以下查詢會將信息連接在一起。

SELECT 
    l.LocationName, t.Name as TypeName 
FROM Location l 
    JOIN LocationTypes lt ON l.ID = lt.LocationID 
    JOIN Types t ON lt.TypeID = t.ID 

這些示例僅顯示標準的內部聯接,還有其他聯接類型可能更適合您的需要。

+0

好吧,這樣就有了一個sql查詢,當我替換缺少的變量時會創建這些關聯?我一定會在這方面進行更多搜索,但這非常有幫助。 – pufAmuf

1

假設類型是位置

tblType 
id int 
name varchar 

tblLocation 
id int 
name varchar 

tblLocationType (m-n relation) 
fk_type int (ref. tblType.id) 
fk_location int (ref. tblLocation.id) 

tblEvent 
id int 
name varchar 
place int (ref. tblLocation.id) 
date DATETIME 

編輯的類型:你exapmle會讀:

tblType 
id name 
1 bar 
2 disco 
4 restaurant 

tblLocation 
id name 
1 Location 1 
2 Location 2 

tblLocationType 
1 1 
2 1 
1 2 
3 2 

tblEvent 
1 event1 1 whenever 
2 event2 1 whenever 
3 event3 2 whenever 
+0

嗯,我應該運行上述查詢?我仍然對這種關係是如何發揮作用以及從那裏走向哪裏感到困惑。 – pufAmuf

+0

我的「參考」意味着參考。您可以定義外鍵(如果引擎允許的話),將一個表的列「綁定」到另一個表的引用列。 – Hyperboreus