首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这种数据库类型有名称吗?

这种数据库类型有名称吗?
EN

Stack Overflow用户
提问于 2014-01-14 23:39:15
回答 3查看 46关注 0票数 0

我试过找这个,但我真的不知道我在找什么。

基本上,我希望将匹配数据存储在数据库中,但是当我得到一个新的团队时,我需要将团队名称添加到行和列中。我还需要存储的不仅仅是分数,我可以使用数组来分离数据,但是在每个点上至少有两个字段是很方便的,这样我就可以搜索回家和离开的腿数据了。

代码语言:javascript
复制
    Dan | Bob | Joe | Tim
Dan  X  | 3-1 | 0-1 | 2-1
Bob 4-1 |  X  | 1-0 | 0-0
Joe 1-2 | 3-3 |  X  | 2-1
Tim 0-1 | 0-0 | 2-1 |  X

有没有一种方法可以用MySQL来实现,这样我就可以在一段时间内添加无限数量的团队了吗?这种类型的数据库格式有名称吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-14 23:52:06

这个名字是“多对多的关系”。

它是通过一个单独的(所谓的“连接”或“链接”)表来建模的,该表引用关系的两个端点(在本例中是相同的表)。

例如:

代码语言:javascript
复制
CREATE TABLE TEAM (
    TEAM_ID INT PRIMARY KEY
    -- Other fields...
);

CREATE TABLE SCORE (
    TEAM1_ID INT,
    TEAM2_ID INT,
    -- Other field(s) that descibe the score...
    PRIMARY KEY (TEAM1_ID, TEAM2_ID),
    FOREIGN KEY (TEAM1_ID) REFERENCES TEAM (TEAM_ID),
    FOREIGN KEY (TEAM2_ID) REFERENCES TEAM (TEAM_ID)
);
票数 2
EN

Stack Overflow用户

发布于 2014-01-14 23:45:44

你需要两张桌子:

  • 团队
  • 匹配数据

假设你的桌子是这样的:

代码语言:javascript
复制
create table teams (
    teamId int unsigned not null primary key,
    teamName varchar(50)
);

create table matchData (
    team1id int unsigned not null,
    team2id int unsigned not null,
    matchData varchar(50)  -- just an example
);

在适当的表中插入团队(不要插入重复项),然后插入匹配数据(当然,您需要确保team1id != team2id用于matchData的每一条记录)。

至于您想要显示数据的方式,则由您来设计前端接口.MySQL不提供内置工具来创建“枢轴表”,但是使用另一种语言(Java、PHP等)很容易显示矩阵。

票数 2
EN

Stack Overflow用户

发布于 2014-01-14 23:46:01

以一种简单的方式:您的表必须如下所示:

代码语言:javascript
复制
Player1  | Player 2 | scorePlayer1 | scorePlayer2
  Dan        Joe             0             1

以此类推,但您仍然可以优化表

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

https://stackoverflow.com/questions/21126363

复制
相关文章

相似问题

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