Я сталкивался с этой проблемой в каждом приложении, которое когда-либо писал. Я хотел бы получить окончательный консенсусный ответ!
Является ли это наиболее нормализованным / эффективным / правильным способом хранения контактных методов или любых других данных по этому шаблону в базе данных?
Contact { PK ContactId, ... }
ContactContactMethod {PK FK ContactId, PK FK ContactMethodId, Key, Comments }
AddressContactMethod {PK FK ContactMethodId, Line1, Line2, City, State, Zip }
EmailContactMethod {PK FK ContactMethodId, EmailAddress }
InstantMessengerContactMethod {PK FK ContactMethodId, IMClient, IMAddress }
PhoneContactMethod {PK FK ContactMethodId, ... }
WebsiteContactMethod {PK FK ContactMethodId, ... }
OtherContactMethod {PK FK ContactMethodId, ... }
Следует ли мне рассматривать поле Xml для ContactMethodData
в таблице ContactContactMethod
?
Что-то не так в адресах AddressContactMethod, EmailContactMethod и т. Д., Которые имеют одинаковую уникальность первичных ключей.
Также подумал о ключе, паре значений для контактных данных, но это было бы еще более сложной задачей, чем поле Xml.
(Рекомендации по проектированию: каждый контакт может иметь более одного или ни одного из каждого типа метода контакта, каждый с неуникальным «ключом», таким как «дом, работа, красная машина и т. Д.» И комментариями, но без других общих данных элементы между типами)