我正在尝试使用SQL Server表格为我的ASP.NET网站中的每个学生创建相册/集合。
这是我的表结构:
我想将图像名称存储在Student_Images文件夹中。然后每个图像将链接到照片集。每个照片集都链接到一个组。
然后我想显示每个组,与该组关联的任何照片集,以及与该集合相关联的任何图像。
我能够显示与每个学生相关的图像,但我不知道如何添加照片集'学生和图像表之间的表格。
以下是我希望它显示的方式:
以下是表格的填充方式:
有人可以告诉我如何建立这种联系吗?
答案 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
这几乎是所有内容的基本查询。