我正在建立一个包含大量对的数据库,每个对都由两部分组成,一个ID和一个长字符串。每个ID都是唯一的,但是只有少数几个长字符串属性。为了节省空间,我正在考虑执行以下操作:
我有两个表,第一个表具有ID和stringID形式的对,第二个表具有stringID longString形式的对。
我想知道这种空间优化是否已经在mysql数据库中自动完成。如果是这样,那么我就不会自己实施它。如果这种空间优化不是自动完成的,那么还有更好的方法吗?关于这种类型的优化,最佳实践是什么?谢谢
要使我的问题更具体,请考虑以下原始表:
employee WorkAddress (an extremely long string)
name1 address1
name2 address1
name3 address1
name4 address1
...
name1000 address2
name1001 address2
name1002 address2
...
etc
还有新的节省空间的表:
employee addressID (much shorter than the long string)
name1 ID1
name2 ID1
...
name1000 ID2
name1001 ID2
name1002 ID2
...
etc
除了第二张表:
addressID WorkAddress
ID1 address1
ID2 address2
...
etc
注意:如果您认为此问题不适合Stackoverflow,请针对此类问题推荐其他的stackexchange网站之一。谢谢
答案 0 :(得分:1)
使用两个表的解决方案当然是正确的。不是由于任何空间考虑(如果您在(外部)空间确实很短的环境中,完全成熟的DBMS始终不是正确的工具),而是因为通过规范化来确保数据完整性。
如果该字符串值直接在具有ID的表中并且已更改,则意味着该表中具有该值的每一行都必须更改。对于其中一种写作,不仅仅是在两张表中更改一行。但更糟糕的是,如果您忘记了数据损坏的任何情况下都更新一行或某些行。