我有一张棒球统计表,如下所示:

CREATE TABLE batting_stats(
    ab                INTEGER,
    pa                INTEGER,
    r                 INTEGER,
    h                 INTEGER,
    hr                INTEGER,
    rbi               INTEGER,
    playerID          INTEGER,
    FOREIGN KEY(playerID) REFERENCES player(playerID)
);


但是然后我得到了一张基本上完全相同的统计数据表,但是对于一个团队来说:

CREATE TABLE team_batting_stats(
    ab                INTEGER,
    pa                INTEGER,
    r                 INTEGER,
    h                 INTEGER,
    hr                INTEGER,
    rbi               INTEGER,
    teamID            INTEGER,
    FOREIGN KEY(teamID) REFERENCES team(teamID)
);


我的第一个直觉是抓取外键并泛化ID,但是仍然有一个问题,我有这两个表,并且它们不能有重叠的ID:

CREATE TABLE player(
    playerID    INTEGER PRIMARY KEY,
    firstname   TEXT,
    lastname    TEXT,
    number      INTEGER,
    teamID      INTEGER,
    FOREIGN KEY(teamID) REFERENCES team(teamID)
);

CREATE TABLE team(
    teamID      INTEGER PRIMARY KEY,
    name        TEXT,
    city        TEXT,
);


我感觉自己正在忽略一些可以解决此问题并将统计数据减少到单个表的明显问题。

最佳答案

如果要将统计信息简化为一个表,则可以添加几个关系表以将击球手或团队链接到统计信息表。

实体表:

CREATE TABLE stats(
    statsID          INTEGER primary key,
    ab                INTEGER,
    pa                INTEGER,
    r                 INTEGER,
    h                 INTEGER,
    hr                INTEGER,
    rbi               INTEGER
);

CREATE TABLE player(
    playerID    INTEGER PRIMARY KEY,
    firstname   TEXT,
    lastname    TEXT,
    number      INTEGER,
    teamID      INTEGER,
    FOREIGN KEY(teamID) REFERENCES team(teamID)
);

CREATE TABLE team(
    teamID      INTEGER PRIMARY KEY,
    name        TEXT,
    city        TEXT,
);


将击球员/球队联系到统计数据的关系表:

CREATE TABLE batting_stats(
    playerID integer not null REFERENCES player(playerID),
    statsID integer not null REFERENCES stats(statsID),
    primary key (playerID, statsID)
);

CREATE TABLE team_batting_stats(
    teamID integer not null REFERENCES team(teamID),
    statsID integer not null REFERENCES stats(statsID),
    primary key (teamID, statsID)
);

关于sql - 如何处理2个几乎相同的表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13965255/

10-13 05:00