2015-07-19 2 views
0

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

Благодарим за помощь!

ответ

0

Использование первичных ключей для хорошего дизайна базы данных может быть дебатом. классически в соответствии с руководством РСУБД рекомендуется создавать первичные ключи для хорошего проектирования базы данных. но теперь в течение нескольких дней наблюдается тенденция не создавать больших ограничений на стороне БД для повышения производительности, а не выполнять проверки на бизнес-уровне (не уверен, что это верно и для первичных ключей).

Теперь на ваш вопрос, Первичные ключи не являются обязательными для операций объединения, однако обязательно использовать столбцы, которые однозначно идентифицируют записи главной таблицы, в противном случае могут генерировать ложные записи.

отдел

| dept| sub_dept | dsc   | 
| CS | CS  | Computer sc.| 
| CS | IT  | Info Tech. | 

студент

| Name | age | sex | dept | sub_dept| 
| abcd | 025 | M | CS | CS  | 
| wxyz | 023 | M | CS | IT  | 

Теперь, если вы присоединитесь таблицы на sub_dept вы получите правильные результаты.

select s.name, s.age, s.sex, d.dsc from student s, department d where 

s.sub_dept = d.sub_dept

| Name | age | sex | dsc   | 
| abcd | 025 | M | Computer Sc. | 
| wxyz | 023 | M | Computer Sc. | 

, если вы присоединитесь таблицы на колонке DEPT вы получите ложные кортежи (2 дополнительные строки)

select s.name, s.age, s.sex, d.dsc from student s, department d where s.dept = d.dept 

| Name | age | sex | dsc   | 
| abcd | 025 | M | Computer Sc. | 
| wxyz | 023 | M | Computer Sc. | 


| abcd | 025 | M | Info Tech.  | 
| wxyz | 023 | M | Computer Sc. |