使用@ManyToMany和@ManyToOne关系创建表

时间:2018-08-14 13:31:05

标签: java mysql mariadb

我正在努力创建具有@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';

1 个答案:

答案 0 :(得分:0)

我会拒绝的。人是唯一的,每个人只能有一个条目。我建议性别应保留个人身份,并具有用于验证目的的外键引用(我不喜欢枚举),但对于将国家/地区保留在人格表中有些怀疑(稍后会更多)。性别不应具有身份证号,也不应具有国家/地区名称,否则将不存在性别和国家/地区的重复项。不知道您的数据是什么样的,我可能会创建一个person_country联结表,这样一个人可以与多个国家/地区建立联系(如果永远不会这样),那么亲自拿着国家/地区代码(带有外键约束)就可以了