我正在努力创建具有@ManyToMany和@ManyToOne关系的表。
我必须创建3个表,分别是人,国家/地区,性别。 人与国家的关系@ManyToMany人与人,性别@ManyToOne。
我的代码正确吗?
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';
答案 0 :(得分:0)
我会拒绝的。人是唯一的,每个人只能有一个条目。我建议性别应保留个人身份,并具有用于验证目的的外键引用(我不喜欢枚举),但对于将国家/地区保留在人格表中有些怀疑(稍后会更多)。性别不应具有身份证号,也不应具有国家/地区名称,否则将不存在性别和国家/地区的重复项。不知道您的数据是什么样的,我可能会创建一个person_country联结表,这样一个人可以与多个国家/地区建立联系(如果永远不会这样),那么亲自拿着国家/地区代码(带有外键约束)就可以了