2013-12-18 45 views
1

我正在創建一個小型web應用程序,目前正在處理我的數據庫模式。我有兩種表結構的選擇,但我不確定哪種關係是正確的,欣賞建議?以下哪些數據庫表結構是正確的?

選項1

table1 
    - id (int) [auto increment, pk] 
    - name (varchar) 

table2 
    - id (int) [auto increment, pk] 
    - name (varchar) 
    - table1Id (int) [fk on table1.id] 

選項2

table1 
    - id (int) [auto increment, pk, fk on table3.table1Id] 
    - name (varchar) 

table2 
    - id (int) [auto increment, pk, fk on table3.table2Id] 
    - name (varchar) 

table3 
    - table1Id (int) [pk] 
    - table2Id (int [pk] 

欣賞人的思想。

編輯 - 樣例:

tblCountries 
    - id (int) [auto increment, pk] 
    - name (varchar) 

tblCities 
    - id (int) [auto increment, pk] 
    - name (varchar) 

我的查詢會拉一個城市,然後需要相應的國家。

+0

問題是 - 數據中能否存在1:M或N:M關係。這是決定哪個是正確的因素。 –

+0

每個都是正確的,這取決於你正在嘗試做什麼。但是,你不會說你想做什麼。 –

+0

對不起,在這裏是個相對的新手。將有一對多關係(table1中的1個項目可以在table2中有多個)。我的查詢將引用table2中的項目,並希望從table1撤回相應的項目。 如果我發佈了一個更好的示例,會更容易嗎? –

回答

1

你的答案取決於你想如何處理在兩個國家分裂的城市。就像舊東德/西德柏林一樣,它可以同時在兩個國家嗎?如果是這樣,你必須選擇2.所以同一城市行可以與兩個不同的國家。

我無法真正找到任何城市分裂到兩個國家(嘗試谷歌)。所以,我會忽略拆分城市的情況下,只是與選項1去。

我更喜歡CityID,CityName,CountryID和CountryName只是ID和名稱。如果您需要搜索代碼,那麼只需使用名稱和ID來查找任何內容即可。這真的取決於你如何訪問你的數據庫。如果您使用OOP和/或某些框架,那麼使用「ID」和「名稱」屬性更有意義。如果你正在編寫程序和直接查詢,那麼「xxxxID」和「xxxxxName」會更好。無論你選擇什麼,保持一致。

+0

謝謝KM。欣賞信息。 –