我有许多不同的消息类型(比如说 20 种),我需要根据它们的日期和类型以下列方式选择它们
IE... WHERE date BETWEEN [fromDate] AND [toDate] AND type = [0 - 20 different types]
不同类型的消息很少有共同的列(日期是最重要的),但我总是需要“一口气”获取各种评论,按日期排序。消息具有自引用以允许线程对话。消息将始终是一种类型,并且只有一种类型。
因为我在存档中有 5.000.000 条消息,而会话中很少超过 50 条消息,所以我需要能够按日期或会话标识符有效地选择。因此,我有一个“所有消息之母”表和多个1 .. 0-1
与消息表有关系的额外表:
messages: [id, date, parent_id (nullable), ... ]
msgs_type1: [col1, col2, col3, col4, ...]
msgs_type2: [col1, col2, col3, col4, ...]
然后这是我的问题: 您通常如何指定这些类型的表之间的关系?以例如以下方式加入表格有什么(缺点)优点:
messages: [id, date, parent_id (null), **msg_type_1 (null), msg_type_2 (null)**, ...]
msgs_type1: [col1, col2, col3, col4]
msgs_type2: [col1, col2, col3, col4]
...
(消息中指定的可选关系)
messages: [id, date, **type**, parent_id (null)]
msgs_type1: [**message_id**, col1, col2, col3, col4]
msgs_type2: [**message_id**, col1, col2, col3, col4]
...
(msgs_type 表中指定的强制关系,message 中指定的查找表)
一方面,拥有 20 个可选列感觉很脏,其中(仅)一列必须具有值才能指定消息的类型。
另一方面,改为使用“类型”枚举列,并使用它来手动推断要在哪个表中查找附加信息也感觉不对 - 并且可能会在大多数 ORM 中造成很大的痛苦。
那么这本书对这些类型的结构有什么看法呢?我有 200 条不同类型的消息的那一天呢?