2016-06-14 2 views
0

У меня есть две таблицы в моей базе данных, которые я пытаюсь создать в workbench mysql.Две ссылки между двумя таблицами

1 стол - Компания

1. ID 
2. Company 
3. Company_Number 
4. Created_Date 

2 стол - Сотрудники

1. ID 
2. Employee 
3. Company_Number 
4. Created_Date 

Я хочу, чтобы создать отношения между компанией и сотрудниками. 1 Компания может иметь несколько сотрудников. Проблема в том, что я не могу сделать Company_Number в качестве первичного ключа, так как эти ключи могут дублироваться, поскольку данные будут сбрасываться ежедневно. Также один сотрудник может работать для нескольких сотрудников, но для каждой компании у него будет дополнительная строка с данными.

Есть ли способ сделать 2 отношения между этими двумя таблицами? 1 к 1 created_date - created_date & один ко многим company_number к company_number

+0

Обычный способ сделать это таблицей 'company_empoyee' с столбцами' (companyid, employeeid) '(комбинация обоих является первичным ключом этой таблицы, оба ссылаются на базовые таблицы). Я не вижу причины, почему это проблема. Если вы дамте данные (я не получил эту часть), сделайте это, используя временную таблицу. – Solarflare

+0

@Solarflare Я пытаюсь найти наиболее распространенные практики. Ну, демпинг я имею в виду, что каждый день будет список компаний и работников, работающих для всех этих компаний, добавленных в базу данных, поэтому я не знал, что такое первичный ключ, поскольку данные будут очень похожими каждый день. – Higeath

+0

Это интересный семантический вопрос. Сотрудник не является сотрудником до тех пор, пока отношения между организацией и лицом не будут завершены. Я должен согласиться с Solarflare на этом решении. Структуры, которые вы предложили, очень «закрыты» и не позволят случаю, что работника больше нет. После прочтения вашего комментария выше, у меня есть вопрос: это больше усилий по складированию? –

ответ

1

Удалить Company_Number из Employee таблицы, а затем создать новую таблицу, скажем WorksFor, в котором у вас есть 2 колонки ID_Company,ID_Employee, created_table и сделать эти 2 колонки в качестве первичного ключа

+0

Кроме того, имеется столбец статуса флага, чтобы определить, был ли сотрудник активным или завершен. – DRapp

0

внутреннее соединение на company_number дать вам отношение

select c.* e.* 
from Company as c 
INNER JOIN Employees as e on e.company_number = c.Company_number 

и вы можете создать связь на два столбца также

select c.* e.* 
from Company as c 
INNER JOIN Employees as e on 
     (e.company_number = c.Company_number and e.Created_Date = c.Created_Date) 
Смежные вопросы