关于数据库设计基础的问题

时间:2012-12-12 22:06:07

标签: python sql database sqlite

我正在玩Sqlite3以试图掌握这些SQL的东西。关于这个话题,我有几个问题。

数据库是否遵循基本结构?我很好奇我是否会对我的数据库进行建模,就好像它是沿着一本巨大的字典一样。

我在考虑的问题:

如果我想要一个程序可以提取任何城市的邮政编码或其他一般信息,我想的是一种嵌套的表格结构。即:

Countries Table:
+----+--------+--------+---------+
| US | Canada | Mexico |  Etc... |
+----+--------+--------+---------+
  |
  |
  |
  |
  | States Table:
  +---------+----------+---------+--------+
  | Alabama | Arkansas | Georgia | Etc... |
  +---------+----------+---------+--------+
                  |
                  |
                  |
                  |
                  | Cities Table:
                +-----------+---------+--------+---------+
                | Alexander | Bauxite | Benton | Etc ... |
                +-----------+---------+--------+---------+
                                           |
                                           |
                     +-----+------------+---------+------+--------------------+                    
                     | Key | population | zipcode | size | other random stuff |
                     +-----+------------+---------+------+--------------------+ 

但那是否有太多的筑巢......?这是一个糟糕的设计吗?最顶尖的东西,countries表并没有真正做太多,我觉得你应该能够轻松地使用数据库完成复杂的事情。如果我按照我的设计进行操作,似乎在我最终得到我想要的东西之前,我会绕过一堆东西。所以,我只是好奇我是不是错了。

有没有人知道有关使用数据库的基础知识的良好入门知识?

2 个答案:

答案 0 :(得分:2)

关系数据库基于Entity-Relationship Model。如果您想掌握RDBSM背后的概念,请首先考虑熟悉该理论。特别是关系方案(表,列,通过外键的关系,......)是ERM的(或)应用程序。

要搜索的另一个关键字是Normalization。规范化和规则有不同的“等级”从一个等级转换到另一个等级,该主题与您关于表格结构的问题直接相关。一般的答案是,这取决于。通常,规范化有助于保持数据的一致性 - 但完全规范化的表结构可能会导致性能损失(例如,常用查询的许多连接)。

我建议首先进行更严格的规范化,然后检查性能。选择性非规范化可能然后有助于提升绩效。

答案 1 :(得分:2)

有许多正常形式(1NF,2NF,3NF,BCNF ......)。更高的形式=更好的粒度(没有太多的冗余,更好的关系......)。

可能是一个小细节。你有国家和州。但imho US是世界上的具体案例(其他类似案例并不多)。可能是表国家,城市就足够了(+大陆)。

设计依赖于目的(在某些情况下,较低的NF应该更有效,取决于许多因素 - 记录计数,目的等)。你不得不问几个问题。这个数据库的目的是什么?表城市是否足够,或者我也想使用村庄,所以它应该是表市政当局?等等。但你的设计几乎是好的;)