我正在玩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
表并没有真正做太多,我觉得你应该能够轻松地使用数据库完成复杂的事情。如果我按照我的设计进行操作,似乎在我最终得到我想要的东西之前,我会绕过一堆东西。所以,我只是好奇我是不是错了。
有没有人知道有关使用数据库的基础知识的良好入门知识?
答案 0 :(得分:2)
关系数据库基于Entity-Relationship Model。如果您想掌握RDBSM背后的概念,请首先考虑熟悉该理论。特别是关系方案(表,列,通过外键的关系,......)是ERM的(或)应用程序。
要搜索的另一个关键字是Normalization
。规范化和规则有不同的“等级”从一个等级转换到另一个等级,该主题与您关于表格结构的问题直接相关。一般的答案是,这取决于。通常,规范化有助于保持数据的一致性 - 但完全规范化的表结构可能会导致性能损失(例如,常用查询的许多连接)。
我建议首先进行更严格的规范化,然后检查性能。选择性非规范化可能然后有助于提升绩效。
答案 1 :(得分:2)
有许多正常形式(1NF,2NF,3NF,BCNF ......)。更高的形式=更好的粒度(没有太多的冗余,更好的关系......)。
可能是一个小细节。你有国家和州。但imho US是世界上的具体案例(其他类似案例并不多)。可能是表国家,城市就足够了(+大陆)。
设计依赖于目的(在某些情况下,较低的NF应该更有效,取决于许多因素 - 记录计数,目的等)。你不得不问几个问题。这个数据库的目的是什么?表城市是否足够,或者我也想使用村庄,所以它应该是表市政当局?等等。但你的设计几乎是好的;)