【问题标题】:SQL Foreign Keys/RelationshipsSQL 外键/关系
【发布时间】:2010-11-02 04:51:28
【问题描述】:

在大学里短暂地学习过数据库,从那以后我就没有使用过它们,并且有点空白,所以我想知道是否有人可以帮助我。我有一个名为 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 查询我将创建外键:

    Alter TABLE Cover 添加外键 (CoverID) 参考文件 (CoverID)

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

第二个让我难以理解的事情是插入语句。任何关于我应该如何处理这些的建议将不胜感激?

我也在使用 SQL Server 2008。

【问题讨论】:

  • 你的问题到底是什么?
  • 抱歉,如果不清楚。我很难记住如何在我的表之间创建一对一的关系,以及如何处理这些表的插入语句。
  • BTW nvarchar (max) 不应随意使用,但仅当您计划超过 4000 个字符时才应使用。如果你将它用于像 ISBN 这样永远不会接近的东西,它可能会导致性能问题。花点时间弄清楚字段应该有多大,不要依赖使用 nvarchar(max)。

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


【解决方案1】:

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

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

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

分享和享受。

【讨论】:

    【解决方案2】:

    如果你想确保一个关系是一对一的关系,那就做一个大表。

    你有一张桌子

    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)
    

    【讨论】:

      【解决方案3】:

      真正的一对一关系如下所示:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多