如何使用默认数据设计数据库,这些默认数据在某些情况下可能会被覆盖

时间:2019-04-03 11:50:28

标签: sql

我正在为交付应用程序设计数据库模型。

我有一个代表单周的DeliveryWeek实体和一个代表星期几(周一至周五)的DeliveryDay实体。 还有一个DeliveryWeekDay实体,以多对多关系加入了DeliveryWeek和DeliveryDay。

还有在许多对多关系中加入DeliveryDay和DeliveryHour的DeliveryHour实体和DeliveryDayHour实体。

在大多数星期中,交货时间是相同的,但在某些情况下(假日周),交货时间可能会有所不同。

我希望能够为所有新的DeliveryWeeks修改默认交货时间,但是对于某些DeliveryWeeks,这些时间可以被覆盖。

我应该使用两个单独的表吗?例如,将DefaultDeliveryHours用作默认值,并且每次创建新的DeliveryWeek时都应基于DefaultDeliveryHour数据创建新的DeliveryHour条目吗?

2 个答案:

答案 0 :(得分:1)

我认为您可以采用两种方式:

首先没有DeliveryWeekDay:

---------------      -------------
| DeliveryWeek|      |DeliveryDay|
|-------------|      |-----------|
|Year (PK)    |      |Id (PK)    |
|Weeknr (PK)  |      |Weekday    |
|MonId        |--->  |Properties |
|TueId        |--->  -------------
|WedId        |--->
|ThuId        |--->
|FriId        |--->
---------------

通过ID,您可以定义具有不同属性的不同DeliveryDay。然后,您的代码(程序或sql触发器)应确保MonId仅在其他工作日引用星期一工作日等!

第二个变体将包含一个DeliveryWeekDay关系表-看起来像:

---------------    -----------------    -------------
| DeliveryWeek|    |DeliveryWeekDay|    |DeliveryDay|
|-------------|    |---------------|    |-----------|
|Year (PK)    |<---|Year (PK/FK)   |--->|Id (PK)    |
|Weeknr (PK)  |    |Weeknr (PK(FK) |    |Weekday    |
---------------    |DDayId (PK/FK) |    |Properties |
                   -----------------    -------------

这里,您还必须确保您的代码(程序与SQL触发器)确保每个DeliveryWeek的DeliveryWeekDay表中有5个条目(每个工作日)-除非该周内有假期。 / p>

通过两种方式,您都可以将DeliveryDay.Id = 1设置为默认值,并在特殊情况下使用其他id值。

DeliveryHour表具有相同的概念。请不要使用额外的默认表,因为它只是一个多余的表。

答案 1 :(得分:0)

如果我对您的理解正确,那么您将使用“ DeliveryWeekDay”实体作为参考。 您可以这样设计“ DeliveryWeekDay”: ID,DeliveryWeekID,DeliveryDayID,DeliveryHoursID,DefaultDayID,DefaultHoursID。

因此,如果“ DeliveryDayID”为空,则返回“ DefaultDayID”;如果“ DeliveryHoursID”为空,则可以返回“ DefaultHoursID”。假设您通过SQL查询:

SELECT ID,DeliveryWeekID,ISNULL(DeliveryDayID,DefaultDayID),ISNULL(DeliveryHoursID,DefaultHoursID)

这样,您既可以使用默认值,也可以更改某些条目的默认值。