2013-01-21 46 views
-1

我創建了一個投票網站,用戶打算註冊並投票。我只爲用戶的信息和提交創建了一個表。下面是表的列和行:構造數據庫表

用戶:

columns: username password agree_1 reason_1 agree_2 reason_2 

rows:  paul  testing yes  NULL  no  because i don't like it 

我接到了這裏的會員誰說我應該調整自己的表這樣的忠告:

users 
- id 
- email 
- name 

polls 
- id 
- name 

questions 
- id 
- poll_id 
- question 
- order 

answers 
- id 
- question_id 
- user_id 
- answer 

請哪列是主鍵,哪個是外鍵。我需要知道一張桌子與另一張桌子的關係。請幫忙。感謝

+1

@ceejayoz:也許是我們這些誰已經出現了一點;不過,我猜測OP是非常新的。這是一個有效的問題。 – NotMe

+1

如果有人問一個問題,「顯而易見」作爲答案是毫無價值的,也是一種侮辱。 –

回答

2

更多的時候,「ID」是針對特定的表主鍵table1name_id是在該表中涉及該表table1中的外鍵

例如在你的例子中,每個表的id是該表的主鍵,並且poll_idquestions表中的外鍵將「questions」表與poll「表」相關聯。

1

從技術上講,這兩種方法都是可用的。

這個問題真的歸結爲重用。如果您打算將此網站用於其他民意調查,那麼您的同事在他的方法中是正確的。

但是,如果這是一筆單筆交易,那麼您開始使用的是好的。

你的方法會導致很少的代碼/設置。他將花更多的時間讓你吸收EAV模型的複雜性;特別是在報告方面。使用EAV設計構建高性能查詢並不是一件容易的事。

當然有一箇中間立場。即將登錄信息分離到其自己的表中,並創建一個「民意調查」答案表,該表只包含您關心的4列。這種方法不具有任何EAV方法的靈活性,但符合關於結構的標準DB設計標準,並且當然很容易放在一起並從中查詢。

最後,還有第四種選擇:不要寫自己的,只需註冊一個可以免費投票的網站。例如:http://www.micropoll.com/注意:我不隸屬於他們,我也沒有使用他們的產品。這只是一個網站,在2秒鐘的谷歌搜索彈出。


更新由於意見 是的,你可以執行對你原本結構簡單的查詢。例如:用戶

  1. 計數:人誰說是
    select count(*) from users

  2. 計數:
    是以agree_1:select count(*) from users where agree_1 = 'yes'
    是這兩個:select count(*) from users where agree_1='yes' and agree_2='yes'
    是要麼:select count(*) from users where agree_1='yes' or agree_2='yes'

  3. 計數的人數輔助否:
    否agree_1:select count(*) from users where agree_1 = 'no'
    沒有這兩個:select count(*) from users where agree_1='no' and agree_2='no'
    否之一:select count(*) from users where agree_1='no' or agree_2='no'

  4. 顯示
    只評論:select reason_1, reason_2 from users
    僅是意見:無論從單select reason_1 from users where agree_1 = 'yes'
    評論列是的:
    select reason_1 from users where agree_1 = 'yes' union all select reason_2 as reason_1 from users where agree_2 = 'yes'

+0

謝謝。本網站不會用於其他民意調查。我想做到這一點,我可以做到以下幾點: 計數的用戶數, 計數的人數是誰, 計數人數誰說,不, 只顯示評論。我可以用上面的第一個表格結構來實現嗎? –

+0

@ user1993688:是的,你可以做到這一點。查看更新 – NotMe

0

使用數據庫中的關係保持數據驗證和規範化,嘗試使用不包含冗餘數據的結構,該人建議您足夠好以便開始使用,您只需將InnoDB引擎用於表。 在用戶,查詢,問題和答案表中創建ID主鍵,並向外鍵列添加索引,即(question_id,poll_id,user_id)。 地圖

answers.question_id to questions.id 
    questions.poll_id to polls.id 
    answers.user_id to users.id 

,可以在phpMyAdmin的關係視圖可以輕鬆完成