定义行多于列是否有性能提升,反之亦然?
请考虑以下情况: 我有商店,有一些食物,价格和日期
定义表格:Date dir1 = new java.util.Date(System.currentTimeMillis());
String baseDir1 = "/home/gaurav/usr/logs/ESBegin/";
String newDir1 = createDateBasedDirectory(baseDir1, dir1);
System.out.println("Exception :: " + e.getMessage());
Logger logger = Logger.getLogger("MyLog");
FileHandler fh;
try {
// This block configure the logger with handler and formatter
fh = new FileHandler(newDir1+"/exception.log");
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
// the following statement is used to log any messages
logger.info(e.getMessage());
} catch (SecurityException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
method 1
定义表格: PriceDate nchar(10)
FoodID int
FoodPrice int
method 2
答案 0 :(得分:3)
方法1是在数据库中存储数据的传统方式。它有很多优点。尤其是灵活性和查询能力。
不建议使用方法2的原因有多种:
此外,即使没有值,每一行也占用(通常)为一个整数保留的4个字节。
但是,如果您恰好填充了所有值(或大多数值),则第二个方法实际上比第一个方法占用更少的空间。当列是可变长度的字符串时,这种情况更为明显,因为NULL
字符串通常不使用空格。
在某些情况下,可以使方法2令人满意。
请务必注意,在SQL Server中还有其他存储列表的方法-JSON和XML。在某些情况下,这些可能是存储可变长度内容的好方法。 SQL Server不支持数组,但在支持数组的数据库中,这是另一种合理的选择。
尽管如此,方法1几乎是默认方法,如果您选择其他表示形式,则想证明改进。
答案 1 :(得分:2)
SQL数据库按数据集工作,因此,您应该从不在其他列(您的method 2
)中包含同一级别的详细信息。这样做会将您的设计限制为与创建的列一样多,并使查询不必要地变得复杂。
您的Method 1
具有更大的可扩展性,因为您可以添加新的Food
类型,而不必更改架构或数据分析查询。