在大学里简单地研究了数据库,我从未与他们合作过,并且已经画了一些空白,所以我想知道是否有人可以帮助我。我有一个名为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
我刚刚在两件事上画了一个空白。
关系。我想如果我是一个SQL查询,如下面我将创建外键:
更改表格封面添加外键(CoverID)参考文件(CoverID)
我需要做的是建立一对一的关系 - >一个文件将有一个封面和一个PDF。
第二个问题是我很难再次理解插入语句。关于如何处理这些问题的任何建议都会受到赞赏吗?
我也在使用SQL Server 2008。
答案 0 :(得分:2)
如果您需要保留当前的表结构(并且@none是正确的 - 如果它实际上是一对一的关系,那么拥有三个表就没有任何好处)您可以通过执行以下操作获得所需的结果:
在File上定义两个外键约束,一个在File.PDFID上引用PDF.PDFID,另一个在File.CoverID上引用Cover.CoverID。
在File表上定义两个UNIQUE约束,一个在File.PDFID上,另一个在File.CoverID上。
分享并享受。
答案 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)
真正的一对一关系如下:
本质上是一个垂直分区的表。在这种情况下,您还可以考虑将所有列放在一个表中。