单个或多个表
这应该在数据库中表示为1个表格还是3个表格? 我和我的朋友对此有不同的看法,所以我想看看这方面的一般看法。 (也许它应该是对任一解决方案的投票?)
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表方法:
优点:
缺点:
优点和缺点善意要求以及个人意见。 :)
编辑:我试图通过使用不同的实体来简化示例,而不是实际使用,所以任何改变模型的建议都不会真的帮到我。 请关注技术方面,而不是域模型。
我的意见是,如果
// 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个accountIDs),然后把它作为一个表。 为了照顾你的空问题,你可以添加一个名为InternalCustomer(boolean)或CustomerType(varChar)的列,你可以使用它来定义一个内部或外部客户,以知道你应该查看两组字段中的哪一个特定的客户。
由于我们不知道如何充分利用这些数据或整个数据库的模式,因此对此的任何响应都无法完全确定。
希望这是不言自明的。
如果你想避免数据重复,你应该使用2或3表解决方案。 例如,如果订单表中有External
列,则值可能存在多次。 如果数据如下所示:
ID ExternalCompanyName
1 ACME
2 ACME
3 My Company
4 ACME
现在,如果ACME将名称更改为ACME,Inc.,则必须更新许多行。 如果表格规范化,外部公司在单独的表格中,您将更新一行。 请注意,可能有一个参数将Account Number放在它自己的表中,但是我们会将其保留为极端的标准化。
它似乎不是订单和公司/账户之间的一对一关系,除非每个公司/账户只能有一个订单。 这听起来更像是一对多的关系。
现在,如果在单表环境中更新ExternalCompanyName时发生错误,并且只更新了一部分行,会发生什么情况。 你有一些行与ACME和一些行与ACME,Inc.你最终的数据不好的情况。
而且,如果这确实是一对多的关系,那么你实际上并没有节省空间。 您按顺序复制数据,而不是将其存储在另一个表中。
链接地址: http://www.djcxy.com/p/70609.html