这个数据库类型有名称吗?

时间:2014-01-14 23:39:15

标签: mysql database database-design

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

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

    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做到这一点,以便随着时间的推移我可以添加无限数量的团队?这种数据库格式是否有名称?

3 个答案:

答案 0 :(得分:2)

您需要两张桌子:

  • 匹配数据

假设您的表格是这样的:

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等)。

答案 1 :(得分:2)

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

它通过一个单独的(所谓的“联结”或“链接”)表来建模,该表引用了关系的两个端点(在这种情况下恰好是同一个表)。

例如:

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 :(得分:0)

以更简单的方式:您的表格必须如下:

Player1  | Player 2 | scorePlayer1 | scorePlayer2
  Dan        Joe             0             1

等等,但您仍然可以优化表格