我有一个包含以下数据的 MySQL 表:
TempID TempName TempString
1 aaa 34:56:23:45:67:55
2 bbb 12:56:67:45:33:99
我想要执行一项计算,需要将 TempString
拆分为各个值,例如 34、56、23...。
最好的方法是:
- 在 python 中进行字符串解析并使用其值
用于存储带有
TempID
的值的单独表ValID TempID Value 1 1 34 2 1 56 3 1 23 4 1 45 5 1 67 6 1 55 7 2 12 8 2 56 9 2 67
查询获取每个TempID的值并进行计算
请建议执行此操作的最佳方法。
最佳答案
嗯,最大的问题是,破坏这些值在语义上是否正确?
设计数据库表时,需要考虑每一列的域定义。一列中存储的每个数据项都应该是原子的(不可分解的)。这意味着存储在列中的项目是为特定列定义的域的元素。这可以称为域完整性约束(查看维基百科文章data integrity以获取更多信息)。
您可以使用简单的启发式方法来帮助做出最终决定:您是否曾经需要或将需要使用存储的字符串的一部分进行搜索,即在 where
内部条款。如果是,则将字符串分成单独的表列,否则只需使用 Python 对其进行解析。
破坏域完整性的一个简单示例是使用一个表来存储博客文章,其中单个帖子的所有标签都连接成一个大字符串并仅存储在一行中,而不是使用一个单独的表将帖子连接到标签。
可以将相对复杂的值存储到一列中的一个明显例子是存储日期。即使它由多个值组成,但如果没有有关年、月、日的所有信息,完整的日期也是不完整的(原子的)......
关于python - 字符串解析与数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24116898/