Mysql数据库中的多语言类别标题

时间:2013-01-31 11:56:22

标签: mysql database-design

只是寻求一些建议。

那些不想全部阅读的人的摘要:创建一个只有一个auto_increment列的表是一个合理的想法吗?

详细说明:

我通常在数据库中管理多种语言,包含对象数据的单独表格及其语言描述。例如:

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这样只有一个auto_increment列的表...

我怀疑是:使用带有单列的表只是为了模拟序列是否合理?或者它只是简单的愚蠢?还要注意我的框架包含自动将对象表连接到描述表的逻辑。

感谢您提出任何意见。

加雷

1 个答案:

答案 0 :(得分:1)

使用MyObject (id)

除非您将这些对象与数据库的其余部分隔离开来,否则您将需要仅由id 组成的PK,因此可以通过FOREIGN KEY引用它。

即使是孤立的,密钥的强制执行也可以证明单独的表是合理的。没有它,您必须以某种方式生成新的id,同时防止并发事务为不同的对象生成相同的id。这样做的明显方法是锁定整个表(并选择MAX + 1),但这会破坏可伸缩性。最好只有一个单独的表,IMO。如果你在InnoDB下cluster,那么无论如何它都只是一个B-Tree。