我担心这个问题可能有点过于宽泛,但在数据库设计方面我几乎没有什么知识,所以在我提出这个问题之前,我会先解释一下我的内容。
我有一个excel文件,我将其导出到csv文件中,该文件具有以下(简化)布局:
Region, License Number in 1st Year, License Number in 2nd Year, License Number in 3rd Year...
这个想法是许可证递增,在每年年底,我都记录了每个地区当时的最高许可证数量。因为几乎有几年的区域,所以excel文件的先前布局是有道理的,因为我们将数据显示在接近于正方形的数据中,但对于数据库我相信它可能更容易处理如果我减少列的数量,我会有这个:
Region, Year, License Number
假设这是正确的(再次,我在数据库设计方面一无所知)我的问题如下:如何将所有数据转换为建议的格式,而无需手动创建(多个)条目每个地区并将所有许可证复制到相应的年份?
目标是通过简单地查看许可证号
来判断许可证颁发的年份答案 0 :(得分:1)
看起来你走在正确的轨道上。你需要{region,year}的主键。
如果您对数据库比较陌生,那么下面的步骤将是您最简单的理解和,以便您在第一次尝试时做到正确。
一个问题是你似乎没有存储岁月。如果第一年表示该Excel列中每个值的同一年 - 也就是说,第一年并不意味着2011年一行,而1999年代表另一行 - 然后,您可以使用第二个工作表轻松地将数据按摩到形状。
如果您认为自己可以轻松运行查询,则可以尝试此过程。
为您的数据创建一个表格。我在猜数据类型。
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文件。考虑更改列 命名到实际年份。
将数据插入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表中编写插入来填充其他表。