2012-03-20 2 views
1

Я разрабатываю систему, в которой у меня есть таблица Employees с несколькими столбцами, связанными с сотрудниками. У меня есть столбец для JobTitle и еще один столбец для Department.Первичные/внешние ключи SQL Server

В моей нынешней конструкции, JobTitle & в Department столбцы являются составными внешние ключи в Employees таблице, и они связаны с Groups таблицу, которая имеет 2 колонки составного первичного ключа (JobTitle & Department) и дополнительный столбец для работы описание.

Я не рад этой конструкции, потому что я думаю, что соединение 2 таблицы, используя 2 соединение varchar столбцов не хорошо для работы, и я думаю, что было бы лучше иметь Integer колонок (Autonumber) JobTitleID используется в качестве основных в таблице Groups и в качестве внешнего ключа в таблице Employees вместо текстового JobTitle & Department.

Но я должен был это сделать, потому что, когда я импортирую список сотрудников (Excel) в таблицу Employees, ее можно просто непосредственно сопоставить (JobTitle -> JobTitle & Department -> Department). В противном случае, если я использую целочисленный индекс в качестве первичного ключа, мне пришлось бы вручную переименовать текстовый столбец JobTitle в листе excel на число, основанное на сгенерированных ключах из таблицы Groups, чтобы импортировать.

Является ли это хорошим, чтобы мой дизайн базы данных был таким (текстовый составной ключ, связанный с текстовым составным внешним ключом)? Если нет, то если я использовал целочисленный столбец в таблице Groups в качестве первичного ключа и тот же, что и внешний ключ в таблице Employees, то как я могу импортировать список сотрудников из excel непосредственно в таблицу Employees?

Можно ли импортировать список из Excel в SQL Server таким образом, что текстуальное JobTitle из листа первенствовать будет автоматически переведен на корреспондентские JobTitleID из Groups таблицы? Это было бы лучшим решением, я могу добавить столбец JobTitleID в таблицу Groups в качестве первичного ключа и в качестве внешнего ключа в таблице Employees.

Спасибо,

ответ

2

Похоже, вы пытаетесь сделать дизайн таблицы базы данных подходящим для импорта файла excel, который не является такой хорошей идеей. Забудьте файл excel и сначала создайте свои таблицы db с правильными первичными ключами и отношениями. Это означает либо int, bigint или guids для первичных ключей. Это избавит вас от неприятностей, если вы не знаете, что ключ уникален, например, в SSN. При импорте, затем заполняйте отделы и названия заданий в соответствующие таблицы, создавая их первичные ключи. Теперь, когда они заполнены, добавьте эти ключи в файл excel, который можно импортировать в таблицу сотрудников.

Это всего лишь пример того, как я могу решить эту проблему.Неправильно использовать несколько столбцов в качестве ключа, но это определенно поможет вам избежать вреда, если вы будете использовать int, bigint или guids для ваших основных ключей.

+0

Большое спасибо за разъяснение. Я буду использовать int для первичных ключей, но затем я буду следовать предложению Адольфо Переса, чтобы импортировать данные, это быстрее и просто, чем редактировать excel вручную. –

1

Посмотрите ответ на это сообщение: how-to-use-bulk-insert...

Я хотел бы создать простую хранимую процедуру, которая импортирует данные первенствовать во временную неограниченном Промежуточную таблицу, а затем сделать вставленной в реальном таблицу, выполнив соответствующие таблицы, чтобы получить правильные внешние ключи и сбросить строки, которые не удалось импортировать в таблицу IMPORT FAIL. Просто некоторые мысли ...

+1

Большое спасибо за эту идею, я сделаю это :) –

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