我必须在sql中创建一个表,其中一列存储电影的奖励。架构说它应该存储类似奥斯卡,剧本的东西。是否可以在SQL中的同一字段中存储两个值。如果是这样的数据类型是什么,你将如何查询表格呢?
答案 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)
数据表示不必与物理数据组织紧密相关。将这两个数据存储在两个单独的列中然后在显示时间进行某种连接是不是更好呢?
加入数据比分割它要痛苦得多,如果你碰巧只需要一个剧本,有一天......