相关疑难解决方法(0)

我应该如何设计友谊关系表?

如果A是 的朋友B,那么我应该存储两个值ABBA,还是一个就足够了?两种方法的优缺点是什么。

这是我的观察:

  • 如果我同时保留两个,那么在收到朋友的请求时我必须更新两个。
  • 如果我不保留两者,那么我发现在必须对JOIN这张表进行多次处理时会很困难。

目前,我以一种方式保持这种关系。

在此处输入图片说明

那么在这种情况下我应该怎么做呢?有什么建议吗?

mysql relational-theory

35
推荐指数
4
解决办法
4万
查看次数

为具有多个多对多关系的视频游戏业务领域设计数据库

我对数据库设计比较陌生,我决定制作自己的假设数据库以进行实践。但是,我无法对其进行建模和规范化,因为我认为存在许多多对多 (M:N) 关系。

一般场景描述

该数据库旨在保留有关在塞尔达系列中工作过的各种人物的数据。我想跟踪的控制台(S) ,一个游戏可以玩上,员工是曾在部分游戏的发展,乔布斯员工有(很多员工在不同的工作职位在多个游戏等)

商业规则

  • 多个员工可以在多个游戏上工作。
  • 多个游戏可以在同一个控制台上
  • 多个控制台可以是同一个游戏的平台。
  • 多个员工可以拥有相同的Job
  • 一个Employee可以有多个Jobs
  • 一个游戏可以有多个员工
  • 一个游戏在它的开发过程中可以有多种类型的工作
  • 多个游戏可以附加相同类型的工作
  • 一个控制台可以有多个人在处理它。
  • 一个可以在多个控制台上工作。

属性名称和样本值

  • Employee Name,可以分为First …

normalization database-design denormalization many-to-many

16
推荐指数
1
解决办法
4905
查看次数

关于基本设计的建议,首次数据库设计

我正在学习成为 Java 开发人员的课程。

该课程涉及使用数据库,但不幸的是,我们从未真正设计过任何数据库。

大多数情况下,我们会获得预制的数据库,并且必须在其上实现代码以插入、更新、读取或删除数据。

但是当我的最终测试到来时,我很可能会制作涉及数据库的东西,因此我想尝试设计一些较小的东西来掌握设计的窍门,因为我注意到一个好的数据库设计在以下情况下会产生很大的不同编写代码以使用它。

我希望这些类型的问题在这里是允许的,而且不会太宽泛。


这是我为一些简单的东西而制作的小设计clubsmembers带有addressesphonenumbers

  • 会有多个俱乐部。
  • 每个俱乐部都会有多个成员(显而易见)
  • 一个会员不能是多个俱乐部的成员
  • 一个成员可以有多个电话号码和电子邮件地址
  • 一个会员只能有一个地址
  • 一个地址可以属于不同的成员(夫妻或兄弟姐妹)

我最大的困惑:

  • 如果我想在Club描述所有者的列中添加一个列,谁也将成为成员,在不将同一成员列出两次的情况下,最好的方法是什么?

  • 我应该将所有表放在 id 的自动增量上还是这是一个坏主意?(优点/缺点?)

  • 如果我在外键选项卡中添加外键,这些外键会自动对应于正确的表还是我也必须将这些添加到列中?(见图2)

  • 和我可能是noobiest 的问题...我把外键phonenumberemail在他们各自的表中链接到一个person_Id 还是我应该把phoneNumber 和email Id 放在person 表中?

(我很抱歉图片中的语言不是英语,我希望这不是什么大问题)

设计

外键

mysql foreign-key database-design

9
推荐指数
1
解决办法
1824
查看次数

我应该为不同的实体状态、状态或阶段创建多个表吗?

我的tasks数据库中有一个表,在感兴趣的业务领域中,任务可以有多种状态:“打开”、“开始”、“审查中”和“已完成”。

尽管在同一个表中有“打开”和“开始”,但使用标志标识,但出于某种原因,我很早就决定将“审查中”和“已完成” 任务放在他们自己的单独表中。虽然这似乎是一个好主意,可以轻松查询特定事物,但当我考虑为任务实现注释功能时,我意识到值会在三个表中发生变化。task_id

我做错了吗?

当前的考虑

我想到的一些解决方案是重做组织并将所有内容放在一张桌子上,使用标志来纯粹区分状态(这将导致大量的返工);创建某种UUID可以跨表转移的东西 - 尽管我认为如果这样做可能会导致性能问题;最后,将IDs跨表设置为不再自动递增,并简单地“继承”第一个task表(自动递增)的原始值。

在这种情况下做了什么?我不是最精通数据库设计的人,而且我在进行过程中正在编造这一点。

任何帮助将不胜感激。

对@MDCCL 通过评论提出的进一步信息请求的回应

因此,状态(或状态)一个的任务,可以随着时间而改变,对不对?同一个具体的任务可以出现多少次相同的状态,比如“打开”?它会根据相关任务呈现的状态类型而变化吗?

是的,一个task.state理论上最多可以改变四次。我不会详细介绍逻辑,但最长的链将是“begun” ? “completed” ? “review” ? “completed”. 每次,目前,它们都被放入另一张桌子。

例外的是,无论它是否“开始”,用户都可能会无限地放弃然后重新执行任务——至少在理论上是这样。这至少得益于“开始”状态是一个标志这一事实。

好的,但是某个任务将始终呈现一个特定的“当前”状态,对吗?例如,当 …

mysql database-design

4
推荐指数
1
解决办法
1112
查看次数

创建包含阻止好友选项的友谊数据库

我的数据库老师要求我们使用 MySQL 作为数据库管理系统编写 Facebook 的克隆,所以我试图在相应的数据库中表示朋友关系。

到目前为止,我已经通过到处搜索构建了以下表格:

CREATE TABLE Users (
    UserID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    Nome VARCHAR (20) NOT NULL,
    Sobrenome VARCHAR (20) NOT NULL,
    Foto LONGBLOB,
    Cidade VARCHAR (180),
    PRIMARY KEY (UserID)
);

CREATE TABLE Friends (
    UserID INT UNSIGNED NOT NULL,
    FriendID INT UNSIGNED NOT NULL,
    PRIMARY KEY (UserID, FriendID),
    CONSTRAINT FK_UserID
    FOREIGN KEY UserID REFERENCES Users (UserID),
    CONSTRAINT FK_FriendID
    FOREIGN KEY FriendID REFERENCES Users (UserID)
); 
Run Code Online (Sandbox Code Playgroud)

我将Friends表描述为使用UserID(声明为Users表主键)的自关系。

除了一些基本的#1064 错误,我正在处理:是否可以为这种关系添加一个阻止好友选项?例如,如果我不想再与某人交谈,我只是阻止他们。

mysql database-design

3
推荐指数
1
解决办法
1189
查看次数

如果同一产品有多个供应商,如何去除产品表中的数据冗余

我正在设计一个数据库,其中有不同的产品和供应商。例如,我有一个产品“手机”,比如说苹果 5S。这将通过我的网站从 Mapple、Mango 等不同供应商处出售。

我无法为每个供应商存储数据,因为这会导致数据冗余。我一直在考虑产品表的以下列:

  • 产品编号
  • 供应商编号
  • 产品名称
  • 价值
  • SKUID
  • 供应商名称
  • 还有很多...

在此处输入图片说明

我们可以看到产品名称每次都重复,导致数据冗余。

我主要关心的是如何避免数据冗余?如何设计Product表?

从评论中添加:

  • 产品和供应商之间将存在多对多关系。
  • 供应商和供应商是相同的。它是一个像店主一样的小组织,被我们列出来。
  • 将有许多不同的店主,他们都可能拥有相同的产品。它会每天增加。假设我们有 1000 个店主(供应商),每个店主有 100 个相同的产品,那么不需要的数据就会有 1000*100 行。
  • 表中有更正 Vendor 和 Supplier 是一样的。关于个人或人。他们永远不会成为供应商。

normalization database-design

2
推荐指数
1
解决办法
2541
查看次数

如何命名包含商店和版本 ID 的字段

我正在构建一个管理 POS 系统定义的数据库(菜单项、收银员等)。它将包括许多商店和许多版本。

因此,典型的表将如下所示(MenuItems 表)...

StoreID PK
VersionID PK
MenuItemID PK
MenuItemName
Run Code Online (Sandbox Code Playgroud)

但我想将 StoreID 和 VersionID 合并为一个代表商店和版本的 ID(因此,商店 101 的版本 5)。所以,我简化了每个表上的主键(因为每个表都需要这个)

然后让我的桌子看起来像这样......

SomethingID PK
MenuItemID PK
MenuItemName
Run Code Online (Sandbox Code Playgroud)

请帮我命名 StoreIDAndVersionID 字段。我不知道该怎么称呼它。

database-design

1
推荐指数
1
解决办法
290
查看次数