Внешние ключи / отношения SQL - PullRequest
0 голосов
/ 01 ноября 2010

Кратко изучив базы данных в колледже, я не работал с ними с тех пор и нарисовал небольшую пробел, поэтому мне было интересно, может ли кто-нибудь мне помочь. У меня есть база данных с именем 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-запрос, как показано ниже, я буду создавать внешние ключи:

    Изменить обложку TABLE ДОБАВИТЬ ИНОСТРАННЫЙ КЛЮЧ (CoverID) ССЫЛКИ Файл (CoverID)

Что мне нужно сделать, это создать отношения один к одному -> Один файл будет иметь одну обложку и один PDF.

Во-вторых, у меня возникают трудности с повторным рассмотрением, это оператор вставки. Любой совет о том, как я должен справиться с этим будет оценен?

Я также использую SQL Server 2008.

Ответы [ 3 ]

2 голосов
/ 01 ноября 2010

Если вам нужно сохранить текущую структуру таблицы (а @none верен - если это действительно взаимно-однозначное отношение, три таблицы не принесут пользы), вы можете получить то, что хотите, выполнив следующие действия:

  1. Определите два ограничения внешнего ключа для файла, одно для File.PDFID, ссылающегося на PDF.PDFID, и другое для File.CoverID, ссылающегося на Cover.CoverID.

  2. Определите два уникальных ограничения для таблицы файлов, одно для File.PDFID, а другое для File.CoverID.

Делитесь и наслаждайтесь.

1 голос
/ 01 ноября 2010

Истинные отношения один-к-одному выглядят так:

alt text

, который по сути является вертикально разделенной таблицей. В этом случае вы можете также рассмотреть возможность размещения всех столбцов в одной таблице.

1 голос
/ 01 ноября 2010

Если вы хотите убедиться, что отношение будет иметь отношение один к одному, то создайте одну большую таблицу.

одну таблицу, где у вас есть

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...