【问题标题】:Creating primary key based off of a primary key from another table根据另一个表的主键创建主键
【发布时间】:2015-11-30 19:47:04
【问题描述】:

我有一个看起来像这样的表(仅显示几个列作为示例),其中 ID 正在自动递增:

('client' table)

client_id | state | concerns
__________|_______|_________
    01    |   MA  |   ...
    02    |   NJ  |   ...
    03    |   MA  |   ...

我有另一个表,我想要为该表的 PK 做的是根据“客户”表中的 PK 创建它。 (客户可以是一个人,也可以是两个人)

('person' table)

    person_id | fname |     dob    | client_id
    __________|_______|____________|__________
        01A   |   MA  |  1/1/1978  |    01   
        01B   |   MA  |  2/7/1985  |    01
        02    |   NJ  |  5/17/1983 |    02
        03A   |   MA  |  3/12/1970 |    03
        03B   |   MA  |  5/23/1987 |    03

因此,如果客户端由两个人组成,它只会将字母添加到 PK 中(注意 'person_id' 如何保持为 02)。

我该怎么做呢?我不确定将其设置为 '01_1'、'01_2' 是否会比让它看起来像 '01A'、'01B' 更容易,但无论哪种方式最简单都是首选!提前谢谢!

**(我忘了说我正在使用 MySQL,如果这有什么不同的话!)

【问题讨论】:

  • 不要那样做。只需将额外的位放入其自己的字段中,您将拥有(01,1), (01,2), (02,1), etc...

标签: mysql primary-key auto-increment


【解决方案1】:

您需要创建一个引用客户端 ID 的外键,然后将其设为主键。我建议您为特定数据创建其他列。

这是一个示例,我忽略了其他列:

CREATE TABLE client (
    client_id CHAR(40),
    PRIMARY KEY(client_id),
) ENGINE=INNODB;

CREATE TABLE person (
    client_id CHAR(40),
    person CHAR(40),
    PRIMARY KEY (client_id, person),
    FOREIGN KEY (client_id) REFERENCES client(client_id)
) ENGINE=INNODB;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多