Сначала я хочу иметь возможность обновлять все атрибуты / поля и не существует единого уникального ключа. У меня есть иерархия, например, каждый компьютер может быть отнесен к категории PC1 / PC2 / PC3 не может служить примером, и каждый компьютер имеет информацию о сети и программном обеспечении. Дизайн и примеры
Parent Table PC(EmpName, PCName, HostName,.... PhysicalLocation, PCType)
EMPName,PCName,PCType
вместе делают эту таблицу уникальной.
Пример записи ('XYZ', 'Work Laptop','XYZ-PC',.....,'DESK-123','PC1')
Дочерний стол PCNetwork(EmpName, PCName, HostName,IPAddr,....,PhysicalLocation,PCType)
example record1 ('XYZ', 'Work Laptop','XYZ-PC','0.0.0.0',....,'DESK-123','PC1')
example record2 ('XYZ', 'Work Laptop','XYZ-PC','0.0.0.1',....,'DESK-123','PC1')
Поскольку я хочу, чтобы все поля можно было изменять, я добавил столбец Surrogate Key Id в оба. Я использовал PC-Id в качестве таблицы FK to Network, но при вставке мне пришлось бы написать запрос, чтобы получить Id из таблицы ПК.
Есть две проблемы: если я использую естественный / составной ключ, я не могу обновлять каждую запись, поскольку обновления выполняются через Asp.Net Gridview, который не позволяет обновлять первичный ключ.
Если я использую суррогатный ключ, существует вероятность дублирования записей, и я не могу ссылаться на них или накладывать ограничение внешнего ключа на другие поля, поскольку они могут быть уникальными только путем объединения всех трех полей.
Я использую SQL Server 2008 и ASP.Net 4.0
Мне что-то точно не хватает, может ли кто-нибудь помочь или подсказать для этого хороший дизайн. Спасибо!!