我有两个表,widget
和tier
。公司可以属于任何一个层(tier1,tier2,tier3),并且每个层都启用了一些小部件。对于ex - tier1启用了3个不同的小部件,第2层有3个不同的小部件,3个小部件的tier1也使6个,tier3以相同的方式启用了总共9个(3 + 3 + 3)个小部件。
Company
表有一个tier_id
作为外键。
我的小部件和层级表如下所述:
CREATE TABLE IF NOT EXISTS `mydb`.`widget` (
`id` INT NOT NULL,
`name` VARCHAR(100) NOT NULL,
`tier_id` INT NULL,
PRIMARY KEY (`id`),
INDEX `fk_widget_tier_idx` (`tier_id` ASC),
CONSTRAINT `fk_widget_tier`
FOREIGN KEY (`tier_id`)
REFERENCES `mydb`.`tier` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `mydb`.`tier` (
`id` INT NOT NULL,
`name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
现在假设公司属于第3层,我如何设计数据库的方式是当我获取tier3的小部件值时,它会抓取我所有9个小部件?如果我使用tier然后使用widgets表连接公司,我将只获得3个小部件,这些小部件包含在第3层中。如何获得其余的6个小部件(第1层和第2层)。
我使用java + hibernate来处理数据库。我是否需要在代码中手动获取此内容,如检查层的级别,然后创建此类小部件的列表并将其返回?
我希望这个问题是清楚的,而不是一个非常基本的问题(害怕downvotes)。
答案 0 :(得分:0)
如果我理解得很好,你有:
撕裂1 - > tear1_widgetstear2 - > tear1_widgets + tear2_widgets
tear3 - > tear1_widgets + tear2_widgets + tear3_widgets
在你的情况下,我会遵循分层模型。我会将上面的层次结构保存在一个表格中,以便了解每个实例(在您的情况下'撕裂')从哪些实例继承其属性(在您的情况下'小部件')。所以,每当你有一个输入类型' tear3'你知道它必须有9个小部件,你必须从那里(tear1和tear2和tear3)。
在上面的示例中,您可以看到您知道从哪个表继承您的小部件,并且您只需要编写查询来带来它们。
另外,通过特定的设计,您可以拥有实例(眼泪)以及任何您想要的小部件组合。
*添加了图片