2011-10-31 3 views
0

Je dois créer une table dans sql où l'une des colonnes stocke des récompenses pour un film. Le schéma dit qu'il devrait stocker quelque chose comme Oscar, scénario. Est-il possible de stocker deux valeurs dans le même champ en SQL. Si oui, quel type de données serait-ce et comment interrogeriez-vous la table pour cela?stocker deux valeurs dans un champ sql

+0

Vous pouvez sérialiser vos données au format JSON, stocker des chaînes JSON et les déselialiser en lisant –

Répondre

4

Il est un modèle de conception horrible à stocker plus d'un morceau de données dans un Colonne unique dans une base de données relationnelle. La conception exacte de votre système dépend de plusieurs choses, mais voici une façon possible de modéliser:

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

Je ne mentionnaient pas les clés étrangères, mais nous espérons qu'ils devrait être assez évident.

+0

+1 et il est en violation de la ** première forme normale ** de la conception de base de données ... –

3

Tout est possible; cela ne signifie pas que c'est une bonne idée :)

Il vaut beaucoup mieux pour normaliser votre structure et les types de magasin comme ceci:

AwardTypes: 
AwardTypeID 
AwardTypeName 

Movies: 
MovieID 
MovieName 

MovieAwardType: 
MovieID 
AwardTypeID 
0

Vous pouvez sérialiser vos données au format JSON, stocker chaîne JSON, et sur deselialize lis. Plus d'informations que d'utiliser votre propre format

0

La présentation de données n'a pas besoin d'être si proche de l'organisation des données phisical. Ne serait-il pas utile de stocker ces deux données dans deux colonnes séparées, puis de faire une sorte de concaténation au moment de l'affichage?

Il est beaucoup moins douloureux à se joindre à des données que de le diviser, si vous arrive d'avoir besoin juste un scénario, un jour ...

Questions connexes