将三个SQL Server表连接在一起以显示图像

时间:2017-01-25 10:21:21

标签: c# asp.net sql-server

我正在尝试使用SQL Server表格为我的ASP.NET网站中的每个学生创建相册/集合。

这是我的表结构:

snip1

我想将图像名称存储在Student_Images文件夹中。然后每个图像将链接到照片集。每个照片集都链接到一个组。

然后我想显示每个组,与该组关联的任何照片集,以及与该集合相关联的任何图像。

我能够显示与每个学生相关的图像,但我不知道如何添加照片集'学生和图像表之间的表格。

以下是我希望它显示的方式:

snip2

以下是表格的填充方式:

snip

有人可以告诉我如何建立这种联系吗?

2 个答案:

答案 0 :(得分:0)

在Photo_Collection表中进行一些更改,在Student_ID的Photo_Collection中创建一个FK,然后您就可以显示所有学生的照片集,因为通过Student_ID,您还可以访问学生表作为Student_Images。 希望它有所帮助。

答案 1 :(得分:0)

有一个外键的想法 - 表中的一行指的是另一个表中的一行。出于多种原因,您肯定希望这样做,以确保数据完整性并记录您在网站上工作的任何人的关系。

您没有足够的信息来获取您想要的地方。相册与其中包含的图像之间没有任何关联。你需要另一张桌子。

我建议你使用不重复表名的列名。您会发现您可以在架构中更清楚地看到模式。例如,Photo_Collection.Photo_Collection_Id应该只是Photo_Collection.Id。它更简洁,很明显你在谈论哪个Id,因为你在引用该列时总是使用表名。

所以,为了让你更接近你需要的地方,我会推荐这样的东西:

create table dbo.Students
(
  ID
    int not null identity( 1, 1 )
    constraint [Students.ID.PrimaryKey]
      primary key clustered,

  Name
    nvarchar( 50 ) --> not very generous :-)
)
go
create index [Students.Name.Index] on dbo.Students( Name ) --> maybe unique?
go

create table dbo.Student_Images
(
  ID
    int not null identity( 1, 1 )
    constraint [Student_Images.ID.PrimaryKey]
      primary key clustered,

  Student_ID
    int not null
    constraint [Student_Images.to.Student]
      foreign key references dbo.Students( ID )

  Filename
    nvarchar( 250 ) null,  --> null? really? each image should have a unique file name, dont you think?

  Description
    nvarchar( 250 ) null
)
go
create index [Student_Images.to.Students.Index] on dbo.Student_Images( Student_ID )
go

create table dbo.Photo_Collection
(
  ID
    int not null identity( 1, 1 )
    constraint [Photo_Collection.ID.PrimaryKey]
      primary key clustered,

  Name
    nvarchar( 250 ) null --> null? hmmm...could be hard to use
)
go
create index [Photo_Collection.Name.Index] on dbo.Photo_Collection( Name ) --> consider unique??
go

create table dbo.Photo_Collection_Images
(
  Photo_Collection_ID
    int not null
    constraint [Photo_Collection_Images.to.Photo_Collection]
      foreign key references dbo.Photo_Collection( ID ),

  Student_Image_ID
    int not null
    constraint [Photo_Collection_Images.to.Student_Images]
      foreign key references dbo.Student_Images( ID )
)

你并没有真正描述你的团体......还有很多问题仍然没有答案。例如,Photo_Collections是学生制作的东西吗?如果是这样,Photo_Collection中可能应该有一个带有外键的Student_ID。

我添加的名为Photo_Collection_Images的表格将您的照片集与图片相关联。您需要在任何需要显示给定照片集中的所有图像的查询中包含此表。我认为这是你的主要缺失点。你会为小组做类似的事情。

另外 - 仅供参考,粘贴文字图像有点加重。考虑只是粘贴文本并将其缩进4个空格以使其正确格式化。

修改

例如,要选择学生照片集中的所有图像,您可以执行以下操作:

select
  pc.Name PhotoCollectionName,
  si.FileName FileName,
  si.Description FileDescription,
  s.Name StudentName
from
  dbo.Photo_Collection pc
  inner join
  dbo.Photo_Collection_Images pci
  on
    pc.Id = pci.Photo_Collection_ID
  inner join
  dbo.Student_Image si
  on
    pci.Student_Image_ID = si.ID
  inner join 
  dbo.Students s
  on 
    si.Student_Id = s.ID

这几乎是所有内容的基本查询。