1

我对数据库概念非常陌生,目前正在学习如何设计数据库。我有一个包含以下列的表格...

这是在mysql中:

1. Names - text - unique but might change in future
2. Result - varchar - not unique
3. issues_id - int - not unique
4. comments - text - not unique
5. level - varchar - not unique
6. functionality - varchar - not unique

我不能选择上述任何列作为主键,因为它们将来可能会改变。所以我创建了一个自动增量 id 作为 names_id。我还有一个 GUI(一个 JTable),它显示这个表和用户更新 Result、issues_id 和基于 Names.Names 的评论这里是一个大文本列。我无法在 GUI 中显示 names_id,因为它在 GUI 中没有任何意义。现在,当用户在 GUI 中为 column2、3、4 提供输入后更新数据库时,我使用以下查询更新数据库,我无法在 where 子句中使用 names_id,因为 Jtable 的 row_id 与 names_id 不匹配,因为并非所有行被加载到 JTable 上。

update <tablename> set Result=<value>,issues_id=<value>,comments=<value> 
where Names=<value>;

我可以更新数据库,但我想知道是否可以在不使用 PK 的情况下更新数据库。这效率如何?代理键在这里有什么作用?

4

1 回答 1

1

where使用不引用主键的条件来更新数据库是完全可以接受的。

不过,您可能想了解索引和约束。如果多行具有相同的名称,您的查询最终可能会更新多行。如果要确保它们是唯一的,则可以在列上创建唯一约束。

主键始终在该列上创建索引。该索引使访问快速。如果 上没有索引name,则更新将需要扫描整个表以查看所有名称。您可以通过在字段上建立索引来加快速度。

于 2013-03-05T14:54:30.187 回答