小编Alw*_*uff的帖子

在具有互斥子类的类型/子类型设计模式中实现子类型的子类型

介绍

为了让这个问题对未来的读者有用,我将使用通用数据模型来说明我面临的问题。

我们的数据模型由 3 个实体组成,它们应标记为ABC。为了简单起见,它们的所有属性都将是int类型。

实体A具有以下属性:D,EX;

实体B具有以下属性:D,EY;

实体C具有以下属性:DZ

由于所有实体共享公共属性D,我决定应用类型/子类型设计。

重要提示:实体是互斥的!这意味着实体是 A 或 B 或 C。

问题:

实体AB还有另一个共同的属性E,但是这个属性并不存在于实体中C

题:

如果可能的话,我想使用上述特性来进一步优化我的设计。

老实说,我不知道如何做到这一点,也不知道从哪里开始尝试,因此这篇文章。

database-design sql-server sql-server-2012 subtypes

21
推荐指数
3
解决办法
3922
查看次数

不知道如何将可变实体转化为关系表

介绍和相关信息:

下面的例子说明了我面临的问题:

动物有一个种族,可以是可以是SiamesePersian可以是德国牧羊犬拉布拉多猎犬

Animal 是一个强大的实体,而其种族是一个属性,可以具有两个提供的值之一( cat 或 dog )。 这两个值都很复杂(我在这里只添加了狗/猫的类型来说明问题,但也可以有猫/狗的名字和一堆其他东西)。

问题:

我不知道如何为此示例创建关系表。

我解决问题的努力:

我曾尝试使用陈的符号绘制 ER 图,这代表了问题,但作为初学者,我不知道我是否做得对。这是我得到的:

在此处输入图片说明

如果我画错了,我深表歉意,如果是这样,请纠正我。我不希望简单地获得“免费解决方案”,而且还希望学习如何处理这个问题,以便我将来可以自己解决。

我唯一想到的是创建两张单独的桌子,一张给猫,一张给狗。此外,Animal表中的race属性将只存储catdog值。像这样的东西:

Animal< # Animal_ID, race, other attributes >
Cat < # Cat_ID, $ Animal_ID, breed >
Dog < # Dog_ID, $ Animal_ID, breed >
Run Code Online (Sandbox Code Playgroud)

我真的对我的解决方案有一种不好的感觉,我担心它是错误的,因此下面的问题。

问题:

  • 如何将我的示例转换为 ER 图?
  • 如何将该 ER 图转换为关系表?

如果需要更多信息,请发表评论,我会尽快更新我的帖子。也可以随意添加适当的标签,因为我在这里很新。

谢谢你。

database-design subtypes

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

存储度量单位的标准解决方案

介绍和相关信息:

假设我有一张表,用于存储一个人的身高和体重,如下所示:

PersonTable < # ID int, Name varchar(50), Height double, Weight double >
Run Code Online (Sandbox Code Playgroud)

身高以厘米为单位,体重以公斤为单位。

问题:

我的问题是关于存储身高和体重的计量单位。

我为解决这个问题所做的努力:

  • 我可以尝试实现EAV模型。
  • 我可以通过添加额外的列来修改表格,这些列包含 Height 和 Weight 的度量单位?像下面这样:

    PersonTable < # ID int, 
                    Name varchar(50), 
                    Height double, $ HeightUnit_Id int, 
                    Weight double, $ WeightUnit_Id int >
    
    Units < #ID int, Desription varchar(20) >
    
    Run Code Online (Sandbox Code Playgroud)

  • HeightUnit_Id 和 WeightUnit_Id 是引用表 Units 中的 Id 的外键。

    题:

    有没有比我上面提到的明显解决方案更好的解决方案,因为我不喜欢两者(如果做得不好,EAV 会变得混乱,并且添加额外的“单位列”对我来说似乎是浪费空间)?

    database-design

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

    我的类型/子类型设计模式(对于互斥子类)的实现是否正确?

    介绍

    为了让这个问题对未来的读者有用,我将使用通用数据模型来说明我面临的问题。

    我们的数据模型由两个实体组成,它们应标记为AB。为了简单起见,它们的所有属性都将是int类型。

    实体A具有以下属性:DX;实体B具有以下属性:DY

    问题

    由于两个实体共享共同的属性D,我决定应用类型/子类型设计。

    我不确定我的实现是否正确,因此我在这里要求进行设计审查。

    我的实现

    -- lookup table for discriminator column
    CREATE TABLE ClassType
    (
      ClassTypeID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
      Class_Description VARCHAR(50) NOT NULL
    );
    
    -- inserting types A and B from our example 
    INSERT INTO ClassType (Class_Description)
    VALUES ('A'), ('B');
    
    -- creating base class table
    CREATE TABLE BaseClass
    (
      BaseClass_ID INT …
    Run Code Online (Sandbox Code Playgroud)

    database-design sql-server sql-server-2012 subtypes

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

    考试数据库设计

    我正在为考试设计数据库,但我被卡住了。我不知道怎么做。

    以下是相关信息:

    • 学生回答 10 个问题。
    • 每个问题有 3 个选项(答案),学生选择一个。
    • 只有一个答案是正确的,其他两个是错误的。
    • 学生只能参加一次此考试。他们不能再试一次。
    • 不会有其他考试,只有这一项。

    我需要数据库设计方面的帮助。

    到目前为止我自己尝试过的:

    表学生

    ID bigint (primary key, identity)
    Name nvarchar(MAX)
    
    Run Code Online (Sandbox Code Playgroud)

    表格问题

    ID bigint (primary key, identity)
    TextOfTheQuestion nvarchar(MAX)
    
    Run Code Online (Sandbox Code Playgroud)

    表格答案

    ID bigint (primary key, identity)
    TextOfTheAnswer nvarchar(MAX)
    QuestionID bigint (foreign key to Questions.ID)
    isCorrectAnswer bit
    
    Run Code Online (Sandbox Code Playgroud)

    表学生选择

    StudentID bigint (primary key, foreign key to Students.ID)
    AnswerID bigint (primary key, foreign key to Answers.ID)
    
    Run Code Online (Sandbox Code Playgroud)

    这是我个人为学习目的而设计的。我正在尝试自己学习实体框架 + C#。

    database-design sql-server

    4
    推荐指数
    2
    解决办法
    2582
    查看次数