我需要在数据库中存储其他表列的一些差异。我想使用单个表。
选项A:
具有4列的表:
- id - content_type(VARCHAR 255,将是:datetime、integer、varchar、text/clob ...) - old_content(CLOB/TEXT,用于内容类型的软件序列化数据) - new_content(CLOB/TEXT,用于内容类型的软件序列化数据)
选项B:
具有10多列的表:
- id - content_type(VARCHAR 255) - old_datetime(DATETIME) - new_datetime(DATETIME) - old_integer(INTEGER) - new_integer(INTEGER) - old_string(VARCHAR 255) - new_string(VARCHAR 255) - old_text(CLOB/TEXT) - new_text(CLOB/TEXT) - ...
每次只设置一个元组,其他元组将为NULL。
评估:
目前,我更喜欢选项B——因为我不是RDBMS中序列化数据的拥趸。但是我不知道数据库(在我的情况下是MySQL,也许是Postgre)是否更擅长处理(压缩)选项A与选项B相比。
我已经在其他项目(JBoss jBPM)中看到了B的方法,并且也感觉更加舒适,但我准备接受讲课。
你会使用A还是B?为什么?每个选项的权衡是什么?或者也许有C吗?
其他可能相关的事项:
- 对于当前项目,我假设非TEXT/CLOB列中将有更多数据。 - 我不想搜索非ID列,因此不需要额外的索引。
选项A:
具有4列的表:
- id - content_type(VARCHAR 255,将是:datetime、integer、varchar、text/clob ...) - old_content(CLOB/TEXT,用于内容类型的软件序列化数据) - new_content(CLOB/TEXT,用于内容类型的软件序列化数据)
选项B:
具有10多列的表:
- id - content_type(VARCHAR 255) - old_datetime(DATETIME) - new_datetime(DATETIME) - old_integer(INTEGER) - new_integer(INTEGER) - old_string(VARCHAR 255) - new_string(VARCHAR 255) - old_text(CLOB/TEXT) - new_text(CLOB/TEXT) - ...
每次只设置一个元组,其他元组将为NULL。
评估:
目前,我更喜欢选项B——因为我不是RDBMS中序列化数据的拥趸。但是我不知道数据库(在我的情况下是MySQL,也许是Postgre)是否更擅长处理(压缩)选项A与选项B相比。
我已经在其他项目(JBoss jBPM)中看到了B的方法,并且也感觉更加舒适,但我准备接受讲课。
你会使用A还是B?为什么?每个选项的权衡是什么?或者也许有C吗?
其他可能相关的事项:
- 对于当前项目,我假设非TEXT/CLOB列中将有更多数据。 - 我不想搜索非ID列,因此不需要额外的索引。