我正在为交付应用程序设计数据库模型。
我有一个代表单周的DeliveryWeek实体和一个代表星期几(周一至周五)的DeliveryDay实体。 还有一个DeliveryWeekDay实体,以多对多关系加入了DeliveryWeek和DeliveryDay。
还有在许多对多关系中加入DeliveryDay和DeliveryHour的DeliveryHour实体和DeliveryDayHour实体。
在大多数星期中,交货时间是相同的,但在某些情况下(假日周),交货时间可能会有所不同。
我希望能够为所有新的DeliveryWeeks修改默认交货时间,但是对于某些DeliveryWeeks,这些时间可以被覆盖。
我应该使用两个单独的表吗?例如,将DefaultDeliveryHours用作默认值,并且每次创建新的DeliveryWeek时都应基于DefaultDeliveryHour数据创建新的DeliveryHour条目吗?
答案 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)
这样,您既可以使用默认值,也可以更改某些条目的默认值。