2016-03-08 100 views
1

我想獲取網絡掃描數據,如hostname,IP address, ports, company name並將其存儲在數據庫中。我會比較新的掃描數據與舊的,尋找變化(增加)。SQLite中的數據庫設計和python

我對使用主鍵感到困惑。我需要將所有表格與相關數據綁定在一起。

我的理解是否正確:我對每個表有一個PK和join這些表在使用這些PK的時候做select語句?

舉例來說,如果我想要得到公司A所有hostsports

select CompanyA from Company, Hosts, Ports 

我敢肯定,語法不正確但我想確認我理解的PK以及它們是如何工作的。

Design

+2

我沒有downvote,但我沒有投票結束,因爲您要求我們提供關於如何使用關於StackOverflow「太寬泛」的關係數據庫的教程。我建議你搜索「SQL教程」 – msw

+1

我很欣賞這個探索,但我不認爲我在問這麼廣泛的問題。如果發現這種情況,請道歉,參考我對J. Schneider提出的答案的迴應。我一直試圖表達自己對如何構建數據庫的理解,以及對PK使用的理解,以及它們與我如何檢索所有表中的數據有關。他的回答解答了我的問題。 – iNoob

回答

4

你的SELECT語句不是現在得到任何東西。 我假設你想從公司名稱「CompanyA」獲取數據。 要做到這一點你必須寫

select * from Company, Hosts, Ports 
where Company.Name = "CompanyA" and Company.Company_ID = Ports.Company_ID 
and Company.Company_ID = Hosts.Company_ID 

星號(*)意味着它返回的所有元素,如果你想有一個特殊的元素,如你必須填寫了Hosts.Name的主機名。

SQL不會使用PK或任何其他鍵自動連接表,您必須以某種方式指定它,例如比較上面的Company_ID。 如果沒有指定連接,它只是將每個表中的每個元素與每個其他表中的每個元素相結合。有n個元素,則有n 3行。

我建議你看看如何從頭開始編寫SQL語句。

+1

謝謝你的回覆,我知道我的陳述是不正確的。這更像是一個sudo聲明,可以幫助解釋我正在嘗試做什麼。我的問題是爲了關注我對我需要的結構的理解,以及它如何與使用PK有關。現在我相信,無論如何,你的榜樣聲明對我來說都是如此,所以我會接受作爲答案。再次感謝你不只是解僱這個問題。 – iNoob