2013-08-21 3 views
0
Table employee 
{ 
employeename //employeename is unique 
} 

Table job 
{ 
jobid,job,assignedPerson,status 
} 

assignedPerson является внешним ключом, что ссылки на employeename (сотрудника)
То, что я хочу знать, как удалить запись сотрудника, не снимая его запись из таблицы задания, т.е. I значит, что я хочу, чтобы сохранить запись работу и увидеть, какой человек был назначен на работу, даже если этот человек больше не работник ..Может ли внешний ключ быть факультативным

Table employee 
{ 
employeename 
} 

Table jobemployee 
{ 
jobid,assignedPerson 
} 

Table job 
{ 
jobid,job,status 
} 

даже если я сделаю это, мне придется удалить запись из jobemployee, если я хотите удалить запись сотрудника из таблицы «employee» и не сможете узнать, кому было поручено задание.
Пожалуйста, помогите ..

+0

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

+0

Что делать, если я удаляю ограничение внешнего ключа у assignPerson, поскольку я использую таблицу employee, чтобы показать все записи, хранящиеся в нем, и заставить пользователя выбрать запись. выбранная запись должна быть одной из таблицы сотрудников. и затем я добавляю выбранное имя employee к назначенному персоналу для конкретной работы. Таким образом, назначенное лицо должно быть одним из записи таблицы сотрудников. Так что даже если я удалю ограничение внешнего ключа, там не будет никакой проблемы. Верный? и было бы легко удалить запись сотрудника и по-прежнему сохранить назначенную запись в «таблице рабочих мест». Правильно ли я? – ash

+0

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

ответ

1

Лучшим вариантом является добавить флаг в таблицу Employee для deleted.

Обходным решением является добавление колонки assignedNonEmployee в таблицу job. Прежде чем удалить employee, вы установите столбец assignedPerson на null и скопируйте его значение в столбец assignedNonEmployee. Поскольку более поздний столбец не имеет ограничений по внешнему ключу, теперь вы можете удалить запись employee.

+0

Звучит неплохо .. Спасибо .. :) – ash

+0

Что делать, если я удаляю ограничение внешнего ключа от назначенногоПерсона, когда я использую таблицу employee, чтобы показать все записи, хранящиеся в нем, и заставить пользователя выбрать запись. выбранная запись должна быть одной из таблицы сотрудников. и затем я добавляю выбранное имя employee к назначенному персоналу для конкретной работы. Таким образом, назначенное лицо должно быть одним из записи таблицы сотрудников. Так что даже если я удалю ограничение внешнего ключа, там не будет никакой проблемы. Верный? и было бы легко удалить запись сотрудника и по-прежнему сохранить назначенную запись в «таблице рабочих мест». Правильно ли я? – ash

+0

Это кажется уместным в вашем случае. Но удаление ограничений вызывает несогласованности, такие как несоответствие между именем сотрудника в таблицах задания и сотрудника. Вот почему это не рекомендуется. – Andomar

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