2016-03-08 58 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