Короткий ответ: не делайте этого. Вы будете хранить данные избыточно, что может привести к некоторым ошибкам - что если sudenly запись CCC с id_aaa_AAA = 1 указывает на запись BBB с id_aaa_AAA = 2?
Длинный ответ: Есть естественные ключи и ключи искусственные (технические) ...
Часто у вас есть естественные ключи, идентифицирующие объект (например, номер сотрудника, международный номер пункта и т.д.). Вот база данных компаний, сотрудников и продаж. Смелые столбцы являются естественными ключами, которые могут быть использованы в качестве первичных ключей для таблиц:
- компания (ИОСА, company_name, ...)
ИОС (Международный адресный номер) однозначно идентифицирует компанию.
- сотрудник (ИОС, employee_no, employee_name, ...)
Работник имеет номер сотрудника в их компании. Но это только уникально в сочетании с компанией. (Т.е. сотрудник с № 123 в компании А кто-то еще, чем работник # 123 в компании B конечно.)
- продаж (ИОС, employee_no, год, всего)
Сколько Через год работник продал? Запись идентифицируется по номеру ILN + для идентификации сотрудника плюс год.
Теперь многие люди предпочитают создавать базу данных с техническими идентификаторами, потому что они находят концепцию более гибкой, и часто есть сущности, у которых просто нет естественного ключа (например, адрес определяется только суммой всех его компонентов, поэтому вы бы предпочли создать искусственный идентификатор, чтобы ссылаться на него в других таблицах).Вот та же база данных с техническими идентификаторами:
- компания (company_id, ИОС, COMPANY_NAME, ...)
- сотрудник (EMPLOYEE_ID, employee_no, employee_name, company_id, ...)
- продаж (sales_id, eMPLOYEE_ID, год, общее число)
Здесь каждая таблица имеет уникальный технический идентификатор, который обычно является первичным ключом. (Конечно, у вас также было бы уникальное ограничение на company(iln)
, на employee(employee_no, company_id)
и на sales(employee_id, year)
.) Нет избыточности, поэтому ILN хранится только в столовой компании. Если вам нужна сумма продаж для компании в 2015 году, вам придется пройти через все таблицы соответственно.
С вышеупомянутыми естественными ключами вы бы этого не сделали. У вас должен быть ILN во всех таблицах, и он все равно не будет избыточным, поскольку он является частью ключа всех таблиц (т. Е. Если вы удалили ILN от сотрудника или продаж, вы не знали бы, к какому сотруднику относится запись к). Здесь вы получите доступ к таблице продаж, чтобы получить сумму продаж для компании в 2015 году.
Я считаю, что работать с естественными ключами более удобно, но для разработки такой базы данных требуется некоторое время, и часто вам все равно придется изобретать ключи, как и для адресов, как уже упоминалось. Но доступ к данным часто более прямолинейный, и согласованность данных гарантируется даже с глубокими иерархиями, которые не могут предоставить технические идентификаторы.
Таким образом, долгий ответ: решить, хотите ли вы использовать естественные ключи.
Нет, это не так. Вы рискуете противоречить друг другу. –