如果A
是 的朋友B
,那么我应该存储两个值AB
和BA
,还是一个就足够了?两种方法的优缺点是什么。
这是我的观察:
JOIN
这张表进行多次处理时会很困难。目前,我以一种方式保持这种关系。
那么在这种情况下我应该怎么做呢?有什么建议吗?
我对数据库设计比较陌生,我决定制作自己的假设数据库以进行实践。但是,我无法对其进行建模和规范化,因为我认为存在许多多对多 (M:N) 关系。
该数据库旨在保留有关在塞尔达系列中工作过的各种人物的数据。我想跟踪的控制台(S) ,一个游戏可以玩上,员工是曾在部分游戏的发展,乔布斯的员工有(很多员工在不同的工作职位在多个游戏等)
我正在学习成为 Java 开发人员的课程。
该课程涉及使用数据库,但不幸的是,我们从未真正设计过任何数据库。
大多数情况下,我们会获得预制的数据库,并且必须在其上实现代码以插入、更新、读取或删除数据。
但是当我的最终测试到来时,我很可能会制作涉及数据库的东西,因此我想尝试设计一些较小的东西来掌握设计的窍门,因为我注意到一个好的数据库设计在以下情况下会产生很大的不同编写代码以使用它。
我希望这些类型的问题在这里是允许的,而且不会太宽泛。
这是我为一些简单的东西而制作的小设计clubs
,members
带有addresses
和phonenumbers
。
- 会有多个俱乐部。
- 每个俱乐部都会有多个成员(显而易见)
- 一个会员不能是多个俱乐部的成员
- 一个成员可以有多个电话号码和电子邮件地址
- 一个会员只能有一个地址
- 一个地址可以属于不同的成员(夫妻或兄弟姐妹)
我最大的困惑:
如果我想在
Club
描述所有者的列中添加一个列,谁也将成为成员,在不将同一成员列出两次的情况下,最好的方法是什么?我应该将所有表放在 id 的自动增量上还是这是一个坏主意?(优点/缺点?)
如果我在外键选项卡中添加外键,这些外键会自动对应于正确的表还是我也必须将这些添加到列中?(见图2)
和我可能是noobiest 的问题...我把外键
phonenumber
和
(我很抱歉图片中的语言不是英语,我希望这不是什么大问题)
我的tasks
数据库中有一个表,在感兴趣的业务领域中,任务可以有多种状态:“打开”、“开始”、“审查中”和“已完成”。
尽管在同一个表中有“打开”和“开始”,但使用标志标识,但出于某种原因,我很早就决定将“审查中”和“已完成” 任务放在他们自己的单独表中。虽然这似乎是一个好主意,可以轻松查询特定事物,但当我考虑为任务实现注释功能时,我意识到值会在三个表中发生变化。task_id
我做错了吗?
当前的考虑
我想到的一些解决方案是重做组织并将所有内容放在一张桌子上,使用标志来纯粹区分状态(这将导致大量的返工);创建某种UUID
可以跨表转移的东西 - 尽管我认为如果这样做可能会导致性能问题;最后,将IDs
跨表设置为不再自动递增,并简单地“继承”第一个task
表(自动递增)的原始值。
在这种情况下做了什么?我不是最精通数据库设计的人,而且我在进行过程中正在编造这一点。
任何帮助将不胜感激。
对@MDCCL 通过评论提出的进一步信息请求的回应
因此,状态(或状态)一个的任务,可以随着时间而改变,对不对?同一个具体的任务可以出现多少次相同的状态,比如“打开”?它会根据相关任务呈现的状态类型而变化吗?
是的,一个task.state理论上最多可以改变四次。我不会详细介绍逻辑,但最长的链将是“begun” ? “completed” ? “review” ? “completed”
. 每次,目前,它们都被放入另一张桌子。
例外的是,无论它是否“开始”,用户都可能会无限地放弃然后重新执行任务——至少在理论上是这样。这至少得益于“开始”状态是一个标志这一事实。
好的,但是某个任务将始终呈现一个特定的“当前”状态,对吗?例如,当 …
我的数据库老师要求我们使用 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 错误,我正在处理:是否可以为这种关系添加一个阻止好友选项?例如,如果我不想再与某人交谈,我只是阻止他们。
我正在设计一个数据库,其中有不同的产品和供应商。例如,我有一个产品“手机”,比如说苹果 5S。这将通过我的网站从 Mapple、Mango 等不同供应商处出售。
我无法为每个供应商存储数据,因为这会导致数据冗余。我一直在考虑产品表的以下列:
我们可以看到产品名称每次都重复,导致数据冗余。
我主要关心的是如何避免数据冗余?如何设计Product表?
我正在构建一个管理 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 字段。我不知道该怎么称呼它。