我正在考虑如何在SQL Server数据库中表示复杂的结构.
考虑一个需要存储一系列对象细节的应用程序,这些对象共享一些属性,但有许多其他属性不常见.例如,商业保险计划可能包括同一保单内的责任,汽车,财产和赔偿保险.
在C#等中实现它是微不足道的,因为您可以创建一个带有Sections集合的Policy,其中Section是根据各种类型的封面所需继承的.但是,关系数据库似乎不容易这样做.
我可以看到有两个主要选择:
为所有可能的变体创建一个Policy表,然后是一个Sections表,其中包含所需的所有字段,其中大部分都是null.
创建一个Policy表和许多Section表,每个表对应一种封面.
这两种替代方案似乎都不令人满意,特别是因为必须在所有Sections中编写查询,这将涉及大量连接或大量空检查.
这种情况的最佳做法是什么?
sql database inheritance database-design class-table-inheritance
什么是提示/技巧,当你需要与继承,不支持继承关系数据库持久化类?
说我有这个经典的例子:
Person -> Employee -> Manager
-> Team lead
-> Developer
-> Customer -> PrivilegedCustomer
-> EnterpriseCustomer
Run Code Online (Sandbox Code Playgroud)
有哪些设计数据库的技术?各有利弊?
PS我已经搜查,发现有关数据库继承的几个问题,但大多数是有关更改到支持它本身数据库引擎.但是,让我说我坚持使用SQL Server 2005 ......我的选择是什么?
假设您正在设置数据库来存储各种车辆的碰撞测试数据.您想存储快艇,汽车和卡丁车的碰撞测试数据.
您可以创建三个单独的表:SpeedboatTests,CarTests和GokartTests.但是每个表中的很多列都是相同的(例如,执行测试的人员的员工ID,碰撞的方向(正面,侧面,后面)等).但是,很多列都会有所不同,因此您不希望将所有测试数据放在一个表中,因为您将拥有相当多的列,对于快艇来说总是为空,相当多的列始终是对于汽车来说是零,而对于卡丁车来说,相当多的都是空的.
假设您还想存储一些与测试没有直接关系的信息(例如正在测试的东西的设计者的员工ID).这些列根本不适合放入"测试"表,特别是因为它们将在同一车辆上的所有测试中重复使用.
让我说明一种可能的表格排列,以便您可以看到所涉及的问题.
Speedboats id | col_about_speedboats_but_not_tests1 | col_about_speedboats_but_not_tests2 Cars id | col_about_cars_but_not_tests1 | col_about_cars_but_not_tests2 Gokarts id | col_about_gokarts_but_not_tests1 | col_about_gokarts_but_not_tests2 Tests id | type | id_in_type | col_about_all_tests1 | col_about_all_tests2 (id_in_type will refer to the id column of one of the next three tables, depending on the value of type) SpeedboatTests id | speedboat_id | col_about_speedboat_tests1 | col_about_speedboat_tests2 CarTests id | car_id | col_about_car_tests1 | col_about_car_tests2 GokartTests id | gokart_id | col_about_gokart_tests1 | col_about_gokart_tests2
这个结构的优点/缺点是什么,实现这样的优先方式是什么?
如果还有一些信息适用于您希望在车辆表中使用的所有车辆,该怎么办?那么CarTests表看起来像......
id | …
database-design polymorphic-associations class-table-inheritance
我正在使用.NET Framework 3.5 SP1在Visual Studio 2008 SP1中使用ADO实体框架编写数据访问库.我试图在两个实体之间创建关联,这两个实体都是从抽象类型派生的.我使用Table Per Hierarchy(TPH)表示两个实体继承层次结构,这意味着只有两个表 - 每个实体继承层次结构一个.
注意您可以使用每种类型的表(TPT)来避免此问题,但它带来了它自身的缺点.在继承持久性模型之间进行选择时,请参阅此处和此处了解更多详细信息
以下是实体模型的Designer视图的屏幕截图:
And here is a screenshot of the database schema:
When you create associations in the ADO Entity Framework Designer between derived types modeled with TPH using Visual Studio 2008 SP1 and the .NET Framework 3.5 SP1 you are likely to receive the following an "Error 3034: Two entities with different keys are mapped to the same …
在 Django 中,是否有一个简单的替代多表继承来实现下面描述的基本数据模型模式?
请考虑下图中非常基本的数据模型模式,它基于例如Hay, 1996。
简单地说:Organizationsand Personsare Parties,并且Parties都有Addresses 。类似的模式可能适用于许多其他情况。
这里的重点是 与Address具有显式关系Party,而不是与各个子模型Organization和具有显式关系Person。
请注意,每个子模型都引入了额外的字段(此处未描述,但请参阅下面的代码示例)。
这个具体的例子有几个明显的缺点,但这不是重点。为便于讨论,假设该模式完美地描述了我们希望实现的目标,因此剩下的唯一问题是如何在 Django 中实现该模式。
我相信,最明显的实现将使用多表继承:
class Party(models.Model):
""" Note this is a concrete model, not an abstract one. """
name = models.CharField(max_length=20)
class Organization(Party):
"""
Note that a one-to-one relation 'party_ptr' is automatically added,
and this is used as the primary key (the …Run Code Online (Sandbox Code Playgroud) python django inheritance data-modeling single-table-inheritance
如果我有一个叫动物的类,狗和鱼是子类.动物具有称为"颜色"的属性.狗具有称为"尾长"的属性,并且鱼没有此属性.鱼具有称为"重量"的属性,狗没有这个属性.
所以,我想设计一个数据库来存储这些信息.我该怎么办?这是一些想法:
想法1:制作动物表,并且表格有类型,以找到什么样的动物,如果是狗,只需从狗桌得到结果.
Animal:color:String类型:int
类型:狗:0鱼:1
狗:TailLength:int
鱼:重量:int
想法2:只在数据库中存储Dog表和Fish表,删除动物表.
狗:颜色:字符串TailLength:int
鱼:颜色:字符串重量:int
我正在制定一个程序,您可以在其中注册投诉.有三种类型的投诉:( internal员工的错误),external(来自其他公司的supplier错误)和(供应商的错误).它们包含无法共享的不同数据.我目前有4张桌子(投诉,员工,公司和供应商).这是表格的可视化:
我对子类型有基本的了解,但我似乎无法将它们从ERD转换为实际的SQL Server数据库,或者至少在这种情况下.这大致是4个表的外观(省略了不相关的属性):
投诉
ComplaintId PK
Employee
EmployeeId PK
EmployeeName
公司
CompanyId PK
CompanyName
供应
商SupplierId PK
供应商名称
注册投诉时,错误由3种类型中的任何一种产生,它们都存储不同的信息.在这种情况下,存储信息的最佳方法是什么?我曾经想过把2个鉴别的投诉表的:ComplaintType和Id这样我可以指出,以检查其表,我需要什么ID,但不是很干净,也没有效率.
请协助.
如何在数据库中显示表的模式以及在VS中链接它们的外键?
在这个问题中使用了这种模式的例子.
有没有办法在数据库中使用继承(特别是在SQL Server 2005中)?
假设我有几个像CreatedOn,CreatedBy这样的字段,我想在我的所有实体上添加.我正在寻找一种替代方法,而不是将这些字段添加到每个表中.
让我首先说我不是数据库专家.我正在研究其他人编写的一些代码,我注意到表之间有很多1-1关系.这是一个例子:
tblPropertyRecord
pID
hasPhotos
hasVideo
comment
headline
tblPropertyLocation
ID
pID
country
region
city
zip
street_address
tblPropertyOther
ID
pID
upload_path
isApproved
isPaid
Run Code Online (Sandbox Code Playgroud)
这并不包含属性的每个字段 - 每个记录总共有大约35个字段,但是每个表都有,并且每个记录只能有一个条目1到1到1 ...我想这是描述的方式它?
这有什么好处,而不仅仅是拥有35个字段的tblPropertyRecord?我理解许多对1,1对多,多对多......但这似乎增加了混乱而没有真正的好处.