-
база на mysql,есть таблица в которой храняться все сотрудники table1, сейчас добавили еще одну таблицу table2, в которой должна храниться дополнительная инфа о сотруднике(что мешало просто добавить поля в уже имеющуюся таблицу table1 для меня остается загадкой). Вопрос такой: как лучше сделать привязку сотрудника из table1 с его же доп.инфой из table2. Первое что пришло в голову это добавить поле в table1 с id table2, при добавлении новой записи будет сохраняться инфа как раньше + будет сохряняться инфа в table2 сразу же браться id и записываться в table1. Посоветуйте как лучше!
Заранее Благодарен.
-
Это связь "один к одному", обычно используется для экономии памяти
если добавить в таблицу table1 эти поля, то место под доп. инфу организаций у которых эти поля незполнены все равно выделяется, а при таком варианте нет, хотя добавляется другой геморой.
id table1 хранить в table2.
-
У каждой записи в table1 должно быть уникальное поле. Id_"что-то". Все дополнительные таблицы с дополнительной информацией должны иметь поле содержащее значение поля Id_"что-то" из table1. Всё прочее - геморрой.
-
перенсти одно из полей табл1 в табл2. освободившееся поле используем для ссылок на табл 2. курим. И тогда прочий гемморой у тех, кто разрабытывал ДО.
-
> (что мешало просто добавить поля в уже имеющуюся таблицу
> table1 для меня остается загадкой).
При отсутствии какой-либо информации о структуре - это загадка и для остальных.
> Первое что пришло в голову это добавить поле в table1 с
> id table2,
table1 уже лучше не трогать. Или уж наконец переименовать в Persons :)
тем более, что связь может быть не 1:1, а 1:N.
-
А как связать табл.Клиенты с табл.Ассортимент (мой, несколько тысяч наимен.) если они что-либо купят?
-
> melehov © (16.09.08 12:52) [5]
кросс-таблица
читать буквать про нормализацию структур данных
-
> [5] melehov © (16.09.08 12:52)
> если они что-либо купят?
При этом появляется новый ДОКУМЕНТ (сделка) которая помимо собственных атрибутов (дата например) ссылается на Ассортимент (что купили) и Клиенты (кто купил).
-
Отдельную таблицу для "дополнительной" информации об объектах БД вводят в двух случаях (в основном):
1) дополнительные сведения об одном основном объекте носят множественных характер. Например в Вашем случае это может быть информация о приеме, увольнении и внутренних перемещениях сотрудника, Или данные о его отпусках. Или сведения о заработной плате и т.д. Т.е. требуется реализовать связь "один-ко многим"
2) дополнительная информация весьма обширна по содержанию, включает в себя множество больших полей, в т.ч. графики и добавление ее в основную может резко увеличить ее размеры и соотвественно привести к "тормозам" клиентских приложений или/и сервера, а также посадить сеть. В этом случае связь "один-к-одному", но основная информация (список объектов с основными характеристиками - в вашем случае ФИО, подразделение, должность, оклад, дата рождения и т.д.) относительно небольшого размера и не "тормозит". Дополнительная же извлекается одиночными записями по требованию (типа "Детально" в меню), не обременительными ни для сервера, ни для сети, ни для "клиента"
-
> 2) дополнительная информация весьма обширна по содержанию
не понял, Сергей..
а что мешает запрос делать не для всех полей сразу,
-
>Vlad Oshin © (16.09.08 14:54) [9]
>а что мешает запрос делать не для всех полей сразу,
Да ничего, но таким образом из троих зайцев один останется целым ;)
-
спасибо за ответы.
решил сделать так: в одной таблице есть поле в которой хранится id записи из другой таблицы