gpt4 book ai didi

database-design - 用于标记多种类型实体的数据库设计

转载 作者:行者123 更新时间:2023-12-04 19:24:50 28 4
gpt4 key购买 nike

我目前正在设计一个用于存储食谱的数据库模式。在这个数据库中,我希望能够标记不同类型的实体(成分、配方发布者、配方等)。所以一个标签有多个 n:m 关系。如果我使用“三表设计”,这将导致我拥有的每种实体类型(配方、成分、发行者)的表(交叉表)。换句话说,每次我引入一个实体时,我都必须为它添加一个交叉表。

我正在考虑创建一个具有唯一 ID 的表,所有实体都引用该表,以及标签表和“唯一 ID”表之间的 n:m 关系。这样,“唯一标识”表和标签表之间只有一个交叉表。

以防万一有些人会认为这个问题已经被问到了。我已阅读 Database Design for Tagging .那里提到了三 table 设计。

最佳答案

我会说这取决于你想如何使用标签。

我想您可以为要标记的每个实体类型创建一个额外的交集表,如果您一次只搜索一种类型的实体。换句话说,说“给我看带有‘yummy’标签的配料”是很正常的,但不清楚说“给我看带有‘yummy’标签的配料和配方发行者”是什么意思。在这种情况下,每个实体有一个单独的交集表就可以了。

但是,如果您确实需要搜索具有给定标记的所有类型的所有实体,那么使用单个“ID”表会更容易。使用您定义为主键和外键的列使所有实体表指向它:

CREATE TABLE Recipes (
recipe_id INT NOT NULL PRIMARY KEY, -- not auto-generated
FOREIGN KEY (recipe_id) REFERENCES Taggables(id)
);

此计划的唯一弱点是您无法在 Recipes 中阻止排位。和 Ingredients从指向 Taggables 中的同一行.
INSERT INTO Taggables (id) VALUES (327);
INSERT INTO Recipes (recipe_id, name) VALUES (327, 'Hollandaise sauce');
INSERT INTO Ingredients (ingr_id, name) VALUES (327, 'eggs');

您是否希望与鸡蛋相关的每个标签也适用于荷兰酱?

我只是指出了单 table 设计的这一方面。考虑到其他要求,它可能仍然是对标记建模的最佳方式。但是您应该注意从属表中 id 冲突的可能性。

关于database-design - 用于标记多种类型实体的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/302136/

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