SQL定义表列与行

时间:2018-06-21 09:04:00

标签: sql sql-server database database-design

定义行多于列是否有性能提升,反之亦然?

请考虑以下情况: 我有商店,有一些食物,价格和日期

定义表格: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

2 个答案:

答案 0 :(得分:3)

方法1是在数据库中存储数据的传统方式。它有很多优点。尤其是灵活性和查询能力。

不建议使用方法2的原因有多种:

  • “价格”列的数量是固定的,因此更改它们需要更改表的结构。
  • 计算不同价格的数字很痛苦。
  • 取消价格很痛苦。
  • 添加新价格很痛苦。

此外,即使没有值,每一行也占用(通常)为一个整数保留的4个字节。

但是,如果您恰好填充了所有值(或大多数值),则第二个方法实际上比第一个方法占用更少的空间。当列是可变长度的字符串时,这种情况更为明显,因为NULL字符串通常不使用空格。

在某些情况下,可以使方法2令人满意。

请务必注意,在SQL Server中还有其他存储列表的方法-JSON和XML。在某些情况下,这些可能是存储可变长度内容的好方法。 SQL Server不支持数组,但在支持数组的数据库中,这是另一种合理的选择。

尽管如此,方法1几乎是默认方法,如果您选择其他表示形式,则想证明改进。

答案 1 :(得分:2)

SQL数据库按数据集工作,因此,您应该从不在其他列(您的method 2)中包含同一级别的详细信息。这样做会将您的设计限制为与创建的列一样多,并使查询不必要地变得复杂。

您的Method 1具有更大的可扩展性,因为您可以添加新的Food类型,而不必更改架构或数据分析查询。