Database design 数据库表设计

Database design 数据库表设计,database-design,Database Design,我为系统设计了如下表 看起来像一个包裹递送系统 例如,用户收到包裹后,邮递员应在系统中记录, 状态(历史记录表)为“已送达”,操作员为该邮递员, 当前状态(状态表)当然是“已交付的” 以上只是需要记录的基本信息,还有一些其他信息( 与发票一样,还应记录目的地。 但是有不同的服务类型,如s1和s2,对于s1,不需要它 要记录发票,但s1需要,可能s1需要一些其他信息来记录 (如终端用户的电话) 毕竟,在中转站还有其他信息需要记录, 对于不同的服务类型,信息类型也不同 我的问题是: 对于不同的服务类

我为系统设计了如下表
看起来像一个包裹递送系统

例如,用户收到包裹后,邮递员应在系统中记录,
状态(历史记录表)为“已送达”,操作员为该邮递员,
当前状态(状态表)当然是“已交付的”

以上只是需要记录的基本信息,还有一些其他信息(
与发票一样,还应记录目的地。
但是有不同的服务类型,如s1和s2,对于s1,不需要它
要记录发票,但s1需要,可能s1需要一些其他信息来记录
(如终端用户的电话)

毕竟,在中转站还有其他信息需要记录,
对于不同的服务类型,信息类型也不同

我的问题是:

  • 对于不同的服务类型,我需要声明不同的表(选项A)还是只声明
    一个大表,可以记录所有类型的所有信息(选项B)
  • 如果选择A,由于上述基本信息是必须的,如何
    可以防止在不同的表中声明重复的字段吗
    对于您的问题,我没有完整的答案,但您可以在表设计中尝试继承模式

    Service Table(service) : used to put common or not-null columns in all kinds of services.
    sv_id - internal key(PK)
    sv_data_1, sv_data_2, ...
    
    等到其他专用服务台

  • 为了方便(和性能),如果需要列出所有类型的服务,可以添加一个“sv_type”列来表示服务的确切“sub-type table”
  • 否则,只需使用“内部连接”即可获得特定类型的服务
  • 虽然我们需要使用“join”来获取特定类型服务的所有属性,但所显示的模式将为您的问题构造“无空”解决方案

    如果您关心性能问题,那么有一件积极的事情:连接特定类型服务的表是通过两个主键完成的

    关于性能的更多信息,当您需要更快的查询时,您可以使用联接的基表创建缓存表,而不必担心服务的空错误和类型错误问题

    Service Table(service) : used to put common or not-null columns in all kinds of services.
    sv_id - internal key(PK)
    sv_data_1, sv_data_2, ...
    
    Service 1 Table : dedicated attributes to service 1 and 'inherited from service'.
    sv1_id - internal key(PK) and foreign key to service(sv_id)
    sv1_data_1, sv1_data_2, ...