使用sqlite3重新设计数据库

时间:2011-07-29 23:41:29

标签: sql database sqlite database-design

我担心这个问题可能有点过于宽泛,但在数据库设计方面我几乎没有什么知识,所以在我提出这个问题之前,我会先解释一下我的内容。

我有一个excel文件,我将其导出到csv文件中,该文件具有以下(简化)布局:

Region, License Number in 1st Year, License Number in 2nd Year, License Number in 3rd Year...

这个想法是许可证递增,在每年年底,我都记录了每个地区当时的最高许可证数量。因为几乎有几年的区域,所以excel文件的先前布局是有道理的,因为我们将数据显示在接近于正方形的数据中,但对于数据库我相信它可能更容易处理如果我减少列的数量,我会有这个:

Region, Year, License Number

假设这是正确的(再次,我在数据库设计方面一无所知)我的问题如下:如何将所有数据转换为建议的格式,而无需手动创建(多个)条目每个地区并将所有许可证复制到相应的年份?

目标是通过简单地查看许可证号

来判断许可证颁发的年份

2 个答案:

答案 0 :(得分:1)

看起来你走在正确的轨道上。你需要{region,year}的主键。

如果您对数据库比较陌生,那么下面的步骤将是您最简单的理解,以便您在第一次尝试时做到正确。

一个问题是你似乎没有存储岁月。如果第一年表示该Excel列中每个值的同一年 - 也就是说,第一年并不意味着2011年一行,而1999年代表另一行 - 然后,您可以使用第二个工作表轻松地将数据按摩到形状。

  • 将两列“地区”和“第一年的许可证号”复制到 另一份工作表。
  • 如果第一年表示2005年,则在这些之间插入一列 二,复制2005年第二列的数字,和 你完成了。 (完成第1年,即。)
  • 每年重复一次。
  • 导出结果,然后将其导入表格。

如果您认为自己可以轻松运行查询,则可以尝试此过程。

  • 为您的数据创建一个表格。我在猜数据类型。

    create table your_table_name(   region varchar(35)not null,   year integer not null check(year> = 1955),   license_num integer not null check(license_num> = 0) );

  • 将电子表格导出为CSV文件。考虑更改列 命名到实际年份。

  • 导入sqlite。

将数据插入your_table_name。

insert into your_table_name (region, year, license_num)
select region_column_name, 1955, license_num_column_for_1955
from imported_table_name

请注意,每次运行查询时,您都需要调整该年份的文字年份和列名称。

答案 1 :(得分:0)

嗯..我对许可证号码不是很清楚 - 我认为你的意思是该年度该地区许可证数量的总计(int)数。

您可能还有关于每个地区的更多信息。

我还假设您没有每个单独的许可证,而是您只是维持计数。 (如果你想存储每个许可证,那么这个答案会有所不同)

所以你需要一个区域表 - 比如:

region
-------
region_id
name
other_info_possibly

然后是用于存储每个许可证的许可证表 - 就像这样

license
---------
license_id
region_id
license_issue_date
license_value
other_info_possibly

或总结可能是这样的:

license_summary
----------------
region_id
license_count
year

接下来,您需要确定操作原始数据的位置和时间:导入数据库之前或之后。

它可能会更容易......在这种情况下,你需要一个地方把它转储成'原始'可能:

raw_data
---------
region
year1_count
year2_count
-- etc

然后你可以从这个raw_data表中编写插入来填充其他表。