我有两个实体:
一个包和一个StockItem。
一个包可以有很多Stockitems,一个StockItem可以属于很多包,所以我认为这是一个ManyToMany关系。
但我不希望StockItems指向Packages,因为我认为这会使数据库膨胀。
因为会有很多包含更多StockItems的包。
是否可以让Package具有StockItem数组,而stockitem没有指向包的字段?
答案 0 :(得分:1)
ManyToMany
关系确实合适。你应该没有遇到任何麻烦,因为ManyToMany
使用一个处理所有外键的连接表,这意味着你的实体都不会在数据库中实际指向另一个实体。
看一下Doctrine的文档:Many-To-Many, Unidirectional
检查示例中生成的SQL查询:
CREATE TABLE User (
id INT AUTO_INCREMENT NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE users_groups (
user_id INT NOT NULL,
group_id INT NOT NULL,
PRIMARY KEY(user_id, group_id)
) ENGINE = InnoDB;
CREATE TABLE Group (
id INT AUTO_INCREMENT NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
ALTER TABLE users_groups ADD FOREIGN KEY (user_id) REFERENCES User(id);
ALTER TABLE users_groups ADD FOREIGN KEY (group_id) REFERENCES Group(id);
如您所见,ManyToMany
和User
之间创建了Group
关系,但持有外键的唯一表是联接表users_groups
。
现在由您来决定关系应该是单向还是双向(Many-To-Many, Bidirectional)。您甚至可以在关系中选择拥有方以实现代码可读性(Owning and Inverse Side on a ManyToMany association)