首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于简单的表,是否需要有外键

对于简单的表,是否需要有外键
EN

Stack Overflow用户
提问于 2014-04-25 19:25:05
回答 4查看 80关注 0票数 0

有一个名为RoundTable的表

它具有以下列

代码语言:javascript
复制
RoundName
RoundDescription
RoundType
RoundLogo

现在RoundType将具有像"Team“、"Individual”、"Quiz“这样的值

是否有必要再创建一个包含列的名为"RoundTypes“的表

代码语言:javascript
复制
TypeID
RoundType

并从rounds表中删除RoundType,并拥有一个"TypeID“列,该列具有指向此RoundType表的外键?

有人说,如果你把RoundType放在同一张表中,就像硬编码一样,因为将来会有很多轮类型。是不是只有2-3个轮类型,就不需要外键了??

EN

回答 4

Stack Overflow用户

发布于 2014-04-25 19:32:29

有必要吗?显然不是。无论哪种方式,SQL都工作得很好。在正确定义的数据库中,您可以对RoundType执行以下两项操作之一

  1. 有一个查找表,
  2. 有一个约束,可以检查值是否在约定的集合内(我把enums归入这个类别)

如果您有一个查找表,我建议为它设置一个自动递增的id (称为RoundTypeId)。请记住,在较大的数据库中,这样的表通常具有两个以上的列:

分布式名称名称-- when it it created

  • CreatedBy -- who created
  • CreatedAt
  • CreatedOn-它的创建位置(对于distributed systems)
  • Long name

很重要

在更高级的系统中,您可能还需要对系统进行国际化--也就是说,使其适用于多种语言。然后您将在其他表中查找实际的字符串值。

票数 4
EN

Stack Overflow用户

发布于 2014-04-25 19:30:33

是不是只有2-3个轮类型,就不需要外键了??

通常情况正好相反:如果对大多数记录(如"lastName“列)使用不同的值,则不会使用查找表。

但是,如果您知道您将有一组有限的允许/可能的值,那么通过外键引用的查找表可能是更好的解决方案。

也许阅读一下“数据库规范化”,可以从@ Wikipedia开始。

票数 2
EN

Stack Overflow用户

发布于 2014-04-25 19:33:05

实际上,如果实体之间有以下关联,则需要有单独的表,

  1. One to many
  2. 多对多

由于这些关联的优点,简单的DBMS变成了**R**DBMS (Relation.)

现在问一个简单的问题,我在圆桌中的单个记录是否有多个roundTypes?如果是这样的话..在ROUNDTable中创建一个新表并具有外键。

否则就不会。

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

https://stackoverflow.com/questions/23291691

复制
相关文章

相似问题

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