我为系统设计如下表格 它看起来像一个包裹递送系统。
例如,用户收到包裹后,邮递员应在系统中记录,
并且状态(历史表)是“交付”的,操作员是这个邮递员,
当前状态(状态表)当然是“已交付”
history table:
+---------------+--------------------------+
| Field | Desc |
+---------------+--------------------------+
| id | PRIMARY KEY |
+---------------+--------------------------+
| package_id | package_tacking_id |
+---------------+--------------------------+
| state | package_state |
+---------------+--------------------------+
| operators | operators |
+---------------+--------------------------+
| create_time| create_time |
+---------------+--------------------------+
state table:
+---------------+--------------------------+
| Field | Desc |
+---------------+--------------------------+
| id | PRIMARY KEY |
+---------------+--------------------------+
| package_id | package_tacking_id |
+---------------+--------------------------+
| state | latest_package_state |
+---------------+--------------------------+
以上只是记录的基本信息,其他一些信息(
像发票,目的地......)也应该被记录下来
但是有不同的服务类型,如s1和s2,对于s1,它不需要
记录发票但s1需要,也许s1需要一些其他信息来记录
(像最终用户的电话)。
毕竟,在提供方式站时,还有其他信息要记录,
对于不同的服务类型,信息类型是不同的。
我的问题:
答案 0 :(得分:0)
我的问题没有完整答案,但您可以在表格设计中尝试继承模式。
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, ...
等等其他专用服务表...
虽然我们需要使用“join”来获取特定类型服务的所有属性,但显示的架构会为您的问题构建“无空”解决方案。
如果您关心性能问题,那么有一件好事:使用两个主键来连接特定类型服务的表。
有关性能的更多信息,您可以在需要更快速查询时创建具有联接基表的缓存表,而不必担心服务的空错误和类型错误问题。