MySQL数据库列具有多个值

时间:2011-04-12 02:59:47

标签: mysql database relational-database

我有一个问题是我的实现想法是否易于使用/写入查询。

我目前有一个包含多列的数据库。大多数列是相同的(项目,但分为项目1,项目2,项目3等)。

所以我目前在我的数据库ID,名称,项目1,项目2 .....项目10。

我想将其浓缩为ID,Name,Item。

但我想要的项目是将多个值存储为不同的行。即

ID = One  Name = Hello   Item = This
                              That
                              There

有点像它看起来的格式。这是一个好主意,我将如何做到这一点?我将不在数据库中使用任何数字,所有信息都将是静态的,永远不会改变。

我可以使用1个数据库表(并且很容易将一个ID的项目与另一个ID匹配),还是需要创建2个表并链接它们?

如果是这样,我将如何创建2个表并使它们成为关系?

关于如何实现这一点的任何想法?谢谢!

3 个答案:

答案 0 :(得分:6)

这是一种经典类型的非规范化数据库。非规范化有时会使某些操作更有效,但更常见的是导致效率低下。 (例如,如果您的一个写入查询要更改与ID关联的名称,则必须更改许多行而不是单个行。)非正规化应仅在特定原因之后 完成设计了一个完全标准化的数据库。在您的示例中,规范化数据库设计将是:

table_1:ID(密钥),名称
table_2:ID(映射到table_1.ID的外键),Item

答案 1 :(得分:4)

你在谈论一个非规范化的表,哪些SQL数据库很难处理。您的项目字段与其他字段具有多对一关系。正确的做法是制作两张桌子。典型的例子是专辑和歌曲。歌曲与专辑有多对一的关系,所以你可以像这样构建你的ables:

Table Album
album_id [Primary Key]
Title
Artist

Table Song
song_id [Primary Key]
album_id [Foreign Key album.album_id]
Title

这个示例通常是第三个表Artist,您可以将Artist字段替换为artist_id字段,该字段是Artist表的artist_id的外键。

当然,实际上歌曲,专辑和艺术家都比较复杂。一首歌可以在多张专辑中,多位艺术家可以在一张专辑中,同一首歌有多个版本,甚至有些歌曲根本没有专辑发行。

示例:

Album
album_id Title       Artist
1        White       Beatles
2        Black       Metallica

Song
song_id  album_id  Title
1        2         Enter Sandman
2        1         Back in the USSR
3        2         Sad but True
4        2         Nothing Else Matters
5        1         Helter Skelter

要查询这个,你只需要加入: SELECT * FROM Album INNER JOIN Song ON Album.album_id = Song.album_id

答案 2 :(得分:2)

在这种情况下,我不认为一个表真的有意义。相反,你可以这样做:

Main Table:
ID
Name

Item Table:
ID
Item #
Item Value
Main_ID = Main Table.ID

然后,当您进行查询时,您可以进行简单的连接