只是想找点建议。
对于那些不想全部阅读的人来说:创建一个只有一个自动递增列的表是一个合理的想法吗?
细节:
我通常在数据库中管理多种语言,对象的数据和语言描述有单独的表。例如:
Table: MyObject (id auto_increment, height, width, depth. PK = id)
Table: MyObjectDescription (id, language, description. PK = id, language)
这两个id字段对应,所以我有如下数据:
MyObject
+----+--------+-------+-------+
| id | height | width | depth |
+----+--------+-------+-------+
| 1 | 10 | 10 | 20 |
| 2 | 5 | 6 | 7 |
+----+--------+-------+-------+
MyObjectDescription
+----+----------+-----------------+
| id | language | description |
+----+----------+-----------------+
| 1 | EN | First object |
| 1 | IT | Primo Oggetto |
| 2 | EN | Second object |
| 2 | IT | Secondo Oggetto |
+----+----------+-----------------+
我的问题是我有一些数据库对象,除了描述之外没有其他数据。
例如,一个类别被简单地定义为一个id和一个文本描述。我可以使用一个像MyObjectDescription表这样的表,但是我必须自己生成id,因为我不能使用auto_increment列。这也会增加竞争条件错误或表锁定问题的可能性。或者,我可以使用另一个类似MyObject的表,它只有一个自动递增列。。。
我的疑问是:使用一个只有一列的表来模拟一个序列是不是一个合理的想法?或者只是单纯的愚蠢?还要注意,我的框架包含自动将对象表连接到描述表的逻辑。
谢谢你的意见。
加雷斯
最佳答案
使用MyObject (id)
。
除非您将这些对象与数据库的其他部分隔离开来,否则您将需要单独由id
组成的PK,这样它就可以被外键引用。
即使在隔离状态下,密钥的强制执行也会证明单独的表是正确的。如果没有它,您将不得不以某种方式生成一个新的id
,同时防止并发事务为不同的对象生成相同的id
。显而易见的方法是锁定整个表(并选择MAX+1),但这会破坏可伸缩性。最好有一个单独的表,如果你在InnoDB下clusterIt,那就只有一个B树了。
关于mysql - Mysql数据库中的多语言类别标题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14625183/