我试过这个,但我真的不知道我在寻找什么。
基本上,我想在数据库中存储匹配数据,但是当我得到一个新团队时,我需要将团队名称添加到行和列中。我还需要存储的不仅仅是分数,我可以使用数组来分离数据,但每个点至少有两个字段是很方便的,这样我就可以搜索主页和远离腿部数据。
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做到这一点,以便随着时间的推移我可以添加无限数量的团队?这种数据库格式是否有名称?
答案 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
等等,但您仍然可以优化表格