Отношение «Один ко многим» для изображений в SQL Server

#sql-server #tsql

#sql-сервер #tsql

Вопрос:

Я использую SQL Server. На данный момент у меня есть две таблицы в моей базе данных.

Одна таблица CmsContents представляет страницы для моего блога, вторая таблица называется CmsImagesContents , которая собирает информацию об изображениях, связанных с определенной страницей.

Отношение между двумя таблицами имеет тип One to Many , на одной странице может быть много изображений, но на одном изображении может быть только одна страница.

Я понимаю, что этот дизайн довольно прост, и я начал осознавать некоторые ограничения, вот мои вопросы:

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

  • Не могли бы вы предложить мой дизайн для этого сценария? Знаете ли вы лучшую альтернативу?

Спасибо за вашу помощь!

 CREATE TABLE [dbo].[CmsImagesContents](
   [ImageContentId] [int] IDENTITY(1,1) NOT NULL,   
   [ContentId] [int] NOT NULL,
   [RowGuid] [uniqueidentifier] NOT NULL,   
   [Title] [varchar](64) NOT NULL,
   [AltTag] [nvarchar](256) NOT NULL,
   [Caption] [nvarchar](256) NOT NULL,
   [CopyrightNote] [nvarchar](256) NOT NULL,  

   CONSTRAINT [PK_CmsImagesContents_ImageContentId]
   PRIMARY KEY CLUSTERED  ([ImageContentId] ASC)
)


ALTER TABLE [dbo].[CmsImagesContents] WITH CHECK 
 ADD CONSTRAINT [FK_CmsImagesContents_ContentId]
  FOREIGN KEY([ContentId]) REFERENCES [dbo].[CmsContents] ([ContentId]) 
  

Ответ №1:

Вы могли бы создать пересекающуюся таблицу. Если бы я называл таблицы, они были бы названы

     Content
    --------
    ContentID (PK)
    Title
    Text
    etc...

    Image
    -----
    ImageID (PK)
    Size
    Title
    etc....

    ContentImages
    --------------
    ContentImagesID (PK)
    ContentID
    ImageID
  

А теперь добавьте уникальное ограничение на ImageID в ContentImages (чтобы оно могло появиться в пересекающейся) таблице только один раз)

Теперь вы можете добавлять содержимое и изображения по своему усмотрению, а затем связывать изображение с содержимым, заполняя таблицу пересечения

Комментарии:

1. Спасибо Эндрю.. ваш подход имеет смысл в моем контексте!