【发布时间】:2023-03-16 06:20:01
【问题描述】:
我有两张桌子,widget 和 tier。一家公司可以属于任何一层(tier1、tier2、tier3),并且每一层都启用了一些小部件。例如,第 1 层启用了 3 个不同的小部件,第 2 层有 3 个自己不同的小部件,第 1 层的 3 个小部件也总共有 6 个,第 3 层以同样的方式启用了总共 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 层,我该如何设计数据库,以便在获取第 3 层小部件的值时,它会获取所有 9 个小部件?如果我将公司与层和小部件表连接起来,我将只获得第 3 层中包含的 3 个小部件。如何获取其余 6 个小部件(第 1 层和第 2 层)。
我正在使用 java + hibernate 来处理数据库。我是否需要在代码中手动执行此操作,例如检查层级,然后创建此类小部件的列表并返回它?
我希望这个问题很清楚,而不是一个非常基本的问题(害怕投反对票)。
【问题讨论】:
-
您的加入条件应该是大于或小于而不是等于。