Asp.net 何时将列分隔到新表中

Asp.net 何时将列分隔到新表中,asp.net,sql,performance,design-patterns,Asp.net,Sql,Performance,Design Patterns,我有公司、客户、供应商等表格,这些表格都有地址信息相关列 我正在试图弄清楚是否应该创建一个新的表“addresses”,并将所有地址列分离到该表中 所有表上都有地址列很容易使用和查询,但从良好的设计角度来看,我不确定这样做是否正确,让这些相同的列在少数表上重复让我感到好奇 地址的内容对我来说并不重要,我不会在任何决策过程中检查或使用这些地址,它们纯粹是与信息相关的。目前,我正在查看5个具有地址信息的表如果您仅在它们自己的表的范围内使用这些地址,那么将它们移动到它们自己的表中可能没有实际的好处 基

我有公司、客户、供应商等表格,这些表格都有地址信息相关列

我正在试图弄清楚是否应该创建一个新的表“addresses”,并将所有地址列分离到该表中

所有表上都有地址列很容易使用和查询,但从良好的设计角度来看,我不确定这样做是否正确,让这些相同的列在少数表上重复让我感到好奇


地址的内容对我来说并不重要,我不会在任何决策过程中检查或使用这些地址,它们纯粹是与信息相关的。目前,我正在查看5个具有地址信息的表

如果您仅在它们自己的表的范围内使用这些地址,那么将它们移动到它们自己的表中可能没有实际的好处


基本上,这听起来不值得努力。

如果您只在他们自己的表的范围内使用这些地址,那么将它们移动到他们自己的表中可能没有真正的好处


基本上,听起来不值得这么做。

是的,您应该将地址分隔到它们自己的表中。知道该问是件聪明的事。这里的关键是地址的一般格式是相同的,不管是谁;客户、公司、供应商。。。它们都有相同的地址字段


使这一点有价值的是将地址视为原子元素的能力;也就是说,您可以概括所有与地址相关的功能,让它只处理一个表,而不必担心它处理多个表以及可能发生的相关架构漂移。

是的,您应该将地址分离到它们自己的表中。知道该问是件聪明的事。这里的关键是地址的一般格式是相同的,不管是谁;客户、公司、供应商。。。它们都有相同的地址字段


使这一点有价值的是将地址视为原子元素的能力;也就是说,您可以概括所有与地址相关的功能,让它只处理一个表,而不必担心它处理多个表以及可能发生的相关架构漂移。

所有设计问题的答案如下:

视情况而定

因此,基本上,在地址的情况下,这取决于每个客户是否有超过1个地址。如果您将有多个地址,请将其放入新的地址表中,并为每个地址提供一个CustomerID。创建一个通用地址表并将其映射到公司/客户/供应商表是一种过分的做法(大多数情况下,这取决于!)

在对象之间的多对多关系中映射地址通常也会有些过火(而且很危险)(如果这样做,地址在用户身上似乎会神奇地改变)


一条大规则是:保持简单

所有设计问题的答案如下:

视情况而定

因此,基本上,在地址的情况下,这取决于每个客户是否有超过1个地址。如果您将有多个地址,请将其放入新的地址表中,并为每个地址提供一个CustomerID。创建一个通用地址表并将其映射到公司/客户/供应商表是一种过分的做法(大多数情况下,这取决于!)

在对象之间的多对多关系中映射地址通常也会有些过火(而且很危险)(如果这样做,地址在用户身上似乎会神奇地改变)


一条大规则是:保持简单

如果表之间存在重叠(即,在“公司”和“供应商”表中都输入了相同的组织),并且两个表中的地址应始终相同,则可能值得将地址移到自己的表中,并从其他三个表中使用外键。这样,当它更改时,您只需在一个位置更新它


如果这三个表彼此完全独立,那么将数据移动到另一个表实际上没有什么好处,因此您不妨将其放在一边。

如果表之间存在重叠(即在公司和供应商表中都输入了相同的组织),两个表中的地址应该总是相同的,那么将地址移到它自己的表中并从其他三个表中使用外键可能是值得的。这样,当它更改时,您只需在一个位置更新它

如果这三个表彼此完全独立,那么将数据移动到另一个表并没有什么实际好处,因此您不妨将其放在一边。

这就是所谓的。是的,如果没有其他原因的话,你想把它们分开,因为如果你将来需要这样做的话,当你有代码和查询的时候,这将变得更加困难

作为一项规则,您应该始终以第三种标准形式设计数据库,即使是对于简单的应用程序也是如此(在某些情况下,出于性能或逻辑原因,您不会这样做,但从一开始,我会一直尝试将其设为第三种标准形式,然后在您知道正确的方法后学会作弊)

编辑:为了进一步说明这一点,并添加我在其他帖子上的一些评论,我非常相信在代码和重构方面从简单的设计开始,当它变得太复杂时,更深入的面向对象原则是合适的。然而,重构生产中的数据库并不是那么简单。这都是关于投资回报率。从一开始就设计一个规范化的数据库来证明不这样做太容易了。数据库设计不当的后果可能是灾难性的,在您实现这一点之前通常为时已晚

这就是所谓的。是的,如果没有其他原因,你想把他们分开,因为如果你将来需要这样做的话,当你