首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当使用外键而不是字符串存储id列表时,哪个设计更好?

当使用外键而不是字符串存储id列表时,哪个设计更好?
EN

Software Engineering用户
提问于 2012-11-16 11:14:24
回答 2查看 4.3K关注 0票数 4

我正在建立在线考试系统。我设计了桌位,QuestionGeneralExam。表GeneralExam包含有关考试的信息,如名称、描述、持续时间、.

现在我想设计表格GeneralQuestion,它将包含属于普通考试的试题ids。

目前,我有两个设计GeneralQuestion表的想法:

  1. 它将有两列: general_exam_id,question_id。
  2. 它将有两列: general_exam_id、 list_question_ids (string/text)。

我想知道哪种设计更好,或者每种设计的利弊。

我在使用Postgresql数据库。

EN

回答 2

Software Engineering用户

发布于 2012-11-16 11:34:56

第一个设计是更好的设计。

这是因为你也可以为这些问题创建外键。此外,对于解析ids列表,您没有进一步的处理。同样,在这种情况下,您可以将所有问题与通用考试查询结合起来(只有一次往返到数据库)。

在第二种设计中,您必须获得一般考试的数据库条目,解析文本,然后再次查询数据库中的问题.

票数 5
EN

Software Engineering用户

发布于 2012-11-16 11:52:52

  • 漂亮而棘手的问题

这取决于使用情况。但大多数情况下,INT键是首选的。通常,您会找到类似ID的东西来显示主键。

最终它取决于使用情况。你会有什么样的要求。因此决定。但INT是最受欢迎的。在这里,我已经解释了这两个

int的

(第一个选项)

标识字段应该是数字字段,而不是基于字符串的字段,因为

  • 节省空间( int是4个字节,字符串可以是任意数量的字节)。正因为如此,int总是表现得更好)
  • 性能原因(字符串上的匹配键比整数匹配慢)
  • 数据冗余将通过int列来解决。因为每次更新数据时都需要更新(和/或删除)外键。
  • 可以将外键上的更新/删除设置为级联。

字符串/文本的

(第二个选项)

  • 使用外键意味着要获得用户可读数据(即文本),必须进行连接。使用描述性外键,不需要进行连接来获取用户可读的数据.这包括使用SELECT读取和何时读取INSERTing或修改数据。例如,要将groupId插入到groupId中是必要的。
  • 数据库中可读的数据。这将使DBA更容易调试数据问题,因为他们可以使用查找外键引用,然后从一个表中获取数据样本并理解场景,而不必加入。

我喜欢@ like 1598390‘S评论

OP并不是问是使用int is还是字符串is。他/她询问是使用int (一对多)还是将所有问题is连接在文本列中,如"123311;121322;123455;123487“。

第一个选项是int I,第二个选项是文本/字符串。

这取决于使用情况。你会有什么样的要求。因此决定。多数情况下,首选第一种选择。在本例中,对于第一个选项,您没有进一步的处理来解析In列表。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/176070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档