gpt4 book ai didi

mysql - 如何为以下用例设计表格?

转载 作者:行者123 更新时间:2023-11-29 23:47:55 24 4
gpt4 key购买 nike

我有两个表,widgettier。公司可以属于任何一层(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来处理数据库。我是否需要在代码中手动进行提取,例如检查层的级别,然后创建此类小部件的列表并返回它?

我希望问题很清楚,而不是一个非常基本的问题(担心投票否决)。

最佳答案

如果我理解得很清楚,你有:

tear1->tear1_widgets

tear2->tear1_widgets+tear2_widgets

tear3->tear1_widgets+tear2_widgets+tear3_widgets

在你的情况下,我会遵循分层模型。我会将上述层次结构保留在表中,以便了解实例从中继承其属性的每个实例(在您的情况下为“撕裂”)(在您的情况下为“小部件”)。因此,每次您有一个条目类型“tear3”时,您都知道它必须有 9 个小部件,并且您必须从哪里(tear1、tear2 和tear3)获取它们。

enter image description here

在上面的示例中,您可以看到您知道可以从哪个表继承您的小部件,并且您只需编写查询即可获取它们。

此外,通过特定的设计,您可以拥有具有任何您想要的小部件组合的实例(眼泪)。

*添加了图片

关于mysql - 如何为以下用例设计表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25821918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com