【问题标题】:create table with @ManyToMany and @ManyToOne relation使用 @ManyToMany 和 @ManyToOne 关系创建表
【发布时间】:2018-08-14 13:31:04
【问题描述】:

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

【问题讨论】:

  • 尝试使用一张表(人),其中gendercountry 只是文本字段。
  • 你的意思是改成:gender_id VARCHAR (50) and country _id VARCHAR (50)without references?
  • 是的。 (谁为评论创建了 15 个符号限制???)

标签: java mysql mariadb


【解决方案1】:

我会说不。人是唯一的,每人只能有一个条目。我建议性别应该保持个人身份并具有用于验证目的的外键参考(我不喜欢枚举),但对于在个人表中保存国家/地区有点怀疑(稍后会详细介绍)。性别不应该有个人ID,国家也不应该有 - 否则会存在重复的性别和国家。不知道您的数据是什么样的,我可能会创建一个 person_country 联结表,以便一个人可以与多个国家/地区相关联,如果永远不会出现这种情况,那么亲自持有国家/地区代码(具有外键约束)就可以了.

【讨论】:

    猜你喜欢
    • 2013-04-23
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2016-11-25
    • 2022-01-12
    相关资源
    最近更新 更多