2012-05-05 3 views
-2

Может ли кто-нибудь предложить хороший дизайн для этих 4-х столов.Упрощение проектирования базы данных

Дизайн

Fields: DesignId (Primarykey), 
Iname..,.... 

TABLE2: InputFiles

FileId int, 
DesignId , 
FileName, 
Description, 
primary key (FileId,DesignId) 
foreign key(DesignId)... 
//This foreign key here seems to cause insert problems. 

Таблица3: InputData

DesignId int, 
TestCaseInputId, 
FileId int, 
MaterialType, 
primary key(DesignId ,TestCaseInputId,FileId) 
foreign key(FileId) references InputFiles 
foreign key(DesignId) refernces Design 

Вопросы:

  1. Я не уверен или не уверен в составных ключах в таблице 2, табл. 3.
  2. иностранных Keys.The внешние ключи, кажется, вызвать проблемы для вставки
+1

Трудно сказать, что здесь задают. Есть ли какая-то проблема, с которой вы сталкиваетесь? Просто заявить о своем дизайне и попросить людей «определить потенциальную ошибку» [не так, как мы это делаем] (http://meta.stackexchange.com/a/129787/172936) – Lix

+1

Какие 4 таблицы? Я вижу только три: Design, InputFiles и InputData. Кроме того, что такое характер вашей «проблемы с вставкой». –

+0

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

ответ

1

поговорку «внешние ключи, кажется, вызывают [так] вставки проблемы» не помогает. В чем проблема? Я бы предположил, что проблема - это порядок загрузки данных, а не ограничение внешнего ключа. Вы должны быть уверены, что идентификатор существует до вы загружаете данные с ним.

При чтении данных из файлов, я обычно использую следующую стратегию:

  1. загрузки данных в временный, все-символьный промежуточных таблиц.
  2. Подтвердите данные в промежуточных таблицах, включая внешние ключи и типы.
  3. При необходимости добавьте недостающие первичные ключи в соответствующую таблицу.
  4. Загрузите данные в финальные таблицы.

Для этого требуется больше шагов и перемещение данных. Тем не менее, я постоянно напоминаю о том, сколько реального времени сохраняется, выполняя правильную проверку входных данных.

1

Никто не может действительно сделать дизайн от так мало знаний о сценариях использования ... но

Некоторые псевдо DDL, не уверены, какой сервер вы используете ...

create table Design (
    DesignID int not null primary key, 
    Iname nvarchar(32) not null 
) 

create table InputFile (
    FileID int not null primary key, 
    DesignID int not null, -- foreign key referencing Design (DesignID) 
    FileName nvarchar(max) not null, 
    Description nvarchar(max) null 
) 

create table InputData (
    TestCaseInputID int not null primary key, 
    FileID int not null, -- Foreign key referencing InputFile (FileID) 
    MaterialType nvarchar(?) 
) 

Главное не делает первичный ключ InputFile (FileID, DesignID), если вы не собираетесь иметь более одного файла с тем же файловым идентификатором.

Наличие DesignID в InputData не является необходимым, избыточным. Если вы положите его туда, вы должны убедиться, что он остается совместимым с InputFile.DesignID. Вы все еще можете этого захотеть, если эта связь никогда не изменится. Это всего лишь намек на нормализацию.

Вы должны ввести данные в следующем порядке ...

  1. Первый Insert Design
  2. Затем вставьте файл
  3. Затем вставьте InputData

Почему InputData отдельная таблица с InputFile ?Если у вас будет несколько строк входных данных для каждого файла, тогда это имеет смысл.

Возможно, вы захотите создать идентификационные столбцы DesignID, FileID и TestCaseInputID или эквивалентные автоинкрементные идентификаторы вашего сервера. Или, если эти идентификаторы являются информацией реального мира, полученной в другом месте, вы должны вставить их.

Смежные вопросы