相关疑难解决方法(0)

数据库中不同实体的相同数据 - 最佳实践 - 电话号码示例

鉴于一个数据库系统处理员工,客户和供应商,所有这些都有多个可能的电话号码,您将如何以良好的标准化方式存储这些数字?我有一点思考,合乎逻辑的方式并没有跳出来.

database-design database-normalization

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

良好的数据库表设计:一个表为每个实体混合不同的实体或单独的表

什么是更好的数据库设计?

有一个可以包含不同"类型"记录的大表,例如:员工,汽车,手机,为了识别每种类型的记录,我们有一个名为type的列.

所以表格的列会看起来像

id | 类型| 名称

1 | 汽车| 涉

2 | 汽车| 丰田

3 | 电话| 摩托罗拉

4 | 员工| 插口

5 | 员工| Aneesh

6 | 电话| 诺基亚

7 | 电话| 摩托罗拉

或者每种类型都有不同的表格

例如:

雇员

id | 名称

汽车

id | 名称

手机

id | 名称

这些表可以具有来自其他表的外键引用.现在,如果每个表都有不同的列,那么决定很简单,你不能在同一个表中拥有它.因此可能排除选项1(除非所有不常见的列都可以为空).但是,如果这些不同的实体具有相似的列,那么更好的设计是什么呢?

什么可以支持和反对每个?

database-design

8
推荐指数
2
解决办法
4461
查看次数

数据库表的最佳设计是什么,可以由两个不同的资源拥有,因此需要两个不同的外键?

我的应用程序具有可属于组的用户的通知设置.组管理员可以定义整个组的设置,以便在任何用户执行操作时,将通知管理员.管理员还可以定义单个用户的设置,这将覆盖组设置.

现在我有一个包含列的数据库:group_id, action1, action2, action3, ....这些操作是布尔值,用于确定当用户在其组中执行该操作时是否通知管理员.

我可以创建一个由User模型而不是Group模型拥有的单独的表,但是将完全相同的数据存储在一个完全独立的表中并保存更改group_iduser_id.

另一种选择是添加user_id到我已经拥有的表中,并允许空值group_id.在确定用户的通知设置时,应用程序将首先根据用户选择设置,然后回退到group_id非空的设置.这感觉效率低下,因为数据库中会有很多空值,但这对我来说肯定需要的工作量更少.

这种情况的设计是否比我描述的两种设计更有效?

database database-design foreign-keys relational-database

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

如何在关系数据库中建模自定义类型?

我对数据库设计还不熟悉,但我理解基础知识.我正在创建一个关系数据库,我想做一些类似于创建可重用类型或类的东西.例如,假设我有一张Customer桌子和一张Item桌子.客户和项目通过标准的1对多关系相关联,因此Item有一个名为的列CustomerId.

我还想为每个客户每个项目提供多个"备注" .在普通的OOP模型中,我只需创建一个Note类,并在需要时创建它的实例.当然,关系数据库是不同的.我正在考虑拥有一张Note桌子,我想在Customer和Note之间建立一对多的关系,以及Item和Note.那么问题是Note表必须为每个其他表有一个列,希望使用这个"类型".(见下面的例子) note_relation1

我还想过,我可以在Note和Customer/Item(或其他)之间创建一个中间表.这将允许我避免在每个引用它的表的Note中有额外的列,因此当我添加更多需要注释的表时,注释可以保持不变.我认为这是更好的解决方案.(见例) note_relation2

通常如何处理这种情况?我接近正确吗?我很感激有关如何设计我的数据库以获得我上面描述的那种功能的任何建议.

database database-design types relational-database

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

用完整性约束来加强“子集”关系的最佳方法是什么

例如,给定3个表:

  • 腹足动物
  • 蜗牛
  • ug

并假设我们要执行

  1. “腹足动物”中的每一行都在“蜗牛”或“子弹”中恰好有一个对应的行(但不能同时包含两者)
  2. “子弹”中的每一行在“腹足动物”中恰好有对应的一行
  3. “蜗牛”中的每一行在“腹足动物”中恰好有对应的一行

设置架构以实施这些约束的最佳方法是什么?

我为postgres提供了一个可能的答案,我对postgres和Oracle的解决方案特别感兴趣,但也有兴趣查看其他RDBMS的解​​决方案

编辑
作为参考,以下答案/评论中的SO问题解决了类似的问题:

mysql sql-server oracle postgresql database-design

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

Django 中的约束:2 个外键中的 1 个必须为 null

我想允许两个外键字段为空。

但两个字段不能同时为空。
事实上,任何时候都必须准确地设置一个。

我该如何表达这一点呢?

外键引用的两个表不相同。

django constraints foreign-keys

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

一个表中的许多空值与三个表中的空值

我有三个表与普通场- users,guestsadmins.

最后两个表有一些users字段.这是一个例子:

用户

id|username|password|email|city|country|phone|birthday|status
Run Code Online (Sandbox Code Playgroud)

宾客

id|city|country|phone|birthday
Run Code Online (Sandbox Code Playgroud)

管理员

id|username|password|status
Run Code Online (Sandbox Code Playgroud)

我想知道它是否更好:

a)使用一个具有许多NULL值的表

b)使用三个表

mysql sql database null database-design

5
推荐指数
2
解决办法
1215
查看次数

Django中的多态模型继承

这个问题是关于Django中的模型继承.

几乎所有我读过的内容(包括Django文档本身)都强烈建议使用"抽象基类"继承而不是"多表"继承.我同意推理,因此完全支持这项建议.但是,Django似乎没有支持:

  • 多态查询,或
  • 模型链接(即我不能从另一个模型创建一个ForeignKey字段到抽象基类).

情况

例如,我有一些实现'抽象基类'继承模式的模型:

class Tool(models.Model):
    name = models.CharField(max_length=30)
    group = models.ManyToManyField(ToolGroup, blank=True) # Link to 'ToolGroup' MUST be placed on abstract class
    attributes = models.ManyToManyField(ToolAttributeValue, blank=True)  # Link to 'ToolAttributeValue' MUST be placed on abstract class

    class Meta:
        abstract = True # Almost everything I read strongly recommends against making this its own table


class HandheldTool(Tool):
    electrical_safe = models.BooleanField(default=False)


class PowerTool(Tool):
    compliance_expiry_date = models.DateTimeField()


class ConsumableTool(Tool):
    combustible = models.BooleanField(default=False)
    best_before = models.DateTimeField(null=True)
Run Code Online (Sandbox Code Playgroud)

我还有一些与工具相关的分组和信息类: …

python django inheritance sqlalchemy django-models

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

单个表或多个表用于层次结构数据

我必须实现以下层次结构数据:

Category (id, name, url)
SubCategory (id, name, url)
SubSubCategory (id, name, url)
Run Code Online (Sandbox Code Playgroud)

注意,这是多对多关系。EG:每个节点可以有多个父级或子级。没有流通关系(感谢上帝)。只有某些SubSubCategory可以属于多个SubCategory。

我的实现:为此,我使用单个表

Cat (id, type(category, subcategory, subsubcategory), name, url)
CatRelation (id, parent_id, child_id, pre_calculated_index for tree retrieval)
Run Code Online (Sandbox Code Playgroud)

pre_calculated_index可以左,右实施改性序树遍历的[1 2]或在我的实现的路径。这pre_calculated_index是在将子级添加到一个节点时计算出来的,这样,当您检索一棵树时,只需要按此字段排序即可,而不必进行递归查询。

无论如何,我的老板认为这种实现方式并不理想。他建议为每种类型的类别都拥有每个表,然后有一个数据透视表来链接它们:

Category (id, name, url)
SubCategory (id, name, url)
SubSubCategory (id, name, url)
Category_SubCategory(category_id, sub_category_id)
SubCategory_SubSubCategory(sub_category_id, sub_sub_category_id)
Run Code Online (Sandbox Code Playgroud)

检索树时,只需联接所有表。他的论据是,稍后将某些属性添加到不需要的任何类别类型时,在单表实现中将字段设为null。并且pre_calculated_index可能会出错,因为它是用代码计算的。

我应该跟随哪一个?哪个有更好的表现?

我使用django和postgreSQL。

PS:有关pre_calculated_index实现的更多详细信息:我在CatRelation中添加了一个路径(字符串,唯一,索引)值(而不是每个节点左右):根节点将具有“ path ='”。子节点添加到CatRelation后,将具有path = parent_path +'。因此,当您按此路径排序时,将按树顺序获得所有内容。例子:

Cat

| id | name       | url |
|----|------------|-----|
| 1  | …
Run Code Online (Sandbox Code Playgroud)

database django postgresql database-design

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

SQL - 1 个包含许多 NULL 值或许多小表的大表

我试图了解使用 1 张大桌子还是许多小桌子更好。我已经通过网络准备好了这取决于每种情况,所以我想根据下面的示例提出任何建议:

假设我想创建一个包含资产所有特征的数据库。资产可以分为不同的资产类别(即股票、债券、现金等)。所有资产类别都具有相似的特征(即 ID 代码、发行人名称)并且一些资产具有特定特征(债券具有到期日而股票没有)。所以我的问题是我是否应该使用一个大表,当资产不适用时,该表将保留为 NULL(如下所示)

1 表中的所有特征

还是每次我需要生成报告时,我应该使用几个表作为并加入它们?(如下所示)

多表中的特征

每种情况的利弊是什么?例如,如果我有 1m 个不同的 ID 代码,它是否需要为 1 表选项增加空间,而使用多表选项查询性能会显着下降?

如果每种类型的独特特征是 50 种,并且有 10 种不同的资产类别,该怎么办?我应该创建一个 50 x 10 = 500 列的表(每行的大部分列都为 NULL)还是应该有 10 个不同的表并在我想创建报告时使用 LEFT JOIN?

sql database-design

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