Database design 对高效数据库形状的总体感觉如何?

Database design 对高效数据库形状的总体感觉如何?,database-design,Database Design,我有一些相当大的数据集,正在使用分层数据模块pytables。在设计数据库时,我想知道创建多行、只有一个值列的表是更快,还是更常见的“矩阵”格式更快 例如: 从_cty到_cty,值 奥斯汀,纽约,9000 达拉斯,纽约,8000 纽约,达拉斯,8400 奥斯汀,达拉斯,5030 达拉斯,奥斯汀,4022 纽约,奥斯汀,8002 等等 --或-- 城市,奥斯汀,达拉斯,纽约 奥斯汀,0000,50309000 达拉斯402200008000 纽约,800284000000 第一种类型的好处可能包

我有一些相当大的数据集,正在使用分层数据模块pytables。在设计数据库时,我想知道创建多行、只有一个值列的表是更快,还是更常见的“矩阵”格式更快

例如:

从_cty到_cty,值
奥斯汀,纽约,9000
达拉斯,纽约,8000
纽约,达拉斯,8400
奥斯汀,达拉斯,5030
达拉斯,奥斯汀,4022
纽约,奥斯汀,8002
等等

--或--

城市,奥斯汀,达拉斯,纽约
奥斯汀,0000,50309000
达拉斯402200008000
纽约,800284000000


第一种类型的好处可能包括能够一次拉动单个列,由城市或城市选择。但是它添加了一个通常是列名的列。

总是从一个规范化模型开始,并记住表的主要用法

从您展示的示例数据来看,似乎有可能会添加更多的城市。如果使用第二个示例,则需要修改模式,这通常是一件坏事

如果需要以第二种格式查询数据,则始终可以提供定期刷新的视图甚至永久表。或者,如果您的主要使用模式要求您访问该格式的数据,您当然应该相应地对其进行建模


尝试、测量并进行适当调整。

始终从一个规范化模型开始,并记住表格的主要用途

从您展示的示例数据来看,似乎有可能会添加更多的城市。如果使用第二个示例,则需要修改模式,这通常是一件坏事

如果需要以第二种格式查询数据,则始终可以提供定期刷新的视图甚至永久表。或者,如果您的主要使用模式要求您访问该格式的数据,您当然应该相应地对其进行建模

试试看,测量一下,然后做适当的调整。

假设在此模型中“Austin Dallas”与“Dallas Austin”相同,您可以使用

ALTER TABLE Distance ADD CONSTRAINT chk_id CHECK (FromCityId < ToCityId);
编辑: 刚才注意到,在您的示例中,“Austin Dallas”与“Dallas Austin”不同,因此不需要检查约束和
WHERE
子句中的第二行。

假设在此模型中“Austin Dallas”与“Dallas Austin”相同,您可以使用

ALTER TABLE Distance ADD CONSTRAINT chk_id CHECK (FromCityId < ToCityId);
编辑: 刚才注意到,在您的示例中,“Austin Dallas”与“Dallas Austin”不同,因此不需要检查约束和
WHERE
子句中的第二行