首页 / 知识
关于数据库:SQL2005:将一个表链接到多个表并保留引用完整性?
2023-04-12 17:20:00

SQL2005: Linking a table to multiple tables and retaining Ref Integrity?这是我的数据库的简化:
然后,我们还有其他分别与Quote和Job表相关的表。 我现在需要添加一个消息表,用户可以在其中记录客户留下的有关工作和报价的电话消息。 我可以创建两个相同的表(QuoteMessage和JobMessage),但这违反了DRY主体并且看起来很杂乱。 我可以创建一个消息表:
但是,这阻止了我使用约束来强制我的参照完整性。我还可以预见它稍后会使用Linq to SQL在开发方面造成问题。 这个问题是否有一个优雅的解决方案,还是我最终将不得不一起破解一些东西? 烧伤 创建一个消息表,其中包含唯一的MessageId以及需要为消息存储的各种属性。
创建两个链接表-QuoteMessage和JobMessage。这些将仅包含两个字段,分别是Quote / Job和Message的外键。
通过这种方式,您仅在一个位置定义了消息的数据属性(使扩展和查询所有消息变得容易),但是您还具有引用完整性,可以将Quotes和Jobs链接到任意数量的消息。实际上,Quote和Job都可以链接到同一条消息(我不确定这是否适合您的业务模型,但至少数据模型可以为您提供选择)。 @burns Ian的答案(1)是正确的[请参见注释]。使用多对多表 这是可以使用触发器的罕见情况之一。但是,需要注意确保单个
请注意Ian,我认为 关于我能想到的另一种方法是拥有一个基本的Message表,同时包含一个Id和一个TypeId。然后,您的子表(QuoteMessage和JobMessage)同时在MessageId和TypeId上引用基表-但它们也具有CHECK CONSTRAINTS来仅强制执行适当的MessageTypeId。
与JobMesssage和QuoteMessage表相比,这对您有什么好处?它将消息提升为头等公民,以便您可以从单个表中读取所有消息。作为交换,您从一条消息到其相关报价或工作的查询路径需要再加入1条。这是否取决于折衷方案取决于您的应用程序流程。 关于2个相同的表违反了DRY-我不会挂断电话。在数据库设计中,与DRY无关,而与标准化有关。如果您要建模的2个事物具有相同的属性(列),但实际上是不同的事物(表),那么拥有多个具有相似模式的表是合理的。比将不同的事物聚在一起的相反方法要好得多。 为什么在消息表中不仅同时具有QuoteId和JobId字段?还是消息必须与报价或工作有关,而不是两者都有关? |
最新内容
相关内容
python如何引用模块
python如何引用模块,培训,模块,环境,系统,功能,别名,路径,顺序,文件,结尾,python引用模块的方法:模块实际上就是以.py为结尾的文件注意点:自定python如何连接mysql数据库
python如何连接mysql数据库,培训,数据,项目,一致,流程,数据库,参数,结果,接口,语句,python数据库接口支持非常多的数据库,你可以选择适合你项python定时修改数据库
python定时修改数据库,时间,服务,培训,单位,代码,标准,线程,操作,时间差,进程,1.传入执行改库操作的时间update_time,用update_time和当前时间python值传递和引用传递的作用是什
python值传递和引用传递的作用是什么?,培训,作用,python怎么链接数据库
python怎么链接数据库,培训,数据,一致,流程,项目,数据库,接口,参数,结果,语句,python数据库接口支持非常多的数据库,你可以选择适合你项目的python可以搭配什么数据库
python可以搭配什么数据库,数据,网站,软件,培训,产品,网络,公司,环境,数据库,关系,python支持多种数据库,下面介绍一下MySQL和MongoDb。MySQLpython如何操作mysql数据库
python如何操作mysql数据库,培训,标准,项目,密码,数据库,接口,表字,操作,用户,机子,Python标准数据库接口为PythonDB-API,PythonDB-API为开发python引用计数机制的使用
python引用计数机制的使用,实时,培训,对象,机制,实例,时机,内存,核心,以上,东西,python引用计数机制的使用说明1、python里每一个东西都是对关于sql server:批处理文件以”
关于sql server:批处理文件以脚本数据库,关于sql server:批处理文件以脚本数据库,向导,脚本,文件,数据库,Batch file to “Script” a数据库字段的标准长度列表
数据库字段的标准长度列表,数据库字段的标准长度列表,字段,数据库表,最常见,有没有人,List of standard lengths for database field推荐的用于标记或标记的SQL数据库
推荐的用于标记或标记的SQL数据库设计,推荐的用于标记或标记的SQL数据库设计,映射,方法,缩放,说过,Recommended SQL database design关于数据库:版本跟踪,使用django自动
关于数据库:版本跟踪,使用django自动执行数据库架构更改,关于数据库:版本跟踪,使用django自动执行数据库架构更改,应用程序,数据库,框架