【问题标题】:Doctrine PHP Question教义 PHP 问题
【发布时间】:2009-10-19 20:05:39
【问题描述】:

我想知道您是否可以使用 CLI 指定表定义和数据固定装置的加载顺序。我的问题是我有两个表,每个表都有一个指向另一个的外键约束,因此需要在添加记录后添加其中一个约束。或者也许有更好的方法来做到这一点...我不是数据库专家,今天我的头很模糊。

架构:

CREATE TABLE clients (
  id INT AUTO_INCREMENT,
  name VARCHAR(255), address VARCHAR(255), 
  primary_contact_user_id INT  # References a user record in the users table
  ...
);

CREATE TABLE users (
  id INT AUTO_INCREMENT,
  username VARCHAR(255),
  client_id INT  # References a client record in the clients table
  ...
);

ALTER TABLE clients 
  ADD CONSTRAINT clients_primary_contact_user_id_users_id 
    FOREIGN KEY (primary_contact_user_id) REFERENCES users(id);

ALTER TABLE users 
  ADD CONSTRAINT users_client_id_clients_id 
    FOREIGN KEY (client_id) REFERENCES clients(id);

【问题讨论】:

    标签: php mysql database foreign-keys doctrine


    【解决方案1】:

    我也不是数据库专家,但我确实花了很多时间与他们合作。我相信循环引用实际上是不正确的。

    无论 DB 理论是否认可它,您都可以通过连接到另一个表来获得一个字段,因此这是不必要的循环引用。我建议您删除一个并更改任何查询以反映此更改。

    根据猜测,我建议您删除 primary_contact_user_id,因为这听起来像是一个可能的多对多关系,其中单个项目被选为“主要”...

    如果你觉得这个设计是必要的,你能解释一下为什么吗?

    【讨论】:

    • 感谢您的建议,这实际上是我在看了我的问题后才想到的。不,保持设计不变并不重要。
    【解决方案2】:

    将 INSERT 语句放在 CREATE TABLE 和 ALTER TABLE 语句之间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多