SQL外键/关系

时间:2010-11-01 10:40:57

标签: sql sql-server-2008 insert foreign-key-relationship

在大学里简单地研究了数据库,我从未与他们合作过,并且已经画了一些空白,所以我想知道是否有人可以帮助我。我有一个名为Convert的数据库,它包含以下表格:

**File**
ID  int  PK
ISBN nvarchar(MAX)
UserName nvarchar(50)
CoverID
PDFID

**PDF**
PDFID int PK
FileContent image
MimeType nvarchar
FileName nvarchar

**Cover**
CoverID int PK
FileContent image
MimeType nvarchar
FileName nvarchar

我刚刚在两件事上画了一个空白。

  1. 关系。我如果我是一个SQL查询,如下面我将创建外键:

    更改表格封面添加外键(CoverID)参考文件(CoverID)

  2. 我需要做的是建立一对一的关系 - >一个文件将有一个封面和一个PDF。

    第二个问题是我很难再次理解插入语句。关于如何处理这些问题的任何建议都会受到赞赏吗?

    我也在使用SQL Server 2008。

3 个答案:

答案 0 :(得分:2)

如果您需要保留当前的表结构(并且@none是正确的 - 如果它实际上是一对一的关系,那么拥有三个表就没有任何好处)您可以通过执行以下操作获得所需的结果:

  1. 在File上定义两个外键约束,一个在File.PDFID上引用PDF.PDFID,另一个在File.CoverID上引用Cover.CoverID。

  2. 在File表上定义两个UNIQUE约束,一个在File.PDFID上,另一个在File.CoverID上。

  3. 分享并享受。

答案 1 :(得分:1)

如果你想确保关系具有一对一的关系,那么就制作一个大表。

你有一张桌子

create table

ID  int  PK

ISBN nvarchar(MAX)

UserName nvarchar(50)


PDFFileContent image

PDFFileName nvarchar

CoverFileContent image

CoverFileName nvarchar

您在原始设计中可能会想到的是制作一个可以包含所有3种类型的表,并且每行在“mime类型”中具有不同的值也是不同的,这也是可能的,如果保持键将表重新表达给自己

,例如

create table
ID int pk
ISBN nvarchar(max)
userName nvarchar(50)
pdfID int fk table2 id
coverID int fk table 2 id

create table2
id pk int
fileContent image
fileName nvarchar
mimetype (something)

答案 2 :(得分:1)

真正的一对一关系如下:

alt text

本质上是一个垂直分区的表。在这种情况下,您还可以考虑将所有列放在一个表中。