Mysql 将外键与父级关联的最佳方法
我在SQL设计方面涉猎不多,所以这可能是一个微不足道的问题 我有一张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,
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
,而不进行任何检查-在此之后,值无论如何都会出现在表中。现在插入到结果中
。