Sql 我的世界时间数据库设计/ORM

Sql 我的世界时间数据库设计/ORM,sql,orm,foreign-keys,many-to-many,relation,Sql,Orm,Foreign Keys,Many To Many,Relation,我有一个数据库设计,我想得到一些反馈/帮助 我有三个不同的实体:城市,时区,规则 一个城市与1关联,并且只有1个时区(非1:仅1) 时区可能与许多城市(不确定城市的最小数量)相关 一个时区正好有两条规则(DST和ST) 每个规则可能与许多不同的时区关联 我使用ORM Designer设计表格只是为了帮助我可视化: 在本ORM中,有: 父时区和子城市 父时区和子时区之间的一对多关系 父规则和子时区规则 现在回答我的问题: 这个多对多连接表可以工作吗 我如何知道什么规则属于什么时区?我有

我有一个数据库设计,我想得到一些反馈/帮助

我有三个不同的实体:
城市
时区
规则

  • 一个
    城市
    与1关联,并且只有1个
    时区
    (非<1,非>1:仅1)
  • 时区
    可能与许多
    城市
    (不确定城市的最小数量)相关
  • 一个时区正好有两条规则(DST和ST)
  • 每个
    规则
    可能与许多不同的
    时区关联
我使用ORM Designer设计表格只是为了帮助我可视化:

在本ORM中,有:

  • 时区
    和子
    城市
  • 时区
    和子
    时区之间的一对多关系
  • 规则
    和子
    时区规则
现在回答我的问题:

  • 这个多对多连接表可以工作吗

  • 我如何知道什么
    规则
    属于什么
    时区
    ?我有
    TimeZone.RuleName
    属性来获取
    时区的
    规则
    ,但是如果我想向后走,比如说查找规则适用的所有
    时区

  • 如何使用字符串(
    RuleName
    )查找时区的
    规则
    ,因为
    时区
    有两条规则(名称相同但ID不同/唯一)

  • 如何使用正确的ID/行填充此连接表

  • 我知道
    City
    有一个
    TimeZoneId
    ,我为它添加了实际值,我可以使用这个
    TimeZoneId
    来查找
    时区
    a
    City
    所属的,但是我如何才能找到所有
    城市
    a
    时区
    所包含的内容呢

下面我粘贴了我为创建这些表而编写的TSQL代码,我唯一没有的是关联,因为我从未在TSQL中进行过关联(很明显)

我为这个可怕的帖子道歉,我已经尝试了几个月了,我厌倦了每天几个小时的暴食/谷歌搜索:p 谢谢你花时间阅读,我真的很感激/


-Francisco

我将跳过关于您是否真的需要/应该这样做而不是使用标准库的部分,只讨论时区映射到两个规则的问题

时区
具有
规则ID
。它可以有两个
RuleId
s:

  • DstRuleId
  • 甲状腺肿
例如:

        CREATE TABLE timezones
        (
            [id] INT NOT NULL PRIMARY KEY,
            [name] VARCHAR(30) NOT NULL,
            [bias] SMALLINT NOT NULL,

            [dst_rule_id] INT,
            [st_rule_id]  INT,

            [tz_abreviation] VARCHAR(7) NOT NULL,
            [country_code] CHAR(2) NOT NULL,
            [country_name] VARCHAR(42) NOT NULL,
            [comments] VARCHAR(100),
            [coordinates] VARCHAR(20),
            [version] ROWVERSION
        );
这将是最简单的。为了获得更大的灵活性,并遵循更密切的关系,可以引入一个
RuleType
表,该表只从两个条目开始:

  • DST
这将允许将来扩展规则的能力。但是您需要从
规则
表到
规则类型
表的映射,
时区表将引用这些映射。如果有很高的可信度,那么使用DstRuleId和StRuleId就更容易了,因为这不会改变

  • 查找规则适用的所有时区

    从TimeZoneRule中选择timezoneid,其中RuleId=?

  • 由于时区有两条规则(名称相同但ID不同/唯一),如何使用字符串(RuleName)查找时区的规则

    如果TimeZoneRule中有两列,则为隐式

  • 如何使用正确的ID/行填充此连接表

    插入时区规则(时区id,规则id)值(?,)

  • 我知道城市有一个时区ID,我为其添加了实际值,我可以使用该时区ID查找城市所属的时区,但如何查找时区包含的所有城市

    选择时区所在城市的id\u id=?


我之所以不使用标准库,是因为这将是Windows Phone应用程序上的本地数据库,不幸的是,该应用程序不包含这些库。
        CREATE TABLE timezones
        (
            [id] INT NOT NULL PRIMARY KEY,
            [name] VARCHAR(30) NOT NULL,
            [bias] SMALLINT NOT NULL,

            [dst_rule_id] INT,
            [st_rule_id]  INT,

            [tz_abreviation] VARCHAR(7) NOT NULL,
            [country_code] CHAR(2) NOT NULL,
            [country_name] VARCHAR(42) NOT NULL,
            [comments] VARCHAR(100),
            [coordinates] VARCHAR(20),
            [version] ROWVERSION
        );