gpt4 book ai didi

mysql - 数据库设计可容纳多种项目类型

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

我有以下问题:设计这部分数据库的最佳方法是什么。虽然不是直接取自项目,但下面的示例应该可以很好地说明我的问题是什么。

假设有一个网站可以购买独特/收藏品。这些项目按类别分组 - 我将每个类别放入自己的表格中。我们以两个为例:

create table books (
id bigint not null auto_increment primary key,
-- common for all items
username name(100) not null,
description varchar(100)
-- specific to books
num_pages int,
--[...]
);

create table cds (
id bigint not null auto_increment primary key,
-- common for all items
username name(100) not null,
description varchar(100)
-- specific to books
num_songs int,
--[...]
);

在我自己的项目中,每个项目类型可能有很多自己的属性,仅特定于其自身,与其他属性无关。可能还有很多项目类型。

该网站允许购买商品。为简单起见,我们假设每个商品表中的每个条目都是一个商品(数量 1),并且每个商品只能有一个买家。

现在,解决问题 - 在该网站上,我想要获得所有购买商品的总 list ,比方说在最后一个小时内。该列表显示常见字段(名称、描述、买家),并允许导航到已购买的商品以在单独的页面中查看其详细信息,该页面又显示特定于该类别的字段,以及买家(如果有)。

我最初的方法是这样的——我可以创建一个包含公共(public)列+buyer_id+buy_date的表,并在每个项目类型表(书籍、CD等)中将其PK作为FK。这样我就可以轻松地显示全局购买历史记录,并且在浏览特定商品时我可以查看它是否已被购买。该表中的 PK 也可以被视为元素的某种“指导”。但是,在浏览历史记录时,在这种情况下,当它们全部位于多个单独的表中并且我拥有的只是一张指南表时,如何返回到特定项目?我可以对每个项目 PK 保留 FK,但这种方法看起来非常奇怪且效率低下(一次只需设置一个 FK)。如果有 50 种元素类型,该表将突然容纳 50 个不同的 FK,但每次只有一组。我还可以持有一对 item_id+item_type 并根据 item_type 确定要查询哪个表,但这也感觉像是可以用更好的方式解决的问题。

我该如何处理这个问题?也许我可以对基本假设做一些事情,让事情变得更容易一些?

最佳答案

一种方法是使用一个 Items 表来枚举所有类型的项目。您购买的交易日志将引用项目。书籍、CD 和其他特定类型的表格也会引用项目。

create table Items (
id bigint not null auto_increment primary key,
-- common for all items
username name(100) not null,
description varchar(100),
-- type
itemType nvarchar(128) NOT NULL
);

create table books (
id bigint not null foreign key refers Items(id),
-- specific to books
num_pages int,
--[...]
);

关于mysql - 数据库设计可容纳多种项目类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46307178/

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