我正在努力创建带有@manytomany和@manytone关系的表。
我必须创建3个表,个人,国家,性别。人与国家关系@许多人与人,性别@许多人。
我的代码正确吗?
CREATE TABLE IF NOT EXISTS `di_person` (
`id_person` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(256) ,
`last_name` VARCHAR(256) ,
`additional_info` VARCHAR(256) ,
`gender_id` VARCHAR (50) UNIQUE REFERENCES di_gender,
`country_id` VARCHAR (50) UNIQUE REFERENCES di_country
) COLLATE='utf8_bin';
-- -----------------------------------------------------
-- Table 'gender`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `di_gender` (
id_gender INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_person INT,
name VARCHAR(50),
CONSTRAINT tb_fk FOREIGN KEY (id_person) REFERENCES di_person(id_person)
) COLLATE='utf8_bin';
-- -----------------------------------------------------
-- Table 'country`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `di_country` (
`id_country` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(256),
`id_person` VARCHAR (10) UNIQUE REFERENCES di_person
) COLLATE='utf8_bin';
1条答案
按热度按时间mbyulnm01#
我会说不。人员是唯一的,每个人只能有一个条目。我建议gender应该保留在person中,并且有一个外键引用用于验证目的(我不喜欢enum),但是对于在person表中保留country有点怀疑(稍后会有更多)。性别不应该有身份证,国家也不应该有身份证,否则性别和国家会重复存在。不知道您的数据看起来像什么,我可能会创建一个person\u country连接表,这样一个人就可以与多个国家关联如果永远不会这样,那么亲自持有国家代码(带有外键约束)就可以了。