将新数据插入相互依赖的新表中

时间:2018-07-04 19:39:23

标签: mysql mariadb

我不知道如何用值来为数据库播种。我几乎拥有的每个表都互相引用,因此我不知道该怎么做我的插入语句。这是我针对有问题的两个表的架构:

CREATE TABLE utility_company (
    utility_company_id int(11) NOT NULL AUTO_INCREMENT,
    utility_company_name varchar(50) NOT NULL,
    utility_company_monthly_numbers_id int(11) NOT NULL,
    PRIMARY KEY (utility_company_id)
);

CREATE TABLE utility_company_monthly_numbers (
    utility_company_monthly_numbers_id int(11) NOT NULL AUTO_INCREMENT,
    utility_company_id int(11) NOT NULL,
    january_numbers int(10) NOT NULL,
    february_numbers int(10) NOT NULL,
    march_numbers int(10) NOT NULL,
    april_numbers int(10) NOT NULL,
    may_numbers int(10) NOT NULL,
    june_numbers int(10) NOT NULL,
    july_numbers int(10) NOT NULL,
    august_numbers int(10) NOT NULL,
    september_numbers int(10) NOT NULL,
    october_numbers int(10) NOT NULL,
    novemember_numbers int(10) NOT NULL,
    december_numbers int(10) NOT NULL,
    PRIMARY KEY (utility_company_monthly_numbers_id)
);

ALTER TABLE utility_company ADD FOREIGN KEY (utility_company_monthly_numbers_id) REFERENCES utility_company_monthly_numbers(utility_company_monthly_numbers_id);
ALTER TABLE utility_company_monthly_numbers ADD FOREIGN KEY (utility_company_id) REFERENCES utility_company(utility_company_id);

现在我的数据库中没有值,因此我想不出如何在不引发外键约束错误的情况下将数据插入到这些表中的一个。

我在这里可以做些什么?

所以我已经参考了这些问题,但是我却找不到答案:
Mysql: How to insert values in a table which has a foreign key
这个没有用,因为在我看来有意义的情况下,它只是说要使用两个插入语句。但是我如何防止外键失败没有答案
https://dba.stackexchange.com/questions/66778/how-to-insert-data-into-tables-which-reference-each-othermysql
而且这也没有用,因为它甚至根本没有真正回答这个问题。

2 个答案:

答案 0 :(得分:0)

我认为您应该重新考虑数据库设计。

如果您有utility_companymonthly_number,听起来好像有两个带有1个外键的表应该是可行的。

monthly_number将包含3列:

  1. utility_company的外键
  2. monthly_number
  3. 月份(可能是整数)

通过使用这种设计,它可以通过非常简单的外键结构解决您的问题。

monthly_number表中的每个记录将代表特定公司在特定月份的monthly_number

如果您需要记录多年的数字;然后,您也可以添加一个year列。

答案 1 :(得分:0)

将使用M:N关系的一种替代解决方案如下:

utility_company: utility_company_id (PK), utility_company_name
month: month_id (PK), month_name
monthly_figures: utility_company_id (composite PK), month_id (composite PK), numbers 

year列也可以轻松添加到表monthly figures中。

这样,在将任何内容添加到monthly_figures join 表之前,父表中的数据必须存在。这解决了我首先要填充哪个表问题。

或者,您可以使用传统的1:M方案,其中utility_company_id只是表monthly_figures上的FK。再次在此填充父utility_company表。