在一个字段sql中存储两个值

时间:2011-10-31 19:14:23

标签: sql postgresql

我必须在sql中创建一个表,其中一列存储电影的奖励。架构说它应该存储类似奥斯卡,剧本的东西。是否可以在SQL中的同一字段中存储两个值。如果是这样的数据类型是什么,你将如何查询表格呢?

4 个答案:

答案 0 :(得分:4)

在关系数据库的单个列中存储多个数据是一种可怕的设计模式。系统的确切设计取决于几个方面,但这是一种可能的建模方法:

CREATE TABLE Movie_Awards (
    movie_id    INT    NOT NULL,
    award_id    INT    NOT NULL,
    CONSTRAINT PK_Movie_Awards PRIMARY KEY CLUSTERED (movie_id, award_id)
)

CREATE TABLE Movies (
    movie_id         INT            NOT NULL,
    title            VARCHAR(50)    NOT NULL,
    year_released    SMALLINT       NULL,
    ...
    CONSTRAINT PK_Movies PRIMARY KEY CLUSTERED (movie_id)
)

CREATE TABLE Awards (
    award_id    INT            NOT NULL,
    ceremony_id INT            NOT NULL,
    name        VARCHAR(50)    NOT NULL,    -- Ex: Best Picture
    CONSTRAINT PK_Awards PRIMARY KEY CLUSTERED (award_id)
)

CREATE TABLE Ceremonies (
    ceremony_id    INT            NOT NULL,
    name           VARCHAR(50)    NOT NULL,    -- Ex: "Academy Awards"
    nickname       VARCHAR(50)    NULL,        -- Ex: "Oscars"
    CONSTRAINT PK_Ceremonies PRIMARY KEY CLUSTERED (ceremony_id)
)

我这里没有包含外键约束,但希望它们应该非常明显。

答案 1 :(得分:3)

一切皆有可能;这并不意味着这是一个好主意:)

更好地规范化您的结构和商店类型,如下所示:

AwardTypes:
AwardTypeID
AwardTypeName

Movies:
MovieID
MovieName

MovieAwardType:
MovieID
AwardTypeID

答案 2 :(得分:0)

您可以使用Json格式序列化数据,存储Json字符串,并在读取时进行deselialize。比使用自己的格式更安全

答案 3 :(得分:0)

数据表示不必与物理数据组织紧密相关。将这两个数据存储在两个单独的列中然后在显示时间进行某种连接是不是更好呢?

加入数据比分割它要痛苦得多,如果你碰巧只需要一个剧本,有一天......