2011-10-31 179 views
0

我必须在sql中创建一个表,其中一列存储电影奖项。该模式表示,它应该存储像奥斯卡这样的剧本。是否可以在SQL中的同一个字段中存储两个值。如果是这样的话,你会如何查询表格呢?在一个字段中存储两个值sql

+0

您可以使用Json格式序列化数据,存储Json字符串,并在读取 –

回答

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) 
) 

我这里没有包括外键约束,但我希望他们应该是很明显的。

+0

+1时删除它,甚至违反数据库设计的**第一范式**。 –

3

任何可能的;这并不意味着这是一个好主意:)

好得多正常化您的结构和存储类型,像这样:

AwardTypes: 
AwardTypeID 
AwardTypeName 

Movies: 
MovieID 
MovieName 

MovieAwardType: 
MovieID 
AwardTypeID 
0

可以JSON格式,存储JSON字符串序列数据,并deselialize上读。比使用你自己的格式更接近

0

数据呈现不必如此紧密与物理数据组织。将这两个数据存储在两个单独的列中,然后在显示时间进行某种连接,不是无聊吗?

这少得多不好受加入数据比分割它,如果你碰巧需要只是一个电影剧本,有一天...

相关问题