同一列的不同类型

Cas*_*sey 5 mysql relational-database

我的数据库存储版本号;但是,它们有两种格式:major.minor.build(例如 8.2.0、12.0.1)和日期(例如 YY-MM-DD)。我想到了两种解决方案:

+---+---+-----+-----------+ +-----+-----+-----+-----+ +-----+--------+
|...|...|id   |versionType| |id   |major|minor|build| |id   |date    |
|---+---+-----+-----------| |-----+-----+-----+-----| |-----+--------|
|...|...|12345|0          | |12345|0    |1    |2    | |21432|12-04-05|
|---+---+-----+-----------| +-----+-----+-----+-----+ +-----+--------+
|...|...|21432|1          |
+---+---+-----+-----------+
Run Code Online (Sandbox Code Playgroud)

或者

+---+---+-----+-----+-----+-----+--------+
|...|...|id   |major|minor|build|date    |
|---+---+-----+-----+-----+-----+--------|
|...|...|12345|0    |1    |2    |null    |
|---+---+-----+-----+-----+-----+--------+
|...|...|21432|null |null |null |12-04-05|
+---+---+-----+-----+-----+-----+--------+
Run Code Online (Sandbox Code Playgroud)

这些看起来都不是特别有效:第一个需要跨两个表的连接只是为了获得版本号,而第二个每个版本条目浪费的空间是第一个的两倍。或者,我可以将值存储在列中的一些位中,然后在客户端解释它,但我希望有一些我忽略的这种情况的标准做法。

有没有一种正确的方法可以在关系数据库中为同一“列”存储两种不同类型的数据?

小智 0

我认为这里没有灵丹妙药。如果您坚持使用单个列,您可以天真地将它们都放入 CHAR(10) 中,尽管这有其自身的问题(例如,无效日期或格式错误的内部版本号字符串等)。

我认为关键问题实际上是您设想运行什么类型的查询,以及您期望有多少行?

我会让预期的查询需求驱动数据库设计。