Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将外键与父级关联的最佳方法_Mysql - Fatal编程技术网

Mysql 将外键与父级关联的最佳方法

Mysql 将外键与父级关联的最佳方法,mysql,Mysql,我在SQL设计方面涉猎不多,所以这可能是一个微不足道的问题 我有一张players表: CREATE TABLE players( p_id INT NOT NULL PRIMARY KEY, p_name VARCHAR(150) NOT NULL ) CREATE TABLE results( f_id INT NOT NULL PRIMARY KEY, f_datetime DATETIME NOT NULL, p1_id INT NULL,

我在SQL设计方面涉猎不多,所以这可能是一个微不足道的问题

我有一张
players
表:

CREATE TABLE players(
    p_id INT NOT NULL PRIMARY KEY,
    p_name VARCHAR(150) NOT NULL 
)
CREATE TABLE results(

    f_id INT NOT NULL PRIMARY KEY,
    f_datetime DATETIME NOT NULL,
    p1_id INT NULL,
    p2_id INT NULL,
    FOREIGN KEY (p1_id) REFERENCES players(p_id) ON DELETE SET NULL ON UPDATE SET NULL,
    FOREIGN KEY (p2_id) REFERENCES players(p_id) ON DELETE SET NULL ON UPDATE SET NULL
)
我有一个
结果
表:

CREATE TABLE players(
    p_id INT NOT NULL PRIMARY KEY,
    p_name VARCHAR(150) NOT NULL 
)
CREATE TABLE results(

    f_id INT NOT NULL PRIMARY KEY,
    f_datetime DATETIME NOT NULL,
    p1_id INT NULL,
    p2_id INT NULL,
    FOREIGN KEY (p1_id) REFERENCES players(p_id) ON DELETE SET NULL ON UPDATE SET NULL,
    FOREIGN KEY (p2_id) REFERENCES players(p_id) ON DELETE SET NULL ON UPDATE SET NULL
)
当我将
INSERT
添加到
results
表中时,我正在添加
p1\u id
p2\u id
。要使其正常工作,我需要在
players
表中已经定义了这些id,并附带此id的字符串名称。以编程方式,在添加到
结果
表之前,我应该如何处理数据

  • 检查
    p\u id
    是否存在(从我的
    p1\u id
    p2\u id
    值中),如果不存在,
    将它们与附带的字符串一起插入
  • 将我的数据作为常规插入添加到结果表中

  • 还是有更传统的方法来做这些事情?可能是我不知道的一些SQL怪癖?

    如果不是从main players表中首先获得p1\u id/p2\u id值,您会从哪里获得?另外,您的FKs确保您不能在两个玩家字段中插入不存在的玩家id,因此不需要单独检查。检查p_id是否存在(从我的p1_id和p2_id值),如果不存在,请将其与附带的字符串一起插入。否。将
    p_id
    列定义为唯一(甚至主键)。然后使用insert IGNORE无条件地插入
    players
    ,而不进行任何检查-在此之后,值无论如何都会出现在表中。现在插入到
    结果中