gpt4 book ai didi

performance - 数据库规范化设计——单表或多表

转载 作者:行者123 更新时间:2023-12-04 03:02:30 24 4
gpt4 key购买 nike

这应该在数据库中表示为 1 个表还是 3 个表?我和我的 friend 对此有不同的看法,所以我想看看对此的一般看法。 (也许应该投票支持任何一种解决方案?)

Create Table Order
// Basic fields of the table
- ID (Primary key)
- CustomerID (integer, with a FK)
- Quantity
- ProductID (integer, with a FK)

// Then depending on user selection, either these fields need to be specified
// (could be factored out to a separate table):
{
- InternalAccountID (integer, with a FK)
- InternalCompanyID (integer, with a FK)
}

// Or these (could be factored out to a separate table):
{
- ExternalAccountNumber (free text string)
- ExternalCompanyName (free text string)
- ExtraInformation (free text string)
}

1表方法:

优点:

  • 性能(一个插入而不是两个,FK 检查,无连接)
  • 可能占用更少的空间(额外的表有开销 + 索引 + 额外的 ID 字段)
  • 一张 table 而不是三张
  • 几乎没有理由为 2+3 个字段(或什么?)拆分到新表

缺点:

  • 可为空的字段
  • 可能是额外的“类型”列(可以跳过)
  • 打破 3NF (?)

恳请优缺点以及个人意见。 :)

编辑: 我尝试通过使用与实际使用不同的实体来简化示例,因此任何关于更改模型的建议都不会真正帮助我。 IE。请关注技术方面,而不是领域模型。

最佳答案

我的意见是,如果

 // Then depending on user selection, either these fields need to be specified 
// (could be factored out to a separate table):
{
- InternalAccountID (integer, with a FK)
- InternalCompanyID (integer, with a FK)
}

// Or these (could be factored out to a separate table):
{
- ExternalAccountNumber (free text string)
- ExternalCompanyName (free text string)
- ExtraInformation (free text string)
}

总是 1:1 与订单(即,你不能有 3 个 accountID),然后将其保留为一张表。为了解决您的空问题,您可以再添加一个名为 InternalCustomer( bool 值)或 CustomerType(varChar)的列,您可以使用它们来定义内部或外部客户,以了解您应该查看两组字段中的哪一组特定客户。

由于我们不知道此数据的完整用途或整个数据库的架构,因此对此的任何回应都不能真正完全合格。

关于performance - 数据库规范化设计——单表或多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com