只是想找点建议。
对于那些不想全部阅读的人来说:创建一个只有一个自动递增列的表是一个合理的想法吗?
细节:
我通常在数据库中管理多种语言,对象的数据和语言描述有单独的表。例如:

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/

10-09 00:44
查看更多