我有两个关于客户的表,第二个关于他们的账户是'Customer_Account_Information'。我们知道一个客户只能有一个帐户,所以我试图强制执行一对一关系,但我不知道mySql或mySqlyog中的过程/语法。 有没有人可以帮助我?
答案 0 :(得分:5)
您应该使用 CustomerID 在表帐户上创建外键约束表 Customers 。
然后在表帐户
中将其设为唯一列查看MySQL foreign keys - how to enforce one-to-one across tables?
您还可以将表格帐户中 PRIDARY KEY 列中的 CustomerID 用作 PRIMARY KEY PRIMARY KEY >
答案 1 :(得分:3)
这不是一个完美的解决方案,但通过一些mysql和参照完整性的经验很容易理解。
客户需要FOREIGN KEY来引用customer_account_inforamtion。由于客户中的account_id是加入表的唯一方法,因此customer_account_information中没有客户可以拥有多条记录。
在下面的示例定义中,我添加了FOREIGN KEY CONSTRAINT,这会导致客户在删除其帐户信息时被删除。您可能想要也可能不想要/需要这个。
CREATE TABLE customer_account_information (
id int(11) NOT NULL auto_increment,
some_attribute varchar(20) NOT NULL,
another_attribute varchar(30) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE customers (
id int(11) NOT NULL auto_increment,
account_id int(11) NOT NULL,
firstname varchar(30) NOT NULL,
surname varchar(30) NOT NULL,
PRIMARY KEY (id),
INDEX account_id (account_id),
CONSTRAINT account_id FOREIGN KEY (account_id) REFERENCES customer_account_information (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
customer中的account_id是引用customer_account_information中记录的外键
替代实施
重新审视两个表的设计可能是一个想法。如果每个客户真的只能拥有一个帐户,那么每个客户的所有属性都可以合并到一个表中。是的,这个业务规则可能会在未来发生变化,但最好将这项工作推迟到真正必要之前 - 不要过度设计解决方案。