Да, как вы указали, «свободные отношения», вероятно, самый простой вариант, если вы хотите отказаться от некоторых функций SQL, таких как целостность FK. Однако ради администратора запросов / администратора базы данных я бы также добавил столбец с именем таблицы, к которой относится строка. Например. Контакт (идентификатор guid), Сотрудник (идентификатор guid), а затем адрес (идентификатор независимо от , идентификатор EntityID, строка EntityType / int).
Это даст вам возможность прикрепить свой Адрес к любой таблице без ведения таблиц «многие ко многим» (где вы, возможно, добавляете проверочное ограничение для принудительного применения «один ко многим»). Кроме того, этот дизайн также позволит вам написать некоторый повторно используемый код в вашем клиенте - например,
public class Address
{
public void Attach(IEntity entity)
{
// do stuff
}
}
public interface IEntity
{
Guid ID { get; }
}
Я впервые вспомнил, как видел это в действии в схеме базы данных MS CRM.
Ваша трудность заключается в обеспечении ссылочной целостности. Это можно сделать с помощью нескольких проверочных ограничений для столбца EntityID, чтобы обеспечить существование идентификатора на основе столбца EntityType.