【问题标题】:SQL Database ModelSQL 数据库模型
【发布时间】:2012-06-22 10:59:15
【问题描述】:

我正在为如何为我要构建的数据库绘制模型而苦苦挣扎。正确建模数据库后,我将在 C# 中使用 SQL2LINQ。

我正在研究的第一部分是为分发列表设计 SQL 表。

由于以下规则适用,这些 DL 看起来相当复杂:

  1. DL 共有三种不同类型(用于特定事件)。
  2. 每种类型的 DL 将包含多个 DL(可以超过 10 个)。
  3. 一个人可以处于所有三种不同类型的 DL。
  4. 一个人可以在多个相同类型的 DL 中。

对于此人,我将持有以下信息:

  1. 名字
  2. 姓氏
  3. 联系电话
  4. 电子邮件地址

我不喜欢重复信息的想法,在数据库中有多次相同的人;好像不太干净。

任何帮助都将不胜感激,我无法完全理解最好的方法。

【问题讨论】:

  • 当 DL 包含一个 DL 时,它们必须是同一类型吗?

标签: c# sql database linq database-design


【解决方案1】:

听起来好像您只需要人员和分发列表之间的多对多关系,您可以使用联结表对其进行建模:

人物

  • 身份证
  • 名字

DistributionListEntries

  • 身份证
  • DistributionListId
  • 人员标识

分发列表

  • 身份证
  • 类型

您可以将Type 直接存储在分发列表表中,也可以将其作为DistributionListTypes 表的外键以及有关分发列表类型的其他信息。

【讨论】:

    【解决方案2】:

    您需要了解外键和父/子关系。

    我不确定我是否会完全按照您的描述进行设计。您可以为每个分发列表创建一个单独的表格,或者您可以有一个单独的表格,其中包含一列来说明它属于哪个事件类型。

    我不明白为什么分发列表需要递归,但您可以与自己建立外键关系。以这种方式编写查询将更难,但可以由具有足够技能的人完成。谷歌搜索“递归 SQL”。

    在它们之间有一个 PERSON 表、一个 DISTRIBUTION_LIST 表和一个 JOIN 表。对我来说,PERSON 和 DISTRIBUTION_LIST 之间似乎存在多对多关系。

    【讨论】:

    • 谢谢,帮助很大。这是设置的方式,不是我设计的,它是我继承的。目前这一切都是在 Excel 电子表格中完成的,我希望将其引入并保持最新状态。
    • 我不明白这些 JOIN 表 :-(
    • 我想我现在知道这会导致什么,您使用联接表来关联 2 个表,因此在联接表中我添加了一条带有人员 ID 和 DistributionListID 的记录,然后形成两张表之间的关系。我想我现在有这个了。我唯一的问题是 join tbale 中的 mu ID 字段都是 samm Ints .. 所以在编辑它时,它的问题是知道每个分布 List 或 Person 的正确 int 值! :-(
    • 不一定。对于那些你知道一个或另一个的场合(“给我这个人的所有列表”或“告诉我所有属于这个列表的人”)这很好用。对于其他情况,您将在父表上使用 WHERE 子句(例如“告诉我列表中所有红头发的人。”)
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2017-12-21
    相关资源
    最近更新 更多