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) 中,尽管这有其自身的问题(例如,无效日期或格式错误的内部版本号字符串等)。
我认为关键问题实际上是您设想运行什么类型的查询,以及您期望有多少行?
我会让预期的查询需求驱动数据库设计。