![]() |
1
10
当我遇到这样的问题时,另一种选择是将订单作为历史表。它的功能是一样的,但是更容易理解
编辑:如果列的数量达到你喜欢的高,你可以分开它不管你喜欢。 如果使用其他选项并使用历史记录表,则应考虑使用 bitemporal 因为您可能需要处理历史数据需要更正的可能性。例如,客户将其当前地址从A更改为B,但您还必须更正当前要完成的现有订单上的地址。
|
![]() |
2
6
在设计数据结构时,要非常小心地存储正确的关系,而不是类似于正确关系的东西。如果需要维护订单的地址,那是因为地址是订单的一部分,而不是客户。而且,单价是订单的一部分,而不是产品等。 尝试这样的安排:
如果你真的需要储存 历史 例如,跟踪订单随时间的变化,那么应该使用日志或审计表,而不是事务表。 |
![]() |
3
4
通常,订单只是按订单时的状态存储信息。尤其是零件号、零件名称和价格以及客户地址和名称。这样,您就不必连接到5或6个表来获取可以存储在一个表中的信息。这不是非规范化,因为您实际上需要拥有订单时存在的信息。我认为,在order和order detail(存储单独订购的项目)表中包含这些信息的可能性较小,因为数据的意外更改也会降低风险。 您的订单表不会有数百列。由于一对多关系,您将拥有一个订单表和一个订单明细表。订单表将包括订单号customer id 9,这样您就可以搜索该客户曾经订购过的所有商品,即使名称发生了变化)、客户名称、客户地址(注意,您不需要市/自治区邮政编码等,请将地址放在一个字段中)、订单日期以及其他一些与订单直接相关的顶级字段。然后您就有了一个订单明细表,该表包含订单号、明细id、零件号、零件描述(可以是一组字段的合并,如大小、颜色等,也可以将最常见的字段分离出来)、项目编号、单位类型、单位价格、税金、总价、发货日期、状态。您为订购的每件商品输入一个条目。 |
![]() |
4
2
警告1:这里没有SQL,几乎所有你认为你知道的关于关系模型的东西都是假的。有充分的理由。 警告2:你应该好好想想,好好想想。 警告3:这本书是关于这一系列问题的解决方案应该是什么样子的,但正如导言所说,它不是关于当今任何可用的技术。
|
![]() |
5
0
我自己喜欢保持简单。我将使用两个表,一个customer表和一个customer history表。如果您在历史表中有键(如customerId),则没有理由创建联接表,对该键进行选择将给出所有记录。
所以我的看起来像这样:
DataOfChagne字段是将customer表(从此记录中的值)更改为CustomerTable中值的较新记录中的值的日期 您的orders表只需要一个CustomerID,如果您需要在下单时查找客户信息,那么这是一个简单的选择。 |
![]() |
6
0
你想要的是所谓的数据仓库。由于数据仓库是OLAP而不是OLTP,因此建议您根据需要拥有尽可能多的列,以实现您的目标。就你而言
这是个好的开始。 |
![]() |
7
0
我们的工资系统使用 生效日期 在许多桌子上。ADDRESSES表的键是EMPLID和EFFDT。这使我们能够跟踪员工地址的每次更改。您可以使用相同的逻辑来跟踪客户的历史地址。您的查询只需要包含一个子句,将订单日期与订单时生效的客户地址日期进行比较。例如
目标是在客户中选择生效日期在订单日期当天或之前的最近一行。同样的策略也可以用来保存产品价格的历史信息。 |
![]() |
Michael Samuel · MYSQL在以下情况下自动创建索引 6 年前 |
![]() |
Patricia Rozario · 数据库设计确保一对一关系 6 年前 |
![]() |
dryhay · MySQL“多对多”关系错误 6 年前 |
![]() |
L. Fox · 我在这里用的是什么样的Laravel雄辩的关系 7 年前 |
![]() |
Geoff Harper · 我应该如何构建关系松散的SQL db 7 年前 |
![]() |
waroxx · SQL—当多个表具有相同的列时,最好怎么做 7 年前 |
![]() |
Lumpi01 · SQL 2不同的注释类型-最佳解决方案? 7 年前 |
![]() |
Hayreddin Tüzel · 预约系统数据库建模[关闭] 7 年前 |