Проблема редактирования GridView Если первичный ключ редактируемый (проблема дизайна) - PullRequest
1 голос
/ 20 мая 2010

Я хотел бы спросить о дизайне таблицы на основе ее возможности редактирования в виде сетки. Позволь мне объяснить. Например, у меня есть таблица с именем ProductCustomerRel.

Метод 1

CustomerCode varchar  PK
ProductCode varchar  PK
StoreCode varchar PK
Quantity int
Note text

Таким образом, комбинация CustomerCode, StoreCode и ProductCode должна быть уникальной. Запись отображается в виде сетки. Требуется, чтобы вы могли редактировать код покупателя, продукта и магазина, но при сохранении данных ограничение PK должно сохраняться.

Проблема здесь в том, что для сетки было бы естественным иметь возможность редактировать первичный ключ 3, вы можете выполнить операцию обновления вида сетки, только сначала удалив строку, а затем вставив строку с обновленными данными.

Альтернативой этому является просто обновить таблицу и добавить SeqNo и просто применить уникальное ограничение для 3 столбцов при вставке и обновлении в виде сетки.

Метод 2

SeqNo int PK
CustomerCode varchar
ProductCode varchar
StoreCode varchar
Quantity int
Note text

Мой вопрос: какой из двух методов лучше? или есть другой способ сделать это?

1 Ответ

1 голос
/ 20 мая 2010

Я бы всегда рекомендовал вам использовать метод 2. Это делает жизнь менее сложной. Термин для такого типа первичного ключа является суррогатным ключом, в отличие от естественного ключа, который основан на других полях, которые имеют другую цель, отличную от первичного ключа. Вы все еще можете применять уникальное ограничение для 3 полей внешнего ключа на уровне базы данных, не используя их в первичном ключе.

Прочитайте эту статью http://www.wingenious.com/article1.html, а затем, если вы заинтересованы в этом, вот серия статей на эту тему: http://www.wingenious.com/articles.html

...