Я лично стараюсь избегать создания отношений один к одному. В вашем примере у вас есть одна компания, у которой есть связь с адресом. Я бы просто поместил внешний ключ на стол компании, который официально сделал бы это отношением один к многим (даже если вы никогда не будете его использовать). Итак, я бы сначала спросил, можете ли вы принять модель, где двум компаниям разрешено иметь один и тот же адрес.
Если нет, то возможное решение для отношений один к одному состоит в том, чтобы использовать то же значение, что и первичный ключ. Так что идентификатор 1000 в таблице компании соответствует ID 1000 в таблице адресов. Многие инструменты ORM, такие как EF и Hibernate, используют этот метод, нет хорошего родного SQL, поддерживающего его способ, не получая много проблем (каскадные удаления, чтобы упомянуть один).
Лучший вариант - тот, который отвечает вашим потребностям. По моему опыту, компания может иметь несколько адресов одновременно и с течением времени. –
В варианте 1 вам потребуется сначала создать адрес, если address_id будет обязательным. Вариант 2 потребует противоположного, если требуется company_id. Или если вы добавляете ограничения и т. Д. – davejal
Третий вариант: используйте таблицу соединений с столбцами '(company_id, address_id)' и уникальное ограничение для обоих столбцов. Таким образом, ваши таблицы компаний и адресов могут оставаться неизменными, и вы связываете их через третью таблицу. Единственное ограничение гарантирует, что есть только отношения 1: 1. – knittl