2010-11-01 6 views
0

Вкратце изучив базы данных в колледже, с тех пор я не работал с ними и нарисовал немного пробела, поэтому мне было интересно, может ли кто-нибудь помочь мне. У меня есть база данных с именем Convert, которая содержит следующие таблицы:SQL Foreign Keys/Relationships

Я только что нарисованный пустой на две вещи на самом деле.

  1. Отношения. Я думаю если SQL-запрос, например, как показано ниже я буду создавать внешние ключи:

    Alter ТАБЛИЦА Cover ADD FOREIGN KEY (CoverID) ЛИТЕРАТУРЫ Файл (CoverID)

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

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

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

+1

В чем ваш вопрос? – Victor

+0

Извинения, если не ясно. У меня возникли трудности с запоминанием того, как я создаю отношения один к одному между моими таблицами и следую за этим, как обрабатывать инструкции insert в этих таблицах. – 109221793

+2

BTW nvarchar (max) не следует использовать без разбора, но только если вы планируете иметь более 4000 символов. Это может вызвать проблемы с производительностью, если вы используете его для таких вещей, как ISBN, которые никогда не подходят к этому. Потратьте время, чтобы выяснить, насколько велика поле и не полагаться на использование nvarchar (max). – HLGEM

ответ

1

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

одна таблица, в которой у вас есть

create table 

ID int PK 

ISBN nvarchar(MAX) 

UserName nvarchar(50) 


PDFFileContent image 

PDFFileName nvarchar 

CoverFileContent image 

CoverFileName nvarchar 

то, что вы могли бы Мента в оригинальном дизайне, чтобы сделать одну таблицу, которая может содержать все 3 типа, а каждая строка отличается наличием другого значения в «мим типа», который также возможно, если клавиши удержания перехватывают таблицу для себя.

, такие как

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

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

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

  2. Определите два УНИКАЛЬНЫХ ограничения на таблицу файлов, одну на File.PDFID, а другую на File.CoverID.

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

1

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

alt text

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