如何将DataBase的字段设为数组?

时间:2010-01-14 06:26:24

标签: mysql database

我希望在数据库中有一个包含多个条目的列。是否可以将列的类型定义为数组(固定大小的数组或某些动态集合),以便它可以存储多个条目。

4 个答案:

答案 0 :(得分:2)

如果您需要将各种值一起存储在一个字段中,那么最好将它们存储为以分隔符分隔的值字符串:

+----------------------------------+
|             PRODUCTS             |
+----------+-----------------------+
| Product  | Colors                |
+----------+-----------------------+
| Notebook | blue,red,green,orange |
+----------+-----------------------+

这通常是不是你想要的东西。一般来说,想法解决方案是在表之间创建关系。例如:

+---------------+
|    PRODUCT    |
+----+----------+
| ID | Product  |
+----+----------+
| 1  | Notebook |
+---------------+

+---------------+
|    COLORS     |
+----+----------+
| ID | Color    |
+----+----------+
| 1  | Blue     |
+---------------+
| 2  | Red      |
+---------------+
| 3  | Green    |
+---------------+

+---------------------+
|    PRODUCTCOLORS    |
+-----------+---------+
| ProductID | ColorID |
+-----------+---------+
| 1         | 1       | Notebook, Blue
+-----------+---------+
| 1         | 3       | Notebook, Green
+-----------+---------+

答案 1 :(得分:1)

是的,在典型的关系设计中,您将在1个表与另一个表之间建立1:N(1对多)的关系。第一个表中的每一行代表一个集合,第二个表中的每一行都是集合中的一个元素,并引用第一个表。

逗号分隔列表,序列化或url编码的字符串也是一个很好的解决方案,因为其他答案指出...

答案 2 :(得分:0)

不,但您使用的服务器端语言是什么?

如果使用PHP,您可以使用

$serializedArray = serialize($myArray);

然后将该值插入db。要将其取消,请使用unserialize();

答案 3 :(得分:0)

这与上面的答案几乎相同(有一个分隔的字符串),但您也可以将该列中的文本另存为XML。根据您使用的数据库,这可能很容易或乏味。

如上所述,您是否明显失去了从数据库层(轻松)管理数据完整性的任何方面。