хранить два значения в одном поле sql - PullRequest
0 голосов
/ 31 октября 2011

Мне нужно создать таблицу в sql, где в одном из столбцов хранятся награды за фильм.Схема говорит, что она должна хранить что-то вроде Оскара, сценарий.Можно ли хранить два значения в одном поле в SQL.Если да, то какой это будет тип данных и как вы запросите таблицу?

Ответы [ 4 ]

4 голосов
/ 31 октября 2011

Это ужасный шаблон проектирования, позволяющий хранить более одного фрагмента данных в одном столбце в реляционной базе данных. Точный дизайн вашей системы зависит от нескольких вещей, но вот один из возможных способов ее моделирования:

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

Я не включил здесь ограничения внешнего ключа, но, надеюсь, они должны быть довольно очевидными.

3 голосов
/ 31 октября 2011

Все возможно; это не значит, что это хорошая идея:)

Гораздо лучше нормализовать вашу структуру и хранить типы так:

AwardTypes:
AwardTypeID
AwardTypeName

Movies:
MovieID
MovieName

MovieAwardType:
MovieID
AwardTypeID
0 голосов
/ 31 октября 2011

Представление данных не обязательно должно быть тесно связано с организацией физических данных. Разве не было бы лучше сохранить эти две данные в двух отдельных столбцах, а затем просто выполнить некоторую конкатенацию во время отображения?

Присоединить данные гораздо сложнее, чем разделить, если вам понадобится сценарий, однажды ...

0 голосов
/ 31 октября 2011

Вы можете сериализовать свои данные в формате Json, сохранить строку Json и деселализовать при чтении.Более безопасно, чем использование собственного формата

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...