2013-05-09 2 views
0

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

  • компания может иметь много отделов, и отдел принадлежит одной компании
  • компания может иметь много сотрудников, и работник принадлежит одной компании
  • отдела может иметь много сотрудников и сотрудник принадлежит к одному отделу
 
Company(
     ID, 
     Name, 
) 

Department(
     ID, 
     Title, 
     CompanyID (FK_Department_Company) 
     UNIQUE(Title,CompanyID) 
) 

Employee(
     ID, 
     Fname, 
     LName, 
     CompanyID, (FK_Employee_Company) 
     DepartmentID (FK_Employee_Department) 
) 

Так я обнаружил, что есть возможность вставлять неправильные данные в таблицу Employee

здесь являются выборочными значениями

company (
     25,Spar Pvt LTD, Sweden, 12345678. 
     26,Mr.Wheel Pvt Ltd, Germany, 123456789) 

Department(
     101, Manager,25 
     102, Front Desk,25 
     103, Host,26) 

Employee(81,25,103,....) 

Здесь DepartmentID 103 принадлежит CompanyID 26, но все-таки я могу вставить, Так все равно решить эту проблему (sqlserver), или мне нужно изменить дизайн, пожалуйста, дайте мне несколько предложений и идей.

С уважением,

+1

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

ответ

4

Вам не нужно CompanyID в таблице Employee

От 2 операторах выше

  • компания может иметь много отделов, и отдел принадлежат одной компании
  • Отдел может иметь много сотрудников, а работник принадлежит одному отделу

Это означает,

  • Компания может иметь много сотрудников, и работник принадлежат одной компании

Таким образом, отношения сотрудников-Company подразумевается промежуточной таблицы Department. Отдельный внешний ключ/колонка не требуется

tl; dr: Идентифицировано по этому утверждению: «... сотрудник принадлежит одной компании».

+1

Kudos. Другой способ сказать, что companyid в таблице сотрудников повторяет факт, уже сохраненный в компиляции FK от сотрудника к отделу, и FK от отдела к компании. Если тот же факт указан в базе данных более одного раза, база данных может противоречить самому себе. Проблема может быть устранена путем соблюдения принципов нормализации. –